Другие методы работы с графикой в Ку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;
Hosted by uCoz