Главная страница

Работа с простой графикой и OpenGL. Delphi (Lazarus)


Скачать 0.56 Mb.
НазваниеDelphi (Lazarus)
Дата02.05.2018
Размер0.56 Mb.
Формат файлаdocx
Имя файлаРабота с простой графикой и OpenGL .docx
ТипДокументы
#42659
страница1 из 6
  1   2   3   4   5   6

Delphi (Lazarus)

http://grafika.me/lessons

  • Как начать работать с графикой в Lazarus (Delphi)

  • Графические примитивы класса TCanvas в Lazarus

  • Использование циклов при построении изображения

  • Процедуры и функции при построении изображений

  • Простая анимация. Линейное движение объекта по однородному фону

  • Простая анимация. Линейное движение объекта по неоднородному фону

  • Подключение и работа с OpenGL в Lazarus под Windows

  • Вращение, движение, масштабирование и проекции в OpenGL под Lazarus


Как начать работать с графикой в Lazarus (Delphi)


5. Февраль 2013 - 22:29 | admin

Среда программирования: 

Delphi (Lazarus)

Запустите Lazarus и начните новый проект "Приложение". Найдите на панели инструментов компоненты TPaintBox и TButton (или TBitBtn) и разместите их на форме.

PaintBox1 - поле для рисования.
Button1 - кнопка, по нажатию которой будет строится изображение.

http://grafika.me/files/les_screens/lazarus_les1_0.jpg

Используя "Инспектор объектов", настройте свойства компонентов. Например, у PaintBox1 можно выставить размеры Width (ширина по Х) и Height (высота по Y).

Выберите на форме объект Button1 и перейдите в "Инспекторе объектов" на вкладку "События". Напротив OnClick (событие щелчка по кнопке) в пустом поле сделайте двойной щелчок (автоматически будет создано имя процедуры) или впишите название процедуры и нажмите "Enter".

В редакторе кода будет создана процедура с указанным именем

procedure TForm1.Button1Click(Sender: TObject);

begin

 

end;

Между операторными скобками begin-end необходимо прописать код, который и будет выполняться на нажатие кнопки.

У объекта TPaintBox есть свойство Canvas (объект TCanvas), методы и свойства, которого отвечают за отрисовку графических элементов. Например, прямоугольник можно нарисовать следующим образом:

procedure TForm1.Button1Click(Sender: TObject);

begin

PaintBox1.Canvas.Rectangle( 10,20, 200,100);

end;

http://grafika.me/files/les_screens/lazarus_les1_1.jpg

Запуск проекта на выполнение осуществляется либо через меню "Запуск - Запустить", либо зеленой стрелкой на панели инструментов, либо горячей клавишей F9.


Графические примитивы класса TCanvas в Lazarus


6. Февраль 2013 - 21:06 | admin

Среда программирования: 

Delphi (Lazarus)

Класс TCanvas — сердцевина графической подсистемы Delphi (Lazarus). Он объединяет в себе и "холст" (контекст конкретного устройства GDI), и "рабочие инструменты" (перо, кисть, шрифт) и даже "подмастерьев" (набор функций по рисованию типовых геометрических фигур).

Канва не является компонентом, но она входит в качестве свойства во многие другие компоненты, которые должны уметь нарисовать себя и отобразить какую-либо информацию.

Для рисования канва включает в себя шрифт, перо и кисть:

(рb) property Font: TFont ; {TFont: Charset, Color, Style, Size}

(Pt) property Pen: TPen; {TPen: Color, Mode, Style, Width}

(Рb) property Brush: TBrush; {TBrush: Bitmap, Color, Style}

Кроме того, можно рисовать и поточечно, получив доступ к каждому пикселу. Значение свойства

property Pixels[X, Y: Integer]: TColor;

соответствует цвету точки с координатами (X,Y).

Класс TCanvas

procedure Arc (X1, Y1, X2, Y2, XЗ, Y3, X4, Y4: Integer);

