我正在尝试使用色调映射代码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格式图像,它具有无限范围。