Meine Firma hat eine EJB, die versucht, ein Graustufen-TIFF-Bild (das in eine RenderedImage
gelesen wird) in ein PNG-Bild durch PNGImageEncoder.encode
zu konvertieren.JAI-Codec PNGImageEncoder löst Division durch Null Ausnahme
Heute habe ich gelernt, dass es, unter Umständen, die ich nicht weiß (ich war nicht der Autor, und ich bin nicht anwesend auf der Testseite), eine Division durch Null Ausnahme. Ich fand es ungewöhnlich, dass es von PNGImageEncoder
geworfen wurde. Der Versuch, online nach dem Problem zu suchen, hat nichts Nützliches gebracht.
Die Ausnahme:
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)
Bei der weiteren Untersuchung, wie ich vermute, dass die TIFF-Bilder verwendet (was ich keinen Zugang zu haben) haben die Bittiefe aus irgendeinem Grunde auf 0 gesetzt (ImageEncoder code). PNGImageEncoder.encodePass
kann samplesPerByte
nicht berechnen, und die Ausnahme wird ausgelöst.
Meine Frage: Habe ich recht, wenn ich vermute, dass die TIFF-Bilder der Grund dafür sind? Was könnte sonst die obige Ausnahme verursachen?
Dies ist meine erste Post in StackExchange (obwohl ich hier für eine ganze Weile lauerte). Die Formatierung meiner Frage passt möglicherweise nicht gut genug zu der Website. Entschuldigung, wenn das der Fall ist. –
TIFF ist ein ziemlich altes Format, und im Laufe der Jahre haben sich die Spezifikationen und die erforderlichen/optionalen Tags unglaublich erweitert. Es ist möglich, dass es eine Kombination von grundlegenden Eigenschaften-Tags gibt, die es für andere Software "gültig" machen, aber nicht für die Bibliothek, die Sie zum Lesen verwenden (welche?). Am besten ist es, die ursprüngliche TIFF-Datei in die Hände zu bekommen, damit Sie die Ursache ermitteln können. – usr2564301
@ rad-lexus Das 'RenderedImage' wurde von' com.sun.media.jai.codec.ImageDecoder.decodeAsRenderedImage' erstellt. Weitere Erkenntnisse meines Kollegen deuten darauf hin, dass es sich nicht um die Probleme der TIFF-Dateien und des Java-Codes handelt. Ich habe mich dann auf andere Dinge zu arbeiten, aber ich kann dies aktualisieren, wenn die Ursache genau bestimmt werden kann. –