Я пытаюсь записать 16-битные изображения в оттенках серого в png, используя BufferedImage.TYPE_USHORT_GRAY. Обычно я пишу к изображению, например, так:Запись в 16 бит 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)?
Попробуйте использовать Растр напрямую? – 2010-11-07 07:51:26
Хм, почему я не подумал об этом ... кажется, работает нормально, спасибо! (можете ли вы ответить как ответ, чтобы я мог его принять?) – FinalArt2005