Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mendapatkan Susunan Piksel 2D dengan Cekap daripada Java BufferedImage?

Bagaimanakah Saya Boleh Mendapatkan Susunan Piksel 2D dengan Cekap daripada Java BufferedImage?

Linda Hamilton
Lepaskan: 2024-12-28 09:28:11
asal
456 orang telah melayarinya

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

Java - Dapatkan Tatasusunan Piksel 2D daripada Imej

Mendapatkan tatasusunan nilai piksel daripada BufferedImage boleh menjadi tugas yang memakan masa, tetapi kaedah tertentu menawarkan masa pemprosesan yang lebih pantas .

Satu pendekatan ialah menggunakan BufferedImage.getRGB() dalam gelung bersarang, yang menggabungkan nilai alfa, merah, hijau dan biru menjadi integer tunggal. Walau bagaimanapun, kaedah ini tidak sesuai untuk imej besar atau aplikasi sensitif prestasi.

Sebagai alternatif, mengakses tatasusunan piksel secara langsung menggunakan ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData() adalah ketara. lebih pantas. Pendekatan ini menyediakan akses terus kepada nilai merah, hijau dan biru, secara pilihan termasuk saluran alfa.

Perbandingan prestasi yang dijalankan dengan imej besar 12000x12000 piksel menunjukkan peningkatan yang ketara apabila menggunakan kaedah akses piksel langsung. Pendekatan getRGB() mengambil masa kira-kira 16 saat untuk setiap larian, sambil mengakses tatasusunan piksel secara langsung mengurangkan masa pemprosesan kepada 1-2 saat sahaja.

Berikut ialah coretan kod yang membandingkan dua pendekatan:

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) {
        ...
    }
    ...
}
Salin selepas log masuk

Dengan memanfaatkan kaedah akses piksel langsung, anda boleh mengoptimumkan prestasi tugas pemprosesan imej anda, terutamanya apabila berurusan dengan imej besar atau aplikasi sensitif masa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Susunan Piksel 2D dengan Cekap daripada Java BufferedImage?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan