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

Рисуем градиенты программно

Итак, сегодня мы будем учиться рисовать программно в Дельфи градиенты. Эта информация может пригодиться тем, кто, например, собрался писать свои компоненты и хочет красиво их оформить, или же… может пригодиться как исходник к проектам, которые имеют такую опцию, как «выбор цвета» и т.п.

Что же такое градиент? Градиент – это плавный переход одного цвета в другой. Что такое цвет? Цвет – это видимое излучение. Вообще, стоит сказать, что такого разнообразия цветов какое можно создать на компьютере, в естественном мире добиться нельзя. А всё потому, что экран монитора сам излучает свет, и количество этого света мы можем регулировать программно.

Как устроен цвет? В естественном мире – всё понятно, тут в результате многочисленных отражений происходит сложение волн, имеющих разные длины (а значит и разный цвет) и в результате этого получаются совсем «новые» цвета, иногда можно даже наблюдать интерференционную картинку (она как раз наиболее близка к нашей теме).

В компьютере происходит примерно тоже самое. Но цвет здесь ВСЕГДА можно разложить по составляющим. Причём число и тип составляющих зависит от выбора системы представления цвета. А системы бывают разные, если обратиться к PhotoShop’у, то он поддерживает следующие системы: RGB, HSV (Hue Saturation Value), Lab, CMYK. Все они по-разному определяют цвет.

Наиболее привычной нам системой, разумеется, является RGB (Red Green Blue) она раскладывает цвет по 3-м составляющим: красному, зелёному и синему. Все значение цветов колеблются в диапазоне [0..255], таким образом, простыми математическими расчётами получаем, что максимально возможное число представимых цветов компьютером равно 16777216 (или 2^24). Дизайнерам вполне хватает :)

Теперь займёмся практикой. Начинаем новый проект Delphi, размещаем квадратную панельку (TPanel), внутрь неё 2 другие меньшие по размеру панельки. Всё как на рисунке. Затем справа на другую панель ставим TImage, на канву которого будем выводить градиент. Ниже этой панели – TtrackBar. Совсем справа разместите небольшую квадратную панель, на неё еще одну. Добавьте не визуальный компонент TColorDialog, с помощью которого мы будем выбирать исходный и конечный цвета градиента.

Я приведу лишь основной код, для создания градиента. Советую скачать исходник и попрактиковаться. Код:

procedure TForm1.DrawGradient(Sender: TObject);
var
StartC, EndC: TColor; // начальный и конечный цвета
GradRECT: TRect; // область, которой мы будем рисовать
StartRGB, EndRGB: array[0..2] of Byte; // разложенный цвет
Colors, i, Delta: Word; // число цветов, которые использовать для
// создания градиента
begin
// область заливки
GradRECT := Image1.ClientRect;
// цвета
StartC := ColorToRGB(C1.Color);
EndC := ColorToRGB(C2.Color);
// массив с исходными цветами (1)
StartRGB[0] := GetRValue(StartC);
StartRGB[1] := GetGValue(StartC);
StartRGB[2] := GetBValue(StartC);
// массив с конечными цветами (2)
EndRGB[0] := GetRValue(EndC);
EndRGB[1] := GetGValue(EndC);
EndRGB[2] := GetBValue(EndC);
// число градаций на ширину
Colors := Image1.Width div 2;
// число пикселей для одной градации
Delta := Image1.Width div Colors;
For i := 0 to Colors do begin
// определяем область для градации
GradRECT.Left := i*Delta;
GradRECT.Right := GradRECT.Left + Delta;
With Image1.Canvas do begin
Pen.Style := psSolid;
Brush.Color := RGB(
(StartRGB[0] + MulDiv(i, EndRGB[0] - StartRGB[0], Colors-1)),
(StartRGB[1] + MulDiv(i, EndRGB[1] - StartRGB[1], Colors-1)),
(StartRGB[2] + MulDiv(i, EndRGB[2] - StartRGB[2], Colors-1)));
// заливаем
FillRect(GradRect);
end;
end; { for.... }
end;{ END Procedure}

Вот и всё.

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

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

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

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