Метод рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (X1,Y1) — (X2,Y2). Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X3,Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X4,Y4). Сегмент рисуется против часовой стрелки.

procedure Chord(X1, Y1, X2, Y2, XЗ, Y3, X4, Y4: Integer);

Рисует хорду и заливает отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки определяются, как в методе Arc.

procedure Ellipse(X1, Y1, X2, Y2: Integer);

Рисует и закрашивает эллипс, вписанный в прямоугольник (X1,Y1) — (X2,Y2).

procedure MoveTo(X, Y: Integer);

Перемещает текущее положение пера (свойство PenPos) в точку (X,Y).

procedure LineTo(X, Y: Integer);

Проводит линию текущим пером из текущей точки в (X,Y).

procedure BrushCopy(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor);

Производит специальное копирование. Прямоугольник Source из битовой карты Bitmap копируется в прямоугольник Dest на канве; при этом цвет Color заменяется на цвет текущей кисти (Brush.Color).

procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);

Производит копирование прямоугольника Source из канвы Canvas в прямоугольник Dest в области самого объекта.

procedure FillRect(const Rect: TRect);

Производит заливку прямоугольника (текущей кистью).

procedure Draw(X, Y: Integer; Graphic: TGraphic);

Осуществляет рисование графического объекта Graphic

procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);

Осуществляет рисование объекта Graphic в заданном прямоугольнике Rect. Если размеры их не совпадают, Graphic масштабируется.

procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); TFillStyle = (fsSurface, fsBorder);

Производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color.

procedure Pie (X1, Y1, X2, Y2, XЗ, Y3, X4, Y4: Integer);

Рисует сектор эллипса, описываемого прямоугольником (X1,Y1) — (X2,Y2). Стороны сектора лежат на лучах, проходящих из центра эллипса через точки (X3.Y3) и (X4,Y4).

procedure Polygon(const Points: array of TPoint);

Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой и внутренняя область закрашивается.
Polygon ([Point(10,10), Point(30,30),Point(20,40)])

procedure Polyline(const Points: array of TPoint);

Строит ломаную линию, используя массив координат точек Points.

procedure Rectangle(X1, Y1, X2, Y2 : Integer);

Рисует прямоугольник с диагональю заданной координатами (X1,Y1) и (X2,Y2).

procedure RoundRect (X1, Yl, X2, Y2, ХW, YH: Integer);

Рисует прямоугольник с закругленными углами. Координаты вершин — те же, что и в методе Rectangle. Закругления рисуются как сегменты эллипса с размерами осей по горизонтали и вертикали ХW и YH.

function TextHeight(const Text: string): Integer;

Возвращает высоту строки Text в пикселах.

function TextWidth(const Text: string): Integer;

Возвращает ширину строки Text в пикселах.

procedure TextOut(X, Y: Integer; const Text: string);

Производит вывод строки Text. Левый верхний угол помещается в точку канвы (X,Y).

procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string);

Производит вывод текста с отсечением. Как и в TextOut, строка Text выводится с позиции (X,Y); при этом часть текста, лежащая вне пределов прямоугольника Rect, отсекается и не будет видна.

property PenPos: TPoint;

Содержит текущую позицию пера канвы (изменяется посредством метода MoveTo).

Пример

procedure TForm1.Button1Click(Sender: TObject);

begin

with Paintbox1.Canvas do begin

Brush.Color := clGray;

Rectangle(10,100,250,300); // корпус

Polygon([Point(0,100),Point(130,20),Point(260,100)]); // крыша

Brush.Color := clWhite;

Ellipse(110,40,150,80); // чердак

Rectangle(30,150,110,230); // окно

MoveTo(70,150);

LineTo(70,230);

Rectangle(150,300,230,150); // дверь

Brush.Color := clGray;

Polygon([Point(150,300),Point(150,150),Point(210,160),Point(210,300)]);

 

end;

end;

http://grafika.me/files/les_screens/lazarus_les2_0.jpg
  1   2   3   4   5   6


написать администратору сайта