Другие
методы работы с графикой в Куliх
Вообще, вам не требуется
наличие специальных компонентов для работы с графическими возможностями Kylix.
Вы можете создавать, рисовать, сохранять и уничтожать графические объекты без
отображения графики на экране. В качестве графического объекта могут выступать
bmp-файлы, рисунки, пиктограммы и другие объекты, включая сжатые jpeg-файлы.
В большинстве случаев приложение редко рисует напрямую на форме. Обычно сначала
создается графический образ, а затем он отображается с помощью компонента CLX
Image
.
Как только вы разместили
рисунок в компонент Image
, вы можете достаточно легко его сохранять,
загружать и копировать в буфер обмена.
Примечание
Если вы рисуете не на экране, а, например, на канве объектаTBitmap
, изображение не будет отображаться на экране до тех пор, пока не будет произведено копирование рисунка из канвы объектаTBitmap
в канву визуального объекта. Более того, необходимо сделать перерисовку визуального объекта после копирования, например с помощью вызова методаRefresh
для данного визуального объекта. Если вы рисуете напрямую в канве визуального объекта, таких проблем не возникает.
Иногда картинка превышает
размер формы. Для просмотра таких больших изображений можно разместить на форме
компонент TScrollBox
и помещать изображение внутрь этого компонента.
Работа с компонентом
Image
Компонент Image
представляет собой контейнер, который может содержать и отображать графический
объект.
Вы можете расположить данный
компонент в любом месте формы, после чего с помощью инспектора объектов в свойстве
Picture
указать графический объект, который будет содержаться в
компоненте Image
. Кроме того, данное свойство можно изменять и
в процессе выполнения приложения, изменяя свойство Picture.
Если вы хотите, чтобы приложение
сразу после запуска создавало чистую заготовку для изображения, вам необходимо
выполнить следующие шаги:
1. Создать заготовку обработчика
события OnCreate
для формы, содержащей Компонент Image
.
2. Создать объект Bitmap
и присвоить его свойству Picture.Graphic
компонента Image
.
В нижеприведенном примере
(листинг 13.17) главная форма приложения Form1
содержит компонент
типа TImage
, который имеет имя (свойство Name
) Image
.
Код размещен в обработчике события OnCreate
формы Form1
.
Листинг 13.17.Создание
объекта Bitmap
procedure TForm1.FormCreate(Sender: TObject); var Bitmap: TBitmap; {временная переменная для хранения графического образа}begin
Bitmap := TBitmap.Create;{ создаем графический объект }
Bitmap.Width := 200; { устанавливаем начальную ширину }
Bitmap.Height := 200; { и начальную высоту объекта Bitmap }
Image.Picture.Graphic := Bitmap; { присваиваем созданный графический
объект компоненту Image } Bitmap.Free; { Нам больше не нужен графический объект, поэтому
уничтожаем его } end;
Если вы записали вышеприведенный
код в обработчике события OnCreate
формы Form1
и запустили
приложение, то вы сможете увидеть в клиентской части формы белый квадрат, представляющий
собой как бы заготовку для изображения. Если вы уменьшите окно таким образом,
чтобы изображение не помещалось в нем, автоматически появятся полосы прокрутки.
В данной заготовке можно
осуществлять любые графические операции. Для этого следует воспользоваться канвой
компонента Image
.
Для работы с линиями объекта
Bitmap
имеется свойство ScanLine
, которое позволяет
получать информацию о цветах пикселов одной линии в виде массива RGB.
Пример, приведенный в листинге
13.18, показывает, как можно использовать свойство ScanLine
для
одновременного получения пикселов одной линии.
Листинг 13.18.Прямая
работа с Bitmap
procedure TForm1.Button1Click(Sender: TObject);// Данный пример показывает, как можно рисовать напрямую в Bitmap
var
х,y : integer; Bitmap : TBitmap; P : PByteArray; begin
Bitmap := TBitmap.create; try
if OpenDialog1.Execute then begin
Bitmap.LoadFromFile(OpenDialog1.FileName);
for y := 0 to Bitmap.height -1 do begin
P : = Bitmap. ScanLine [y];
for x := 0 to Bitmap.width -1 do
Р[х] := y; end; end;
canvas.draw(0,0,Bitmap); finally Bitmap.free; end; end;