JAI编解码器PNGImageEncoder抛出除零异常

时间:2016-04-03 11:40:05

标签: java jai

我的公司有一个EJB,它试图通过RenderedImage将灰度TIFF图像(读入PNGImageEncoder.encode)转换为PNG图像。

今天,我了解到,在我不知道的情况下(我不是作者,我不在测试网站上),会抛出除零异常。我发现它被PNGImageEncoder抛出是不寻常的。试图在线搜索问题没有任何有用的东西。

例外:

java.lang.ArithmeticException: divide by zero
    at com.sun.media.jai.codecimpl.PNGImageEncoder.encodePass(PNGImageEncoder.java:367)
    at com.sun.media.jai.codecimpl.PNGImageEncoder.writeIDAT(PNGImageEncoder.java:476)
    at com.sun.media.jai.codecimpl.PNGImageEncoder.encode(PNGImageEncoder.java:1026)
    at com.nameOfMyCompany.SomeProgram.writePNG(SomeProgram.java:555)

经过进一步调查,我怀疑所使用的TIFF图像(我无法访问)由于某种原因(ImageEncoder code)将位深度设置为0。 PNGImageEncoder.encodePass无法计算samplesPerByte,并抛出异常。

我的问题:我是否正确怀疑TIFF图像是什么原因?还有什么可能导致上述异常?

1 个答案:

答案 0 :(得分:0)

你的问题是肯定/否定,所以答案是肯定的,因为那里的行表示存在除法,如果错误是这样的话,则可能为零。

除此之外,你说“(它被读入一个RenderedImage)”:这是否可以在java中显示(你可以创建一个jpanel并显示这个RenderedImage吗?)?如果是这样,那么你可以使用一些其他机制(ImageIO)将Renderable转换为png(并跳过你正在使用的这个程序)。如果没有,则开始TIFF调查的长期过程。