Einige Farbverläufe
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Einige Farbverläufe
Hallo,
diese Unit beinhaltet einige Farbverläufe wo her ich sie habe weiß ich leider nicht mehr.
Leider gehen diese Funktionen unter Lazarus nicht wegen scanline was es bei TBitmap nicht gibt.
Und ich kenne mich in diesem Bereich zu wenige aus.
Es währe toll wenn jemand es anpassen könnte für Lazarus.
Vielen Dank im voraus, im Anhang gibt es die Unit.
diese Unit beinhaltet einige Farbverläufe wo her ich sie habe weiß ich leider nicht mehr.
Leider gehen diese Funktionen unter Lazarus nicht wegen scanline was es bei TBitmap nicht gibt.
Und ich kenne mich in diesem Bereich zu wenige aus.
Es währe toll wenn jemand es anpassen könnte für Lazarus.
Vielen Dank im voraus, im Anhang gibt es die Unit.
- Dateianhänge
-
- ucanvasextras.pas
- Muss angepasst werden !!!
- (11.51 KiB) 110-mal heruntergeladen
MFG
Michael Springwald
Michael Springwald
Kuck mal Pluto, ich hab dir mal ein Beispiel gemacht wie du sowas umwandeln kannst:
Aufrufen mit:
Denn Rest machste aber selber....
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 := 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
for y := 0 to h do
for x := 0 to w do
bm.Pixels[w+w-x-1,y]:=bm.Pixels[x,y];
if art = Diamant then
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;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var op:TCanvasOPBitmap;
begin
op:=TCanvasOPBitmap.create;
op.Width:=200;
op.Height:=200;
verlauf(op,clred,clyellow,Diamant);
AssignOpBitmapToBitmap(op,Image1.Picture.Bitmap);
op.free;
end;