Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Градиент [D6]


Quelle ©   (2007-03-04 17:26:00) 

Уважаемые мастера.
Скажите, как сделать
градиент через 3 цвета, как
в Photoshope (например, от белого к черному через синий).

Вот пример, но только через красный,
с остальными не получается.

procedure PhotoshopGradient;
var
d:integer;
x,y:integer;
begin
for y:=0 to 255 do
for x:=0 to 255 do
begin
  if (255-x-y) >=0 then
     d:=255-x-y;
  Form1.Canvas.Pixels[x,y]:=RGB(255-y,d,d);
end;
end;


GrayFace   (2007-03-04 18:39:00) [1]

Цвета смешиваются так:
RGB((R1*P1 + R2*P2 + R3*P3) div (P1+P2+P3), (G1*P1 + G2*P2 + G3*P3) div (P1+P2+P3), (B1*P1 + B2*P2 + B3*P3) div (P1+P2+P3));
где Ri, Gi, Bi - компоненты i-го цвета, Pi - веса.

Веса можно взять так:
P1:= 256*y div (Height-1)
P2:= 256*(Width-1 - x) div (Width-1)
P3:= 256*(Height-1 - y) div (Height-1)

Чтобы работало быстро, надо Width и Height сохранить в локальных переманных и не обращаться к Canvas.Pixels, а работать напрямую со ScanLine-ами. См. модуль QPix.pas в http://www.grayface.nm.ru/PSPak.rar(не мой, но я к нему тоже приложил руку). Есть статья от Mbo по этому поводу, поищи слова "Быстрый доступ к пиксел".


Наверх

Титульная страница Поиск, карта сайта Написать письмо