2013-03-10 2 views
4

압축을 수행하지 않고 .png로 BufferedImage을 작성해야합니다. 둘러 보았고 다음 코드를 작성했습니다.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"을 지정하고 ZLIB 압축의 경우 compressionLevel = 0을 지정하면 압축되지 않은 이미지와 대략 일치합니다. javax.imageio.* 패키지에서이 매개 변수를 선택할 수 없습니다. 아마도 압축하지 않을 경우 this 또는 this

관련 문제