Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zusammenhängene Pixel zählen (https://www.delphipraxis.net/72513-zusammenhaengene-pixel-zaehlen.html)

Ultimator 2. Jul 2006 22:00

Re: Zusammenhängene Pixel zählen
 
Ich kann dir nur empfehlen, Scanline so bald wie möglich zu verwenden. Das Performanceunterschied ist einfach gewaltig.

himitsu 3. Jul 2006 12:00

Re: Zusammenhängene Pixel zählen
 
Oder man besorgt sich per ScanLine die Adresse des ersten Pixel (des Bildes) im RAM und legt darauf ein nettes passend zurechtdimensioniertes (statisches) Array ( Array[0..x, 0..y] of PixelFormat ).
Danach kann man wesendlich schneller direkt zugreifen und das ohne sich jedesmal mehrere ScanLines, oder Pixel besorgen zu müssen.

dizzy 5. Jul 2006 03:41

Re: Zusammenhängene Pixel zählen
 
Dabei sollte man nur im Hinterkopf behalten, dass Bitmaps mal top-down, und mal "richtig herum" im Speicher liegen. Ich weiss nur grad nicht wodurch das defniniert ist, bzw. ob das überhaupt definiert ist. Für diesen Fall hier sollte das allerdings keine großen Unterschiede machen.

Btw: Als ich "zusammenhängende Pixel" las, musste ich auch zu aller erst an "Rekursion" denken. Ich denke der Ansatz von Toxman ist sehr brauchbar.
Anmerkung zu "SetLength(array, Length(array)+1);": Dazu gab es in der DP schon irre Threads. Fakt ist: Es ist unglaublich ineffizient, und aus Sicht des Speichermanagements ein Schlag ins Gesicht :)
Und zu Scanline vs. Pixels[]: Auch die Verwaltung von 3 oder mehr Scanlines ist im Zweifel erheblich schneller als Pixels! Man kann aber auch mit Wissen um die Breite eines Bildes mit einfachen Rechnungen an Pixel über oder unter dem aktuellen kommen, was noch immer viel viel effizienter ist als Pixels. (Ein Bitmap wird ja immerhin 1-dimensional gespeichert, und zwar so, dass die Zeilen im Speicher "nebeneinander" liegen. Um kontrolliert zugreifen zu können reichen also die folgenden 3 Infos völlig aus: Pointer auf den ersten Pixel; Pixelformat; Höhe+Breite des Bildes.)
Wenn man sich btw. anschaut, was Pixels alles für Umwege macht beim Zugriff darauf, wird denke ich auch deutlich wo da der Hund begraben ist. Pixels ist imho eines der dicken "don'ts" im Umgang mit Bitmaps, bzw. gerade dann, wenn man mehr als nur eine Hand voll Pixel lesen/schreiben will.


Gruss,
Fabian

Muetze1 5. Jul 2006 10:48

Re: Zusammenhängene Pixel zählen
 
Ich sehe bei einem 2-dimensionalen Array auch noch das Problem, dass bei manchen Pixelformaten ein Packed angegeben werden muss (z.B: 24bpp) um die Ausrichtung des Array anzupassen. Nun ist da aber noch das Problem, dass die ScanLines nach meinem Wissen aligned werden. Wenn also am Ende einer Pixeldatenzeile noch ein Byte übrig ist vor der nächsten Zeile, dann wird das leer gelassen - die Array Definition benutzt dieses aber mit und schon verschiebt sich alles.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz