Forum: Multimedia
by dummzeuch,
1. Apr 2024
Ja, in meinem ursprünglichen Code (im ersten Beitrag verlinkt) war das auch noch so, aber das war ein weiterer Aufruf von ScanLine und bei mir geht es um die möglichst effiziente Verarbeitung von 1000en von Bildern.
Ich habe bisher noch keine Bitmap gesehen, die nicht umgedreht gespeichert war (wobei die alle von unseren internen Programmen erzeugt werden, ist also kein Wunder). Und wenn das...
Forum: Multimedia
by dummzeuch,
1. Apr 2024
Wie ich schrieb: Nichts.
Nein. Ich wollte lediglich diese 3 bzw. 6 Varianten timen. Allerdings ist Algorithmus 3 mit dem Move ziemlich genau das, was auch in #20 steht.
Forum: Multimedia
by dummzeuch,
31. Mär 2024
Ich wollte schon die ganze Zeit nochmal das Timing für die Verarbeitung mit und ohne Assign testen, bin aber erst jetzt dazu gekommen:
Getestet wurden jeweils 1000 Durchläufe mit einer 1000x1000 Pixel Bitmap.
Algorithmus 1:
fuer alle Pixel
Lesen eines Pixels aus der Quell-Bitmap
Schreiben des Pixels in die Ziel-Bitmap.
Verarbeiten des Pixels in der Ziel-Bitmap
Forum: Multimedia
by dummzeuch,
18. Feb 2024
Vergiss, was ich geschrieben habe. Ich sollte erst genau hinschauen und sicher sein, dass ich den Code verstanden habe, bevor ich kommentiere.
Forum: Multimedia
by dummzeuch,
13. Feb 2024
Ich erinnere mich nicht mehr, warum ich damals die Deklaration selbst gemacht habe. Evtl. gab es sie in älteren Delphi-Versionen nicht. Mein Code muss immer mindestens bis Delphi 2007 rückwärtscompatibel sein, da viele meiner Projekte noch nicht umgestellt sind und damls 2019 waren es eigentlich noch fast alle. Außerdem habe ich für einige Funktionen Enhanced Records verwendet. Das könnte man...
Forum: Multimedia
by dummzeuch,
11. Feb 2024
Hey, ich hatte gemessen, nur eben vor 5 Jahren und nicht heute.
In #13 ist immernoch ein Aufruf von Scanline zuviel, denn Scanline hattest Du ja bereits in StartPixel abgespeichert.
Theoretisch kann man die Differenz zwischen zwei Scanlines auch direkt berechnen, das spart dann nochmal einen Aufruf pro Bitmap:
BitmapBytesPerLine := ((w * 8 * BytesPerPixel + 31) and not 31) div 8;
Forum: Multimedia
by dummzeuch,
11. Feb 2024
Es ist kein schlechtes Beispiel, wie man es nicht machen sollte, sondern im Gegenteil ein gutes Beispiel, wie man es lesbar programmieren kann, aber eben nicht die effizienteste Methode dafür. Solange die Performance kein Problem ist, würde ich es vermutlich genauso programmieren. Mein erster Ansatz sah damals auch so aus, war aber eben zu langsam für die Anwendung (Helligkeitsausgleich für...
Forum: Multimedia
by dummzeuch,
11. Feb 2024
Von wegen langsam:
Dein Code ruft TBitmap.Scanline Width*Height-mal auf. Jeder dieser Aufrufe ist extrem lahm, wenn auch schon wesentlich schneller als der Zugriff auf TBitmap.Canvas.Pixel. Genau das war der Punkt in meinem Blog-Post, auf den Bernhard im ersten Post verwiesen hat. Und da er jedes Pixel sowieso nochmal anpasst, kann er auch gleich die erste Bitmap pixelweise lesen und die zweite...