Heim > Java > javaLernprogramm > Wie kann ich effizient ein 2D-Pixel-Array aus einem Java BufferedImage abrufen?

Wie kann ich effizient ein 2D-Pixel-Array aus einem Java BufferedImage abrufen?

Linda Hamilton
Freigeben: 2024-12-28 09:28:11
Original
454 Leute haben es durchsucht

How Can I Efficiently Get a 2D Pixel Array from a Java BufferedImage?

Java – 2D-Pixel-Array aus Bild abrufen

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) {
        ...
    }
    ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage