Текущий архив: 2008.02.03;
Скачать: CL | DM;
ВнизГрадиент Найти похожие ветки
← →
Quelle (2007-03-04 17:26) [0]Уважаемые мастера.
Скажите, как сделать
градиент через 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) [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 по этому поводу, поищи слова "Быстрый доступ к пиксел".
Страницы: 1 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.045 c