我的公司有一个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图像是什么原因?还有什么可能导致上述异常?
答案 0 :(得分:0)
你的问题是肯定/否定,所以答案是肯定的,因为那里的行表示存在除法,如果错误是这样的话,则可能为零。
除此之外,你说“(它被读入一个RenderedImage)”:这是否可以在java中显示(你可以创建一个jpanel并显示这个RenderedImage吗?)?如果是这样,那么你可以使用一些其他机制(ImageIO)将Renderable转换为png(并跳过你正在使用的这个程序)。如果没有,则开始TIFF调查的长期过程。