JAI 编解码器 PNGImageEncoder 抛出被零除异常
JAI codec PNGImageEncoder throws division by zero exception
我公司有一个 EJB,它试图通过 PNGImageEncoder.encode
将灰度 TIFF 图像(读入 RenderedImage
)转换为 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 图像(我无法访问)出于某种原因将位深度设置为 0 (ImageEncoder code)。 PNGImageEncoder.encodePass
无法计算samplesPerByte
,抛出异常
我的问题:我怀疑 TIFF 图像是原因是否正确?还有什么可能导致上述异常?
你的问题是 yes/no 所以答案是肯定的,因为那里的行显示了一个除法,这意味着有一个除法,如果错误是这样的话,可能是零。
除了你说的“(读入渲染图像)”之外:这是否可以在 java 中显示(你可以创建一个 jpanel 并显示这个渲染图像吗?)?如果是这样,那么您可以使用其他一些机制 (ImageIO) 将 Renderable 转换为 png(并跳过您正在使用的这个程序)。如果没有,那么漫长的 TIFF 调查过程就开始了。
我公司有一个 EJB,它试图通过 PNGImageEncoder.encode
将灰度 TIFF 图像(读入 RenderedImage
)转换为 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 图像(我无法访问)出于某种原因将位深度设置为 0 (ImageEncoder code)。 PNGImageEncoder.encodePass
无法计算samplesPerByte
,抛出异常
我的问题:我怀疑 TIFF 图像是原因是否正确?还有什么可能导致上述异常?
你的问题是 yes/no 所以答案是肯定的,因为那里的行显示了一个除法,这意味着有一个除法,如果错误是这样的话,可能是零。
除了你说的“(读入渲染图像)”之外:这是否可以在 java 中显示(你可以创建一个 jpanel 并显示这个渲染图像吗?)?如果是这样,那么您可以使用其他一些机制 (ImageIO) 将 Renderable 转换为 png(并跳过您正在使用的这个程序)。如果没有,那么漫长的 TIFF 调查过程就开始了。