16 비트 TIFF 이미지 (5 비트 빨강, 6 비트 녹색, 5 비트 파랑)에서 이미지 처리를 수행하는 프로그램을 작성하고 있지만 불행하게도이 코드는 이미지 데이터를 8 비트로 처리합니다 . 코드 정교Java의 tiff에서 16 비트 픽셀 데이터를 어떻게 검색합니까?
, 정말 같은 ImageIO에서 유틸리티 클래스와 메모리에 이미지를 읽어
BufferedImage image = ImageIO.read(imageFile);
나중에 픽셀 정보를 검색 할이 루프 사용에 :
Matrix imageMatrix = new Matrix(image.getHeight(), image.getWidth());
Raster raster = image.getData();
double[] pixelColor = new double[4];
for (int x = 0; x < image.getWidth(); x = x + 1) {
for (int y = 0; y < image.getHeight(); y = y + 1) {
raster.getPixel(x, y, pixelColor);
double pixelColorAverage = (pixelColor[0] + pixelColor[1] + pixelColor[2])/3.0;
imageMatrix.set(y, x, pixelColorAverage);
}
}
return imageMatrix;
문제는 raster.getPixel(x, y, pixelColor);
이 8 비트로 각 RGB 값을 반환한다는 것입니다. (내 테스트 이미지에서 0,0 픽셀 값은 6168,6168,6168 [16 비트 값] 일 때 24,24,24 [8 비트 값]으로 반환됩니다.).
내가 다른 stack overflow tiff question에 따라 코드의 다음 줄에 단순한 ImageIO.read(imageFile)
을 변경 시도했다 :
BufferedImage image = ImageIO.read(file);
BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_USHORT_565_RGB);
convertedImage.createGraphics().drawRenderedImage(image, null);
그러나이 시간, 중 올바른되지 않습니다 raster.getPixel(x, y, pixelColor);
반환 3,6,3.
ImageIO가 tiff 이미지를 지원하고 버퍼링 된 이미지의 크기가 5-6-5 스타일의 16 비트 이미지 형식을 기반으로한다는 가정하에이 방법을 사용할 수 있다고 가정 할 수는 있지만, 있어야 할 곳에 없는.
??? – Gevorg