Das Abrufen eines Arrays von Pixelwerten aus einem BufferedImage kann eine zeitaufwändige Aufgabe sein, bestimmte Methoden bieten jedoch schnellere Verarbeitungszeiten .
Ein Ansatz besteht darin, BufferedImage.getRGB() in einer verschachtelten Schleife zu verwenden, die Alpha-, Rot-, Grün- und Blauwerte zu einem einzigen kombiniert ganze Zahlen. Diese Methode ist jedoch nicht ideal für große Bilder oder leistungsempfindliche Anwendungen.
Alternativ ist der direkte Zugriff auf das Pixelarray über ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData() von wesentlicher Bedeutung Schneller. Dieser Ansatz bietet direkten Zugriff auf die Rot-, Grün- und Blauwerte, optional einschließlich eines Alphakanals.
Ein Leistungsvergleich mit einem riesigen Bild mit 12.000 x 12.000 Pixeln zeigte eine bemerkenswerte Verbesserung bei Verwendung der direkten Pixelzugriffsmethode. Der getRGB()-Ansatz benötigte für jeden Durchlauf etwa 16 Sekunden, während der direkte Zugriff auf das Pixel-Array die Verarbeitungszeit auf lediglich 1–2 Sekunden reduzierte.
Hier ist ein Codeausschnitt, der die beiden Ansätze vergleicht:
import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; ... // First method: Using BufferedImage.getRGB() int[][] result1 = convertTo2DUsingGetRGB(hugeImage); // Second method: Accessing pixel array directly int[][] result2 = convertTo2DWithoutUsingGetRGB(hugeImage); ... private static int[][] convertTo2DUsingGetRGB(BufferedImage image) { ... for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { result[row][col] = image.getRGB(col, row); } } ... } private static int[][] convertTo2DWithoutUsingGetRGB(BufferedImage image) { ... final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); ... for (int pixel = 0, row = 0, col = 0; pixel + 3 < pixels.length; pixel += pixelLength) { ... } ... }
Durch die Nutzung der direkten Pixelzugriffsmethode können Sie die Leistung Ihrer Bildverarbeitungsaufgaben optimieren, insbesondere bei großen oder zeitkritischen Bildern Anwendungen.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient ein 2D-Pixel-Array aus einem Java BufferedImage abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!