【发布时间】:2011-03-06 22:31:12
【问题描述】:
我正在编写一个程序,它将对 16 位 tiff 图像(5 位红色,6 位绿色,5 位蓝色)进行图像处理,但不幸的是,我编写的代码将图像数据视为 8少量。
为了详细说明代码,我使用 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像素值返回为24,24,24 [8位值]时应该是6168,6168, 6168 [16 位值])。
我尝试将简单的ImageIO.read(imageFile) 更改为基于另一个stack overflow tiff question 的以下代码行:
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 位图像格式这一事实,我只能假设这是可能的,但我对我缺少的东西感到困惑.
【问题讨论】:
-
你是如何从 TIFF 中获得
BufferedImage的???
标签: java image-processing tiff