Содержание материала

Code:

unit Graph32;

{©Drkb v.3: www.drkb.ru}

 

interface

 

uses

Windows, Graphics;

 

type

TRGB = record

B, G, R: byte;

end;

 

ARGB = array [0..1] of TRGB;

 

PARGB = ^ARGB;

 

procedure HGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

procedure VGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

procedure RGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

 

var

Bitmap: TBitmap;

p: PARGB;

 

implementation

 

procedure HGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

var

x, y, c1, c2, r1, g1, b1: integer;

dr, dg, db: real;

begin

Bitmap.Width:=abs(X1-X2);

Bitmap.Height:=abs(Y1-Y2);

c1:=ColorToRGB(Color1);

r1:=getRValue(c1);

g1:=getGValue(c1);

b1:=getBValue(c1);

c2:=ColorToRGB(Color2);

dr:=(getRValue(c2)-r1)/Bitmap.Width;

dg:=(getGValue(c2)-g1)/Bitmap.Width;

db:=(getBValue(c2)-b1)/Bitmap.Width;

for y:=0 to Bitmap.Height-1 do

begin

p:=Bitmap.ScanLine[y];

for x:=0 to Bitmap.Width-1 do

begin

  p[x].R:=round(r1+x*dr);

  p[x].G:=round(g1+x*dg);

  p[x].B:=round(b1+x*db)

end

end;

Canvas.Draw(X1, Y1, Bitmap)

end;

 

procedure VGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

var

x, y, c1, c2, r1, g1, b1: integer;

dr, dg, db: real;

begin

Bitmap.Width:=abs(X1-X2);

Bitmap.Height:=abs(Y1-Y2);

c1:=ColorToRGB(Color1);

r1:=getRValue(c1);

g1:=getGValue(c1);

b1:=getBValue(c1);

c2:=ColorToRGB(Color2);

dr:=(getRValue(c2)-r1)/Bitmap.Height;

dg:=(getGValue(c2)-g1)/Bitmap.Height;

db:=(getBValue(c2)-b1)/Bitmap.Height;

for y:=0 to Bitmap.Height-1 do

begin

p:=Bitmap.ScanLine[y];

for x:=0 to Bitmap.Width-1 do

begin

  p[x].R:=round(r1+y*dr);

  p[x].G:=round(g1+y*dg);

  p[x].B:=round(b1+y*db)

end

end;

Canvas.Draw(X1, Y1, Bitmap)

end;

 

procedure RGradientRect(Canvas: TCanvas; X1, Y1, X2, Y2: integer; Color1, Color2: TColor);

var

x, y, c1, c2, r1, g1, b1: integer;

dr, dg, db, d: real;

begin

Bitmap.Width:=abs(X1-X2);

Bitmap.Height:=abs(Y1-Y2);

c1:=ColorToRGB(Color1);

r1:=getRValue(c1);

g1:=getGValue(c1);

b1:=getBValue(c1);

c2:=ColorToRGB(Color2);

d:=sqrt(Bitmap.Width*Bitmap.Width+Bitmap.Height*Bitmap.Height)/2;

dr:=(getRValue(c2)-r1)/d;

dg:=(getGValue(c2)-g1)/d;

db:=(getBValue(c2)-b1)/d;

for y:=0 to Bitmap.Height-1 do

begin

p:=Bitmap.ScanLine[y];

for x:=0 to Bitmap.Width-1 do

begin

  d:=sqrt(((Bitmap.Width-2*x)*(Bitmap.Width-2*x)+(Bitmap.Height-2*y)*(Bitmap.Height-2*y))/4);

  p[x].R:=round(r1+d*dr);

  p[x].G:=round(g1+d*dg);

  p[x].B:=round(b1+d*db)

end

end;

Canvas.Draw(X1, Y1, Bitmap)

end;

 

initialization

 

begin

Bitmap:=TBitmap.create();

Bitmap.PixelFormat:=pf24bit

end;

 

finalization

 

begin

Bitmap.free()

end;

 

end.

Автор: Kostas 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить