Bitmap Canvas RawImage

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Bitmap Canvas RawImage

Beitrag von siro »

Danke für den Test Theo, dann hab ich wirklich eine extrem langsame Kiste :roll: . Ist mir bisher granicht so aufgefallen... :wink:
Bei 1980x1080 komme ich auf knapp 10 Sekunden. :D
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Bitmap Canvas RawImage

Beitrag von siro »

Ich habe eben mal mitTBGRAbitmap probiert.
Mit dem Beispeilcode aus dem Tutorial:
https://wiki.lazarus.freepascal.org/BGR ... orial_4/de

Hier sieht man einen ERHEBLICHEN Geschwindigkeitszuwachs sofern man mit ScanLine arbeitet.
Zeitbedarf bei mir 16ms :shock:

Das dürfte in etwa der Fordeung nach dem Pointer auf die Pixels sein, was der Threadsteller wohl wollte.

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
var x,y: integer;
    p: PBGRAPixel;
    image: TBGRABitmap;
    var w,h:integer;
    tick: QWord;
begin
    tick := GetTickCount64;
  w:=1000;
  h:=1000;
  image := TBGRABitmap.Create(w,h);

  for y := 0 to image.Height-1 do
  begin
    p := image.Scanline[y];
    for x := 0 to image.Width-1 do
    begin
      p^.red := x*256 div image.Width;
      p^.green := y*256 div image.Height;
      p^.blue := 0;
      p^.alpha := 255;
      inc(p);
    end;
  end;
  image.InvalidateBitmap; // geändert durch direkten Zugriff

  image.Draw(Canvas,0,0,True);
  image.free;
  Caption := IntToStr(GetTickCount64 - Tick);
end;            
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Bitmap Canvas RawImage

Beitrag von theo »

@Siro: Schon klar, es gibt eigentlich fast nur schnellere Varianten als Bitmap.Pixels. Dafür ist Bitmap.Pixels am einfachsten anzuwenden und bei kleineren Bitmap-Manipulationen akzeptabel.
Wie gesagt, es kommt auf die Anforderungen an.

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Bitmap Canvas RawImage

Beitrag von Ally »

Hallo,

Ich hätte hier noch eine Variante die, nur mit "Bordmitteln", einfach und schnell ist.

Gruß Roland
Dateianhänge
SpeedTest.zip
(4.79 KiB) 100-mal heruntergeladen

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

Re: Bitmap Canvas RawImage

Beitrag von theo »

Ally hat geschrieben:
Sa 28. Mai 2022, 11:10
Ich hätte hier noch eine Variante die, nur mit "Bordmitteln", einfach und schnell ist.
Genau. Wollte eben fast das Gleiche posten. :wink:
Kleiner Tipp: Die Farben muss man nicht unbedingt "umrechnen".
Mit "uses FPImage" kann man colYellow und colGreen verwenden.

Benutzeravatar
Ally
Beiträge: 263
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Bitmap Canvas RawImage

Beitrag von Ally »

Hallo theo,
Kleiner Tipp: Die Farben muss man nicht unbedingt "umrechnen".
Mit "uses FPImage" kann man colYellow und colGreen verwenden.
danke für den Tipp. So wird das Ganze noch mal schneller.
Wir kommen zwar noch nicht ganz in den Minusbereich, aber schon verdammt nahe heran. :D

Gruß Roland

siro
Beiträge: 732
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Bitmap Canvas RawImage

Beitrag von siro »

SUPER !
nun komme ich zwischen 47 und 63ms
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bitmap Canvas RawImage

Beitrag von Winni »

Hi!

BGRAbitmap bietet in der unit BGRAbitmapTypes sowohl die VGA-Farben als auch die css-Farben.

Man kann also sowohl VGAaqua oder cssAqua zuweisen.

Außerdem die von dem WWW-Konsortium definierten Web-Farben wie z.B. cssRoyalBlue oder cssNavajoWhite.

Winni

PS.: Hier sind die css-Farben:

https://www.w3schools.com/cssref/css_colors.asp

Antworten