我正在尝试使用 BufferedImage.TYPE_USHORT_GRAY 将 16 位灰度图像数据写入 png。通常我会像这样写入图像:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
then:
image.setRGB(x,y,Color.getRGB);
设置像素,最后:
ImageIO.write(image, "png", new File(path + ".png"));
写入 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 坐标)?