使用ImageIO

时间:2019-06-25 16:04:44

标签: java javax.imageio cgm

我正在尝试使用以下功能将CGM文件转换为PNG。我一直在获取NullPointerException。

public File convertCGMtoPNG(File cgmFile, File directoryToCreatePNG, 
                            String nameSuffix)  throws IOException 
{       
    File pngFile = new File(directoryToCreatePNG.getAbsolutePath() + 
                            File.separator +                         
        cgmFile.getName().substring(0,cgmFile.getName().lastIndexOf(".cgm")) +
                    "_" + nameSuffix + ".png");         
    BufferedImage image = ImageIO.read(cgmFile);
        ImageIO.write(image, "PNG", pngFile);
        return pngFile;
}

以下是我面临的异常

java.lang.IllegalArgumentException: image == null! at java.desktop/javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
    at java.desktop/javax.imageio.ImageIO.getWriter(ImageIO.java:1608)
    at java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1540)

我尝试调试代码,并知道ImageIO不支持CGM格式(CanDecodeInputFilter为我的CGM返回false)。关于如何将CGM转换为PNG图像的任何想法。

PS:我正在使用Java 11进行开发。

预先感谢

更新

基于我尝试的jcgm库的答复(将核心库和图像库添加到了我的类路径中)。它通过“ 图像==空!”错误,但现在抛出错误以下

java.lang.IllegalArgumentException: width*height > Integer.MAX_VALUE!

at java.desktop/javax.imageio.ImageReader.getDestination(ImageReader.java:2821)
at net.sf.jcgm.imageio.plugins.cgm.CGMImageReader.read(Unknown Source)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1468)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1315)

仍在努力使其工作。

1 个答案:

答案 0 :(得分:0)

ImageIO.read(* ...)仅加载这些图像类型GIF,PNG,JPEG,BMP和WBMP。

任何其他图像类型都将返回null且没有错误。

参考:http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

我确实意识到这不是针对特定原始问题的解决方案,而是针对所提出问题的解决方案。