Я пытаюсь записать 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"));
для записи в изображение 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)?