AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zusammenhängene Pixel zählen
Thema durchsuchen
Ansicht
Themen-Optionen

Zusammenhängene Pixel zählen

Ein Thema von Eichhoernchen · begonnen am 2. Jul 2006 · letzter Beitrag vom 5. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Zusammenhängene Pixel zählen

  Alt 2. Jul 2006, 23:00
Ich kann dir nur empfehlen, Scanline so bald wie möglich zu verwenden. Das Performanceunterschied ist einfach gewaltig.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

Re: Zusammenhängene Pixel zählen

  Alt 3. Jul 2006, 13:00
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Zusammenhängene Pixel zählen

  Alt 5. Jul 2006, 04:41
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Zusammenhängene Pixel zählen

  Alt 5. Jul 2006, 11:48
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz