BufferedImage에서 픽셀 값 배열을 가져오는 것은 시간이 많이 걸리는 작업일 수 있지만 특정 방법은 더 빠른 처리 시간을 제공합니다. .
한 가지 접근 방식은 중첩 루프에서 BufferedImage.getRGB()를 활용하는 것입니다. 녹색 및 파란색 값을 단일 정수로 변환합니다. 그러나 이 방법은 큰 이미지나 성능에 민감한 애플리케이션에는 적합하지 않습니다.
또는 ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData()를 사용하여 픽셀 배열에 직접 액세스하는 것은 상당히 더 빠르게. 이 접근 방식은 선택적으로 알파 채널을 포함하여 빨간색, 녹색 및 파란색 값에 대한 직접 액세스를 제공합니다.
대규모 12000x12000 픽셀 이미지로 수행한 성능 비교에서는 직접 픽셀 액세스 방법을 사용할 때 눈에 띄게 향상된 결과를 보여주었습니다. getRGB() 접근 방식은 각 실행에 약 16초가 소요되는 반면, 픽셀 배열에 직접 액세스하면 처리 시간이 단 1~2초로 단축되었습니다.
다음은 두 접근 방식을 비교한 코드 조각입니다.
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) { ... } ... }
직접 픽셀 액세스 방법을 활용하면 특히 큰 이미지를 처리하거나 시간에 민감한 경우 이미지 처리 작업의 성능을 최적화할 수 있습니다. 응용 프로그램입니다.
위 내용은 Java BufferedImage에서 2D 픽셀 배열을 효율적으로 가져올 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!