Пятница, 17.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Как часто ви на этот сайт заходите?
Всего ответов: 159
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Графика » Разные

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

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

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

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

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]

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

Получить ссылку на материал

Категория: Разные | Добавил: Барон (13.12.2011)
Просмотров: 1083 | Теги: графика, прозрачность | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
DirectX [17]
OpenGL [2]
Игры [15]
Разные [28]
Королевство Delphi © 2010-2024
Яндекс цитирования