Работа с графикой, прозрачные картинки

Язык программирования Delphi
Работа с графикой, прозрачные картинки
:

Мы продолжаем изучение программирования графики на Delphi. Сегодня у нас будет маленький примерчик, но очень удаленький. Прозрачность картинки очень часто обсуждается на различных конференциях, поэтому я решил объяснить эту проблему всем.

Как всегда, нам понадобиться запустить Delphi и создать новый проект. Теперь поставь на форму из палитры компонентов Additional компонент TImage . Теперь дважды щёлкни по его свойству Picture . Перед тобой появиться стандартный диалог выбора файла, выбери любой bmp файл, и нажимай "ОК". У тебя должно получиться нечто похожее на рисунок 1.

Logo
Рис 1. Форма

Теперь щёлкни по форме и создай для неё обработчик события OnPaint . Это событие отвечает за прорисовку экрана, и вызывается каждый раз когда окно нуждается в прорисовке. Вспомни пример из прошлого номера, в котором мы рисовали поворачивающийся текст, программа работает прекрасно, но как только мы свернём её и восстановим заново, всё исчезнет. Мы должны сами восстанавливать содержимое экрана, и делать это надо именно в обработчике OnPaint . Поэтому этот пример мы сделаем по всем правилам.

В созданной процедуре FormPaint напиши следующее:

procedure TForm1.FormPaint(Sender: TObject);
begin
 Canvas.Brush.Color:=Color;
 Canvas.BrushCopy(Rect(0,0,Image1.Width,Image1.Height),
             Image1.Picture.Bitmap,
             Rect(0,0,Image1.Width,Image1.Height),
             Image1.Picture.Bitmap.Canvas.Pixels[1,1]);
end;
Logo
Рис 2. Результат работы программы

Теперь можешь запустить программу и посмотреть результат. Неплохо? Давай рассмотрим, что же мы писали, чтобы добиться этого.

Canvas.Brush.Color:=Color; Как ты уже знаешь, Canvas отвечает за то, что будет нарисовано в окне. Поэтому, чтобы что-то нарисовать прямо на форме, мы рисуем это здесь. У него есть свойство Brush, в котором хранятся параметры кисти, используемой при закрашивании. Мы изменяем только один параметр у этой кисти - цвет, которому мы присваиваем цвет формы. Взглянём на эту запись вот так:
Область_рисования_формы.Кисть.Цвет:=Цвет_формы.

Теперь перейдём ко второй строке. Она кажется немного сложной, но это только на первый взгляд. Поэтому рассмотрим всё по частям. М используем процедуру BrushCopy у уже знакомого Canvas . Эта процедура копирует на Canvas картинку.


procedure BrushCopy(
    const Dest: TRect; // Область приёмника
    Bitmap: TBitmap; // Картинка которая будет копироваться
    const Source: TRect; // Область источника
   Color: TColor); // Прозрачный цвет 

Область приёмника объявлена как TRect, который имеет вид TRect = (Left, Top, Right, Bottom: Integer); . Что находиться в скобках, я думаю пояснять не надо. То же самое и с областью источника. В качестве картинки мы передаём Bitmap из TImage . Прозрачный цвет будет заменяться на цвет кисти, который мы задали в первой строке.

В качестве прозрачного цвета я использовал цвет пикселя в позиции [1,1] из картинки TImage. На это указывает запись Image1.Picture.Bitmap.Canvas.Pixels[1,1] . Я её запишу немного по другому:
TImage1.Его_картинка.Bitmap.Область_рисования.Пиксел[1_по_оси_X, 1_по оси_Y]

Вот и всё. Жди следующего урока.



Опубликовал admin
8 Май, Четверг 2003г.



Программирование для чайников.