Was ist der schnellste Weg, um den RGB-Wert jedes Pixels eines BufferedImage
zu erhalten?
Im Moment bekomme ich die RGB-Werte mit zwei for
-Schleifen, wie im folgenden Code gezeigt, aber es dauerte zu lange, um diese Werte zu erhalten, da die verschachtelte Schleife für mein Bild insgesamt 479999 Mal ausgeführt wird. Wenn ich ein 16-Bit-Bild verwende, wäre diese Zahl noch höher!
Ich brauche einen schnelleren Weg, um die Pixelwerte zu erhalten.
Hier ist der Code, mit dem ich gerade arbeite:
%Vor%Ich weiß nicht, ob das helfen könnte und ich habe es noch nicht getestet, aber Sie können die rgb-Werte auf diese Weise erhalten:
%Vor%Wie Sie sehen können, müssen Sie keine neue Farbe in der Schleife initialisieren. Ich invertierte auch die Breite / Höhe Schleifen wie von onemasse vorgeschlagen, um den Zähler aus Daten, die ich bereits habe, abzurufen.
Durch den Wechsel von einer Menge einzelner getRGBs zu einem großen getRGB, um das gesamte Bild in ein Array zu kopieren, fiel die Ausführungszeit um eine Größenordnung von 33.000 Millisekunden auf 3.200 Millisekunden, während die Zeit das Array erzeugt war nur 31 Millisekunden.
Kein Zweifel, ein großer Lesevorgang in ein Array und eine direkte Indizierung des Arrays ist viel schneller als bei vielen einzelnen Lesevorgängen.
Die Leistungsdifferenz wird im Zusammenhang mit der Verwendung einer Haltepunktanweisung am Ende der Klasse angezeigt. Während sich der Haltepunkt außerhalb der Schleife befand, scheint jede Codezeile innerhalb der Klasse auf den Haltepunkt getestet zu sein. Das Wechseln zu individuellen Gets verbessert NICHT die Geschwindigkeit.
Da der Code immer noch korrekt ist, kann der Rest der Antwort immer noch nützlich sein.
Alte Leseanweisung
%Vor%Leseanweisung, um ein Bit-Bild in ein Array zu kopieren
%Vor%Der getRGB in ein Array setzt alle 3 Farbwerte in ein Arrayelement, so dass einzelne Farben durch Drehen und ein "und" extrahiert werden müssen. Die y-Koordinate muss mit der Breite des Bildes multipliziert werden.
Code zum Lesen einzelner Farben aus dem Array
%Vor%Haben Sie versucht, BufferedImage.getRGB (int, int, int, int, int [], int, int) ?
Etwas wie:
%Vor%Habe es nicht versucht, also nicht sicher, ob es schneller ist.
Bearbeiten Den @ Code angeschaut, ist es wahrscheinlich nicht, aber einen Versuch wert.
Tags und Links java image-processing pixels