procedure RandVerlauf(Bild: TGraphic; breite: Byte;
links, oben, rechts, unten: boolean; farbe: TColor);
const maxi = 256;
var x, y, w3, h, s, t: integer;
p: pbytearray;
r, g, b: byte;
bm: TBitmap;
procedure rechnen;
begin
t := maxi - s;
p[y] := (p[y] * s + b * t) div maxi;
p[y + 1] := (p[y + 1] * s + g * t) div maxi;
p[y + 2] := (p[y + 2] * s + r * t) div maxi;
inc(y, 3);
end;
procedure horizontal(wert: Integer);
begin
y := 0;
while y < w3 do begin
s := (maxi div breite) * wert;
rechnen;
end;
end;
begin
bm := TBitmap.create;
bm.pixelformat := pf24bit;
bm.width := bild.width;
bm.height := bild.height;
bm.canvas.draw(0, 0, bild);
w3 := bm.width * 3 - 1;
h := bm.height - 1;
farbe := colortorgb(farbe);
r := getrvalue(farbe);
g := getgvalue(farbe);
b := getbvalue(farbe);
for x := 0 to h do begin
p := bm.scanline[x];
if oben and (x <= breite) then horizontal(x);
if unten and (x >= h - breite) then horizontal(h - x);
if links then begin
y := 0;
while y < breite * 3 - 1 do begin
if y mod 3 = 0 then
s := (maxi div breite) * (y div 3);
rechnen;
end;
end;
if rechts then begin
y := (bm.width - breite) * 3;
while y < w3 do begin
if y mod 3 = 0 then
s := (maxi div breite) * ((w3 - y) div 3);
rechnen;
end;
end;
end;
Bild.assign(bm);
bm.free;
end;
// Beispielaufruf
procedure TForm1.Button4Click(Sender: TObject);
begin
randverlauf(Image3.picture.graphic, 22, true, true, true, true, color);
Image3.refresh;
end;