从BufferedImage获取float []或int []

时间:2014-01-31 17:46:41

标签: java image-processing bufferedimage

我正在尝试使用色调映射代码here。它有一个功能:

public void toneMap(final float[] image, final byte[] rgbOut) {
         for (int i = 0; i < image.length; i++) {
            final float clamped = Math.max(0, Math.min(1f, image[i]));
            rgbOut[i] = (byte) (0xFF & (short) (clamped * 255.0));
         }
      }

它接收浮点数组和图像的字节数组,并清楚地对像素值应用简单的钳位。 我试过了:

int[]rbg=((DataBufferInt) image.getRaster().getDataBuffer()).getData();

但我得到以下例外:

java.lang.ClassCastException: java.awt.image.DataBufferByte cannot be cast to java.awt.image.DataBufferInt

其他stackoverflow答案清楚地解释了为什么会如此。

我有一个图像文件想要将此功能应用于该文件。我知道我可以使用BufferedImage将图片读入ImageIO.read()。但是如何从中获得float[] rgb? 可能吗?或者是否有其他库可以帮助我从图像转换为float[] rgb像素数组?

修改

在评论中很少有人提到上面的代码对像素值没有任何作用,因为它们在0..255的范围内。但我想将上面的代码应用于HDR图像,例如.exr格式图像,它具有无限范围。

0 个答案:

没有答案