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) { ... } ... }
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!