BufferedImage.TYPE_USHORT_GRAYを使用して16ビットのグレースケール画像データをpngに書き込もうとしています。通常、私は次のように画像に書き込みます。
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
それから:
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);
ピクセルをそのフォーマットに保存するにはどうすればよいですか?16ビット整数でsetRGB()を使用すると、機能しないようです。保存したpngファイルを開くと、多くのバンディングが発生していることがわかります。
0から65535までの単純なグラデーションを保存してから、グレースケール画像でsetRGB()を使用して、Photoshopで結果を確認しました。画像は256行ごとの小さなグラデーションで構成されていることがわかります。setRGB()またはimageIOのいずれかが希望どおりに機能しないと思います。
これに対する回避策はありますか?imageIOはBufferedImage.TYPE_USHORT_GRAY形式もサポートしていますか?それとも、8ビットデータしか保存できませんか?そして、16ビットデータを保存できる場合、できればsetRGB()が機能するように(特定のx、y座標に対して)ピクセルデータを保存するにはどうすればよいですか?