我想写的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色隙.

所以尝试自己的实例 ColorSpaceCS_GRAY 类型(ColorSpace.getInstance(ColorSpace.CS_GRAY) 应该这样做我想).这个对象有一个方法被称为 fromRGB 这你应该能够使用...

你可能需要扩大签署了16位短裤整数和删除的标志:

int ushort = (int)(shortData[x][y]) & 0xFFFF;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top