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