0

ImageIO apiを使用してバイト配列を読み取り(ByteArrayInputStreamを使用)、BufferredImageを取得しています。ほとんどの場合は機能しますが、特定の画像では失敗します。徹底的な調査を行った後、私はそれが色変換に関連していることを発見しました。しかし、ImageIO APIを提供しないことで、これをすばやく解決する方法がわかりません。以下はスタックトレースです。

java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match
   at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:460)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(JPEGImageReader.java:0)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
   at javax.imageio.ImageIO.read(ImageIO.java:1422)
   at javax.imageio.ImageIO.read(ImageIO.java:1374)
   at org.netbeans.modules.form.editors.CustomIconEditor$IconFileItem.<init>(CustomIconEditor.java:516)
   at org.netbeans.modules.form.editors.CustomIconEditor.createFileComboModel(CustomIconEditor.java:479)
   at org.netbeans.modules.form.editors.CustomIconEditor.setPackage(CustomIconEditor.java:312)
   at org.netbeans.modules.form.editors.CustomIconEditor.setValue(CustomIconEditor.java:155)
   at org.netbeans.modules.form.editors.IconEditor.getCustomEditor(IconEditor.java:228)
   at org.netbeans.modules.form.ResourceWrapperEditor.createCustomEditorGUI(ResourceWrapperEditor.java:311)
   at org.netbeans.modules.form.ResourceWrapperEditor.getCustomEditor(ResourceWrapperEditor.java:203)
   at org.netbeans.modules.form.FormPropertyEditor.getCustomEditor(FormPropertyEditor.java:303)
   at org.openide.explorer.propertysheet.PropertyDialogManager.<init>(PropertyDialogManager.java:129)
   at org.openide.explorer.propertysheet.CustomEditorAction.actionPerformed(CustomEditorAction.java:217)
   at org.openide.explorer.propertysheet.SheetTable.editCellAt(SheetTable.java:998)
   at javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1078)
   at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1008)
   at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
   at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
   at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
   at java.awt.Component.processMouseEvent(Component.java:6260)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
   at org.openide.explorer.propertysheet.SheetTable.processMouseEvent(SheetTable.java:731)
   at java.awt.Component.processEvent(Component.java:6028)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4630)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.LightweightDispatcher.retargetMouseEvent(LightweightDispatcher.java:4574)
   at java.awt.LightweightDispatcher.processMouseEvent(LightweightDispatcher.java:4235)
   at java.awt.LightweightDispatcher.dispatchEvent(LightweightDispatcher.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2475)
   at java.awt.Component.dispatchEvent(Component.java:4460)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
   at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
4

2 に答える 2

1

つまり、ImageIO.read(..) が BufferedImage を返さないようにする javax.imageio API の JDK バグです。2007年に報告され、まだ開いています:(

http://bugs.sun.com/view_bug.do;jsessionid=2e30e4710093bcffffffffa4c93719b2921d5?bug_id=6619667

私の問題を解決するために、バイトを直接処理する回避策を実装しました。人生は素晴らしい。時間を割いてくれてありがとう)

于 2013-01-18T20:29:21.657 に答える
1

エラー メッセージは参考情報であり、ICC カラー プロファイルに記載されているラスター バンドの数が正しくないように思われることを示しています。ImageMagickを使用して、画像から ICC プロファイルを取り除きました。その後、ImageIO は画像の読み取りに問題はありません (~1k の不良画像)。それが役立つことを願っています。

于 2013-03-27T06:40:26.323 に答える