Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Image zu Array
Sylvus - Mi 14.10.09 11:43
Titel: Image zu Array
Hay Leute, ich hab ein Bild und möchte das gerne in ein Array packen um dann schneller Berechnungen, wie z.B. Suchen von Flächen durchführen zu können. Ich hoffe die Idee ist erstmal sinnvoll!
Jetzt habe ich folgenden Code, der mir das Bild in das Array speichert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for J := 0 to Form1.Anzeige.Picture.Bitmap.Height - 1 do begin Row := Form1.Anzeige.Picture.Bitmap.ScanLine[J]; for I := 0 to Form1.Anzeige.Picture.Bitmap.Width - 1 do begin bild[I, J]:= Row^.rgbtRed; Inc(Row); end; end; |
Um das gleich zu klären, das Bild ist grau - jeder Farbwert egal ob blau grün oder rot ist also gleich!
Ich kann jetzt natürlich das ganze runternehmen auf ein Array of Integer, aber ich möchte eigentlich mit den einzelnen Farbwerten arbeiten.
Dieser Algorithmus braucht 7 sekunden - und das ist zu lange! Darum die Frage, wie man ihn optimieren könnte.
Stichwort "Scanline"? :)
Vielen Dank
//so schon etwas verbessert - trotzdem noch Ideen?
GuaAck - Fr 16.10.09 21:56
Hallo,
ich benutze meistens
Bitmap.Canvas.Pixels[actx, acty]
ich habe nie eine lästige Wartezeit für 1200 x 800 Bilder gefunden. Bitmapformat könnte aber ein Problem sein. Einige BMP-Formate packen die heute üblichen 3 Bytes je Farbe, so dass bei jedem Zugriff erste eine Umsortierung in das 4-Byte Integer erfolgen muss.
Insofern lohnt eigentlich das Umspeichern nicht, Du kannst ja auf die Pixel in der Bitmap direkt wie in einem ARRAY zugreifen.
Bei einer BMP, die 32-Bit je Pixel speichert, wäre auch ein Blockmove in an Array of Integer (32 Bit) eine Alternative, aber vergiss Portierbarkeit/langlebigkeit des Codes.
Gruß
Guenther
jaenicke - Sa 17.10.09 09:45
GuaAck hat folgendes geschrieben : |
ich benutze meistens
Bitmap.Canvas.Pixels[actx, acty] |
Das wäre extrem langsam. Langsamer geht es kaum noch...
@
Sylvus:
Du hast von ScanLine doch bereits quasi ein Array. Warum kopierst du danach einzeln? :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!