Программирование на языке Object Pascal
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
ло напрямую работать с функциями и процедурами GDI. В Delphi существует объект TCanvas (холст), который инкапсулирует и упрощает использование функций и инструментов (методов) GDI.
Представление рисунка в Delphi
TImage - компонент с таким же названием доступен на палитре компонентов Inditional. С помощью компонента TImage можно загрузить и отобразить на экране любой рисованный файл (*.bmp, *.wmf (16-и разрядный метафайл Windows), *.emf (32-х разрядный расширенный формат метафайла), *.ico, *.jpeg, а так же файлы других графических форматов поддерживаемых надстройками класса TGraphic).
Графические данные хранятся в свойстве picture объекта TImage.Picture.
Определение размеров графического файла:
1.размер (количество пикселей) координата (x) координата (y);
2.размер (длинна по (x)) размер (длинна по (y)) количество пикселей цвет.
Растровая графика
Позволяет хранить изображение в виде матрицы пикселей.
Основной недостаток - плохая масштабируемость (Paint, Photoshop…).
Векторная графика.
Позволяет хранить изображение в виде набора графических объектов, каждый из которых описывается математической формулой (Coral Draw).
Delphi работает только с растровой графикой.
Существует два типа растров:
). Зависимые от устройства (DDB);
). Не зависимые от устройства (DIB).
Delphi работает только с независимыми от устройств растрами, т.к. они работают со всеми устройствами.
Загрузка изображения на форму.
Сохранение изображения.
Для этого используется класс TPicture. Он представляет собой контейнерный класс для инкапсуляции абстрактного класса TGraphic.
Контейнерный означает, что класс TPicture может хранить ссылки на объекты: TBitmap, TMetafile, TIcon.
Пример Изображение на форме какой-либо картинки:
Procedure TForm1.Button1.Click (sender: object);
Imege1.Picture.LoadFromFile (c:\*.bmp);;
Для сохранения используется метод SaveToFile:
Image1.Picture.SaveToFile (c:\*.bmp);
Для работы с файлами формата JPEG необходимо в строке используемых модулей записать модуль JPEG.
Класс TBitmap
Класс TBitmap предназначен для хранения растрового изображения. Он инкапсулирует объект растров и палитры системы Win32.GPI.
Создание объекта:
Var
b: TBitmap;
……:=TBitmap.Create;
…:=nil// или b.Destray;;
Методы объекта TBitmap:
1..LoadFromFile - загрузить в объект;
2..SaveToFile - сохранить;
..Assign - позволяет скопировать один растр в другой.
Var, b2: TBitmap;:= TBitmap.Create;:= TBitmap.Create;.LoadFromFile(…);2.Assign(b1);
End;
При использование метода *.Assign копирование происходит следующим образом: в объект (b2) записывается ссылка на объект (b1), что позволяет сэкономить память; в случае внесения изменений в объект (b2) происходит автоматическое копирование объекта (b1).
4..CopyRect - позволяет скопировать прямоугольную часть растрового изображения из одного объекта Bitmap в другой или на форму.
Типы данных в OPascal:
TPaint - точка;
TRect - прямоугольник;
Пример:
Var
a: TPaint;
b: TRect;
….x:=100;.y:=150;
….left:=10;.top:=10;.right:=100;.botton:=100;
Пример Нарисовать прямоугольник:
Var: TRect;.top:=0;// левая.left:=0;//верхняя.night:=90;//правая.botton:=90;//нижняя.Convas.CopyRect (ClientRect, Bitmap2.Canvas, r1);;
Существует еще один метод, позволяющий копировать целый растр на канву формы со сжатием или расширением изображения, так, что бы оно помещалось и полностью заполняло пространство внутри границ канвы - StretchDraw.
Пример:
: TRect;: TBitmap;:=TBitmap.Create;.LoadFromFile(c:\picture1.bmp);.left:=0;.top;=0;.right:=Bitmap1.Width;.botton:=Bitmap1. Leight;.Canvas.StretchDrow (r1, Bitmap1);;
Использование свойств класса TCanvas:
1.TPen - перо (объект отвечает за способ и цвет рисования линий на канве): Image1.Canvas.Pen.
Свойства объекта TPen:
Цвет (color):
With Image1.Convas.Pen.Color do
Color:=clRed;
End;
Или выбор цвета случайным образом
Color:=RGB(random (256), random (256), random (256));
Тип линии (style):
.Style:=psSolid;
Виды линий:- сплошная;- пунктир;- точка / пунктир;- пунктир / точка / точка - точки;
psClear - бесцветная.
Pen.Mode - режим работы пера (задает способ изображения линии на канве; способ смешения цветов при накладывание объектов).
Режим работы пера задается логическими операциями (pnCopy - по умолчанию).
2.TBrush - кисть (обладает тремя основными свойствами: color, style, bitmap):
Свойства объекта TBrush:
Цвет (color):
With Image1.Convas.Brush.Color do
Color:=clRed;
End;
Или выбор цвета случайным образом
Color:=RGB(random (256), random (256), random (256));
Тип линии (style):
.Style:=psSolid;
Виды линий:- сплошная;- снизу вверх;- сверху вниз;- решетка по диагонали; - решетка;
bsHorizontal - горизонтальные линии;
bsVertical - вертикальные линии;
bsClear - бесцветная.
bitmap (позволяет закрашивать область, заданным из реестра цветом):
Bitmap1.loadFromFile(...);.Convas.Brush.Bitmap:=Bitmap1;
Основные методы объекта Canvas:
Canvas.MoveTo(a: TPaint); - перемещает (но не рисует) перо в указаннуюточку;
Canvas.LineTo(a: TPaint); - рисует линию от текущего указателя пера до точки (a);
Canvas.Rectangle (a: TRect); - рисует прямоугольник;
Canvas.Rectangle (a1:TPaint; a2:TPaint); - рисует прямоугольник;
Canvas.Ellipse (e: TRect); - рисует овал вписанный в прямоугольник;
Canvas.Arc (e: TRect); - рисует дугу;
Canvas.FillRect (a: TRect); - рисует прямоугольник текущим пером и закрашивает его текущей кистью;
Canvas.FloodFill (x, y: integer; c: TColor; f {fsSurfase, fsBorder}) - способ заливки;
fsSurfase - залить вся область, где цвет равен цвету указанному в третьем параметре;
fsBorder - залить вся область, где цвет не равен цвету указанному в третьем параметре.
Canvas.TextOut (x, y: integer; s: TString); - выводит в указанном месте текст на канву; шрифт задается при по?/p>