@Christian
Ich habe Thoes beispiel genommen sein dritter Beitrag auf der ersten Seite von diesem Thread.
Darum habe ich nur einen Auszug genommen und nicht alles gepostet !
Aber bitte für dich kann ich ja noch mal alles posten:
Code: Alles auswählen
procedure verlauf(bm: TCanvasOPBitmap; farbe1, farbe2: TColor; art: shp);
var
x, y, h, w, w3: integer;
p: PByteArray;
ri, gi, bi: byte;
ra, ga, ba: word;
rd, gd, bd, a, d: single;
begin
bm.pixelformat := Opbitmap.pf24bit;
if art = Diamant then
h := bm.height shr 1
else h := bm.height - 1;
if art <> Diagonal then
w := bm.width shr 1 else
w := bm.width;
w3 := w * 3;
farbe1 := colortorgb(farbe1);
farbe2 := colortorgb(farbe2);
ra := getrvalue(farbe1); ga := getgvalue(farbe1); ba := getbvalue(farbe1);
ri := getrvalue(farbe2); gi := getgvalue(farbe2); bi := getbvalue(farbe2);
rd := ri - ra; gd := gi - ga; bd := bi - ba;
inc(ra, ra); inc(ga, ga); inc(ba, ba);
for y := 0 to h do begin
p := bm.scanline[y];
a := y / h;
if art = Linse then a := sin(pi * a);
x := 0;
while x < w3 do begin
d := a + x / w3;
p[x] := (trunc((ba + bd * d) / 2));
p[x + 1] := trunc((ga + gd * d) / 2);
p[x + 2] := trunc((ra + rd * d) / 2);
inc(x, 3);
end;
end;
//stretchblt muss ersetzt werden:
if art <> Diagonal then begin
for y := 0 to h do
for x := 0 to w do
bm.Pixels[w+w-x-1,y]:=bm.Pixels[x,y];
end;
if art = Diamant then begin
for y := 0 to h do
for x := 0 to bm.width do
bm.Pixels[x,h+h-y-1]:=bm.Pixels[x,y];
end;
end;