Einige Farbverläufe

Zur Vorstellung von Komponenten und Units für Lazarus
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Einige Farbverläufe

Beitrag von pluto »

Ich habe mal versucht das Beispiel unter der Neuen Lazarus Version auszuprobieren aber es geht nicht:
unit1.pas(87,15) Error: Incompatible types: got "Int64" expected "TByteArray"

Das Kommt hier:

Code: Alles auswählen

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);
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Einige Farbverläufe

Beitrag von Christian »

und oher soll ich ohne meine geliebte Glaskugel wissen wie du p deklariert hast ??
sicher so p : array[0..3] of TByteAarray; was ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Einige Farbverläufe

Beitrag von pluto »

@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;
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Einige Farbverläufe

Beitrag von theo »

@Pluto: Der Code ist nicht von mir sondern von deiner ucanvasextras.pas
So müsst's aber gehen:
p^[x] := (trunc((ba + bd * d) / 2));
p^[x + 1] := trunc((ga + gd * d) / 2);
p^[x + 2] := trunc((ra + rd * d) / 2);

Da könnte man auch selber draufkommen, als alter Hase....

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Einige Farbverläufe

Beitrag von pluto »

Stimmt hattes recht. Darauf bin ich jetzt gar nicht gekommen. Vielen Dank !
Hatte den Wald voller bäume nicht gesehen *G*.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Einige Farbverläufe

Beitrag von pluto »

Ich hätte nicht gedacht, dass die Anpassungen so leicht sind. Ich habe jetzt eine extra unit erstellt und habe dort alle Farbverläufe hineingepackt und angepasst. In den nächsten Tagen werde ich die Aktuelle Version hochladen. Ich habe noch vor, daraus eine Klasse zu machen in einer Weiteren unit.

@theo
Reichen wirklich "lazbridge" als unit "opbitmap" aus ?
Angenommen ich würde ein Packet erstellen für die Komponente. Müsste ich dann nur diese beiden units weiter geben ? Kann ja sein, das noch nicht alle OpBitmap runtergeladen haben *G*.

Ich finde die Lib nicht schlecht. Man kann damit viel machen.
Ich frage mich immer noch warum nicht endlich Scanline eingebaut wird. Ich habe in einem Beispiel was es dazu im Lazarus Beispiel Verzeichnis gibt, gelesen,(wenn ich es richtig verstanden habe) geht dieses Beispiel nicht auf allen Plattformen. Kann das sein, das Scanline Plattform Abhängig ist ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Einige Farbverläufe

Beitrag von theo »

pluto hat geschrieben:@theo
Reichen wirklich "lazbridge" als unit "opbitmap" aus ?
Angenommen ich würde ein Packet erstellen für die Komponente. Müsste ich dann nur diese beiden units weiter geben ? Kann ja sein, das noch nicht alle OpBitmap runtergeladen haben *G*.


Kommt immer drauf an was du brauchst. opbitmap tut selbst schon was, mit lazbridge kann man mit der LCL arbeiten, mit opbitmapformats werden alle Formate gekapselt etc. Du kannst aber auch nur die Formate nehmen, die du brauchst (z.B. Bitmap) und opbitmapformats ignorieren.
Der Fantasie sind keine Grenzen gesetzt. ;-)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Einige Farbverläufe

Beitrag von pluto »

Praktisch. Ich werde es mir mal genauer ansehen.
Evlt. finde ich auch noch mehr Farbverläufe. ich finde sie sehen nicht schlecht aus.
MFG
Michael Springwald

Antworten