Einige Farbverläufe
- 
				pluto
- 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) 128-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;


 Verein
Verein 
 Links
Links Suche
Suche