Содержание книги
Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Графическая библиотека FrameWork.NET MS Visual Studio ⇐ ПредыдущаяСтр 5 из 5
Имя Описание Пример MoveTo Перемещает точку начала рисования линии в указанные координаты x и y Canvas.MoveTo(50, 100); LineTo Рисует линию начиная с текущей позиции (см. MoveTo) до указанных координат x и y. Canvas.LineTo(50, 100); Эффект перемещения точки начала рисования линии так же достигается при помощи установки своства PenPos в канвасе... например, "Canvas.PenPos.x := 20;", "Canvas.PenPos.y := 50", или "Canvas.PenPos := Point(20,50);". По умолчанию, точка начала рисования установлена в (0,0), то есть, если сразу вызвать "Canvas.LineTo(100,100);" то будет нарисована линия из точки (0,0) в точку (100, 100). Точка начала рисования автоматически переместится в (100, 100), то есть, если выполнить команду "Canvas.LineTo(200, 100);", то следующая линия будет нарисована из точки (100, 100) в (200, 100). Поэтому, если мы хотим рисовать линии несоединённые друг с другом, то придётся воспользоваться методом MoveTo. Линия, нарисованная при помощи LineTo использует текущее перо канваса (типа TPen). Основные свойства пера, это ширина - "Canvas.Pen.Width := 4;" (при помощи которого можно задавать различную ширину линий), и цвет "Canvas.Pen.Color := clLime;". Для рисования фигур, в TCanvas предусмотрены, например, следующие функции: ИМЯ ОПИСАНИЕ ПРИМЕР Ellipse Рисует элипс, вписанный в невидимый квадрат с координатами верхнего левого угла и правого нижнего. Если координаты х и y у углов будут совпадать, то получится круг. Canvas.Ellipse(0,0,50,50); FillRect Заполняет прямоугольник цветом текущей кисти (brush), но никак не за пределами него. Canvas.FillRect( Bounds(0,0,100,100)); FloodFill Заполняет данную область цветом текущей кисти, до тех пор пока не будет достигнут край. Canvas.FloodFill(10, 10, clBlack, fsBorder); Rectangle Рисует прямоугольник (или квадрат), заполненный цветом текущей кисти и обрамлённый цветом текущего пера Canvas.Rectangle( Bounds(20, 20, 50, 50)); RoundRect Тоже, что и Rectangle, но с загруглёнными углами. Canvas.RoundRect( 20, 20, 50, 50, 3, 3);
{ Пример на Delphi 7.0 }
unit Unit1;
interface
uses Windows, Messages, Dialogs, ExtCtrls,
type TForm1 = class(TForm) Image1: TImage; CheckBox1: TCheckBox; Timer1: TTimer; procedure CheckBox1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CheckBox1Click(Sender: TObject);
begin Timer1.Enabled:=CheckBox1.Checked; end;
VAR TB: TBitMap; xx,yy,dx,sn,c35 :integer;
procedure TForm1.FormCreate(Sender: TObject); begin TB:=TBitmap.create; TB.LoadFromFile('runner.bmp'); //10 по 35х35 пикселей TB.Transparent:=true; xx:=0; dx:=1; yy:=100; sn:=0; c35:=35; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i,j :integer; cc:tcolor; begin //отрисовка Image1.Picture.LoadFromFile('fon.bmp'); //320x200 //Image1.Canvas.Draw(xx,yy,TB); //альтернативные функции //Image1.Canvas.BrushCopy(Rect(xx,yy,xx+35,yy+35),TB,Rect(0,Sn,35,Sn+35),clWhite); for j:=Sn to Sn+c35-1 do for i:=0 to TB.Width-1 do begin if dx<0 then cc:=TB.Canvas.Pixels[c35-1-i,j] else cc:=TB.Canvas.Pixels[i,j]; if cc<>TB.Canvas.Pixels[0,0] then Image1.Canvas.Pixels[xx+i,yy+j-Sn]:=cc; end;{} xx:=xx+dx; if (xx<0)or(xx>320-c35) then dx:=-dx; yy:=yy+Round(sin(xx/20)*dx); Sn:=Sn+c35; if Sn>= TB.Height then Sn:=0; end;
end.
В среде С++/С# поддерживается множественное наследование (в отличие от Delphi, где холст+карандаш+кисть+шрифт+художник – это один объект) и поэтому объекты для поддержания растровой и векторной графики не объединены изначально и требуют явных ссылок друг на друга, т.е. нужно отдельно создавать объект карандаш-Pen и кисть-Brush и художника-Graphics и связать его с холстом (например, PictureBox). Идеология FrameWork.NET описана в п.2. В языках С++/C# существует целая библиотека для создания графики "System.Drawing". Она автоматически подключается при создании проекта. Самое главное изменение, которое может ввести в тупик новичка, ‑ это кодировка цвета: здесь для него используется 4 байта ARGB, т.е. введен альфа-канал (прозрачность) и, самое непонятное, он должен быть 255 (больше 0), чтобы пиксель рисовался! Если у вас не рисуется пиксель делайте: Pix |= 0xFF000000; может и поможет. Прямой доступ к пикселям есть в классе BitMap через методы Status GetPixel(INT x, INT y, Color* color); Status SetPixel(INT x, INT y, const Color& color); Эти методы очень медленные, можно использовать групповые методы: Status LockBits(IN const Rect* recx, IN UINT flags, IN PixelFormat format, OUT BitmapData* lockedBitmapData) Status UnlockBits(); Прозрачность цвета при копировании делается методом: MakeTransparent(const Color& color); Пример, где по нажатию кнопки на форме файл «music.bmp» отображается в PictureBox1 только красной компонентой цвета RGB: private void Button1_Click(System.Object sender, System.EventArgs e) { try { // Retrieve the image. image1 = new Bitmap(@"C:\My Music\music.bmp", true); int x, y; // Loop through the images pixels to reset color. for(x=0; x<image1.Width; x++) { for(y=0; y<image1.Height; y++) { Color pixelColor = image1.GetPixel(x, y); Color newColor = Color.FromArgb(pixelColor.R, 0, 0); image1.SetPixel(x, y, newColor); } }
// Set the PictureBox to display the image. PictureBox1.Image = image1; // Display the pixel format in Label1. Label1.Text = "Pixel format: "+image1.PixelFormat.ToString(); } catch(ArgumentException) { MessageBox.Show("File not found."); } }
|
||||||
Последнее изменение этой страницы: 2024-06-17; просмотров: 5; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.138.14 (0.007 с.) |