1

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

+0

Используйте 'setCompressionType()' с типом, который вы хотите. Все перечисленные 4 типа поддерживаются, как указано в документации – nhahtdh

+3

. Я удалил ваше сообщение «спасибо» - новый и новый вопрос. Вы выражаете благодарность, предлагая полезные ответы и принимая лучший ответ. Если у вас есть новый или последующий вопрос, пожалуйста, создайте новый вопрос; если вы считаете это актуальным, добавьте ссылку на этот вопрос. –

ответ

1

См. this example, как писать, используя 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, потому что настройка типа сжатия доступна через супер-интерфейс 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 с.
Для exmaple BI_RLE8 сжатия поддерживается для BufferedImage.TYPE_BYTE_INDEXED и BufferedImage.TYPE_BYTE_GRAY, но это не поддерживается для BufferedImage.TYPE_3BYTE_BGR и в этом случае IOException будет выброшен методом ImageWriter.write() (который на самом деле BMPImageWriter.write()).

Смежные вопросы