写到16位BufferedImage TYPE_USHORT_GRAY
-
29-09-2019 - |
题
我想写的16位灰度。到png使用BufferedImage.TYPE_USHORT_GRAY.通常情况下,我写信给一个像这样的:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
然后:
image.setRGB(x,y,Color.getRGB);
设置素,最后:
ImageIO.write(image, "png", new File(path + ".png"));
写到一个新的图像。
但是现在我有这样的形象:
BufferedImage imageGray = new BufferedImage(width, height, BufferedImage.TYPE_USHORT_GRAY);
我怎么去救素,格式?使用setRGB()有16位整数似乎没有工作,当我打开保存png文件我看到很多带发生的事情。
我试图保存一个简单的梯度从0到65535然后使用setRGB()上的灰度图像,并检查结果在Photoshop。我可以看到图像组成的小梯度每256行。我猜任setRGB()或imageIO不工作作为我会喜欢它。
是否有解决方法吗?不imageIO甚至支持BufferedImage.TYPE_USHORT_GRAY格式?或者它可以仅节省8比特数据?如果可以节省的16位的数据,我将如何去拯救像素数据,最好的方式喜欢setRGB()工程(因此对于一定的x、y坐标)?
解决方案
为pst已经评论说下我的问题:
尝试使用光栅直接?
访问栅格直接解决了这个问题。
其他提示
从 BufferedImage
你可以阅读
公共静态最终int TYPE_USHORT_GRAY
表示unsigned short灰度图像,非索引).这个图像具有ComponentColorModel与CS_GRAY色隙.
所以尝试自己的实例 ColorSpace
与 CS_GRAY
类型(ColorSpace.getInstance(ColorSpace.CS_GRAY)
应该这样做我想).这个对象有一个方法被称为 fromRGB
这你应该能够使用...
你可能需要扩大签署了16位短裤整数和删除的标志:
int ushort = (int)(shortData[x][y]) & 0xFFFF;
不隶属于 StackOverflow