2013-03-10 5 views
4

Мне нужно написать BufferedImage как .png без сжатия. Я осмотрелся и придумал следующий код.Как написать BufferedImage как PNG без сжатия?

public void save(String outFilePath) throws IOException { 
    Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("png"); 
    ImageWriter writer = iter.next(); 

    File file = new File(outFilePath);  
    ImageOutputStream ios = ImageIO.createImageOutputStream(file); 
    writer.setOutput(ios); 

    ImageWriteParam iwp = writer.getDefaultWriteParam(); 
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
    iwp.setCompressionQuality(1.0f); 

    IIOImage image = new IIOImage(mapImage, null, null); 

    writer.write(null, image, iwp); 
    writer.dispose(); 

    //ImageIO.write(mapImage, "png", file); 
} 

Приведенное выше исключение.

Exception in thread "main" java.lang.UnsupportedOperationException: Compression not supported. 
    at javax.imageio.ImageWriteParam.setCompressionMode(Unknown Source) 
    at Map.MapTransformer.save(MapTransformer.java:246) 
    at Map.MapTransformer.main(MapTransformer.java:263) 
+0

если вы не собираетесь его сжимать ... почему бы не bmp? – radai

+1

Возможно, вы должны использовать MODE_DISABLED. – NovaDenizen

+0

Кроме того, единственным препятствием для включения сжатия на «PNG» является несколько более дорогостоящая операция. 'PNG' без потерь, поэтому сжатие не оказывает вредного влияния на качество изображения. – NovaDenizen

ответ

2

PNG изображение достичь сжатия пути применения первого предсказания filter (вы можете выбрать один из пяти вариантов), а затем прессования ошибки предсказания с ZLIB. Вы не можете опустить эти два шага, что вы можете сделать, это указать «NONE» в качестве фильтра прогнозирования, а compressionLevel = 0 для сжатия ZLIB, что будет примерно соответствовать несжатому изображению. Пакет javax.imageio.* не разрешает (я думаю), чтобы выбрать этот параметр, возможно, вы можете попробовать с this или this

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

  • Нет связанных вопросов^_^