将16位样本分配给WriteableRaster

时间:2011-08-07 17:23:52

标签: java clojure bufferedimage javax.imageio

如何在Clojure中创建每通道16位的图像?

我正在使用ImageIO类来读取和写入图像文件,它似乎可以很好地读取图像文件。它甚至可以将16位数据放入正确的色带中。

但是,我的应用程序需要转换,特别是Gimp的“叠加”转换,我必须通过查看两个单独图像的图像数据来应用。因此,从每个图像中,我从相应的波段中获取原始数据,运行转换,然后将结果写入新图像。

但是,我找不到让新图像接受16位值的方法。我必须将结果从每通道16位缩放到每通道8位,我不想这样做。

我正在创建我的图像:

(BufferedImage. 800 600 BufferedImage/TYPE_INT_RGB)

哪一个应该等同于

BufferedImage anon = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);

现在,有没有办法创建一个新的BufferedImage,每个通道接受16位?或者我是否必须切换到其他库?

如果我转换,我的要求是......

a)色彩空间意识 b)每通道16位

在此之前,我会尽力使用8位。

更新2011/08/10 : 虽然可能需要两周才能尝试,但看起来Java的高级成像API(JAI)可以满足我的需求。它支持色彩空间,每个通道/频段最多支持32位。

1 个答案:

答案 0 :(得分:2)

据我所知(如果我错了,请纠正我):

(BufferedImage. 800 600 BufferedImage/TYPE_INT_RGB)

等同于(*):

BufferedImage anon = BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);

而是:

BufferedImage anon = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);

如果您想要(*),请执行:

(. BufferedImage 800 600 BufferedImage/TYPE_INT_RGB)

也许你的帖子中有拼写错误......或者可能不是? (是的,这应该是评论,但我还不能这样做)