41 lines
916 B
ObjectPascal
41 lines
916 B
ObjectPascal
// Градиентная заливка. Выполнена интерполяцией по каждой составляющей цвета.
|
|
uses GraphABC;
|
|
|
|
var i,j: integer;
|
|
r,g,b:array[0..2] of integer;
|
|
field:array[0..256*3] of Color;
|
|
|
|
function LinearInterp(a,b,fa,fb,x: integer): integer;
|
|
var t: real;
|
|
begin
|
|
t:=(x-a)/(b-a);
|
|
LinearInterp:=round(fa*(1-t)+fb*t);
|
|
end;
|
|
|
|
begin
|
|
r[0]:=255;
|
|
g[0]:=0;
|
|
b[0]:=255;
|
|
|
|
r[1]:=255;
|
|
g[1]:=255;
|
|
b[1]:=0;
|
|
|
|
r[2]:=0;
|
|
g[2]:=255;
|
|
b[2]:=255;{}
|
|
|
|
for i:=0 to 255 do
|
|
for j:=0 to 2 do
|
|
Field[i+255*j]:=RGB(LinearInterp(0,255,r[j],r[(j+1) mod 3],i),
|
|
LinearInterp(0,255,g[j],g[(j+1) mod 3],i),
|
|
LinearInterp(0,255,b[j],b[(j+1) mod 3],i));
|
|
|
|
SetWindowCaption('Градиент');
|
|
SetWindowSize(256*3,400);
|
|
LockDrawing;
|
|
for i:=0 to 256*3 do
|
|
Line(i,0,i,WindowHeight-1,Field[i]);
|
|
UnlockDrawing;
|
|
end.
|