Java растровый формат RLE8

1

Поддерживает ли Java ImageIO (или любые другие обработчики изображений) формат изображения BI_RLE8? Единственное, что мне удалось найти, это BMPImageWriteParam, но я понятия не имею, как это использовать. Любая помощь будет замечательной.

  • 0
    Используйте setCompressionType() с нужным вам типом. Все 4 перечисленных типа поддерживаются, как указано в документации
  • 3
    Я удалил вашу заметку "спасибо" и новый вопрос. Вы выражаете благодарность, высказывая полезные ответы и принимая лучший ответ. Если у вас есть новый или дополнительный вопрос, пожалуйста, создайте новый вопрос; если вы считаете это актуальным, добавьте ссылку на этот вопрос.
Теги:
image
image-compression
javax.imageio
run-length-encoding

2 ответа

1
Лучший ответ

См. Этот пример, как писать с использованием ImageWriter и с помощью ImageWriteParam (используйте экземпляр BMPImageWriteParam в вашем случае). Прокрутите немного вниз, чтобы найти пример записи.

Вместо строки:

ImageWriteParam param = writer.getDefaultWriteParam();

Вы должны вставить что-то вроде:

BMPImageWriteParam param = new BMPImageWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");

Вы можете безопасно передать null для миниатюр и метаданных (... в примере).

2

Если вы хотите сохранить изображение с помощью настраиваемых параметров, вам необходимо использовать ImageWriter с помощью которого вы можете передавать пользовательские параметры для записи выходного файла.

Вы можете получить параметры из ImageWriter используя метод getDefaultWriteParam() где вы можете установить тип сжатия. Вам даже не нужно BMPImageWriteParam его в BMPImageWriteParam поскольку настройка типа сжатия доступна через ImageWriter.

Обратите внимание, что для использования пользовательского типа сжатия вам необходимо установить режим сжатия в ImageWriteParam.MODE_EXPLICIT.

Вот полный код:

BufferedImage bi = new BufferedImage(200, 100, BufferedImage.TYPE_BYTE_INDEXED);

ImageWriter writer  = ImageIO.getImageWritersByFormatName("bmp").next();
ImageWriteParam param = writer.getDefaultWriteParam();

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("BI_RLE8");

writer.setOutput(new FileImageOutputStream(new File("test.bmp")));
writer.write(null, new IIOImage(bi, null, null), param);
writer.dispose();        

Обратите внимание, что сжатие BI_RLE8 недоступно для всех типов BufferedImage s.
Для exmaple BI_RLE8 сжатие поддерживается для BufferedImage.TYPE_BYTE_INDEXED и BufferedImage.TYPE_BYTE_GRAY но оно не поддерживается для BufferedImage.TYPE_3BYTE_BGR в этом случае метод IOException будет вызываться методом ImageWriter.write() (который фактически является BMPImageWriter.write()).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню