Bitmap Canvas RawImage
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Bitmap Canvas RawImage
Danke für den Test Theo, dann hab ich wirklich eine extrem langsame Kiste . Ist mir bisher granicht so aufgefallen...
Bei 1980x1080 komme ich auf knapp 10 Sekunden.
Bei 1980x1080 komme ich auf knapp 10 Sekunden.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Bitmap Canvas RawImage
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
Das dürfte in etwa der Fordeung nach dem Pointer auf die Pixels sein, was der Threadsteller wohl wollte.
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
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...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Re: Bitmap Canvas RawImage
@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.
Wie gesagt, es kommt auf die Anforderungen an.
- 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
Hallo,
Ich hätte hier noch eine Variante die, nur mit "Bordmitteln", einfach und schnell ist.
Gruß Roland
Ich hätte hier noch eine Variante die, nur mit "Bordmitteln", einfach und schnell ist.
Gruß Roland
- Dateianhänge
-
- SpeedTest.zip
- (4.79 KiB) 125-mal heruntergeladen
Re: Bitmap Canvas RawImage
Genau. Wollte eben fast das Gleiche posten.
Kleiner Tipp: Die Farben muss man nicht unbedingt "umrechnen".
Mit "uses FPImage" kann man colYellow und colGreen verwenden.
- 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
Hallo theo,
Wir kommen zwar noch nicht ganz in den Minusbereich, aber schon verdammt nahe heran.
Gruß Roland
danke für den Tipp. So wird das Ganze noch mal schneller.Kleiner Tipp: Die Farben muss man nicht unbedingt "umrechnen".
Mit "uses FPImage" kann man colYellow und colGreen verwenden.
Wir kommen zwar noch nicht ganz in den Minusbereich, aber schon verdammt nahe heran.
Gruß Roland
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Bitmap Canvas RawImage
SUPER !
nun komme ich zwischen 47 und 63ms
nun komme ich zwischen 47 und 63ms
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
- 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
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
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