Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java read()抛出IllegalArgumentException_Java_Image Processing_Javax.imageio - Fatal编程技术网

Java read()抛出IllegalArgumentException

Java read()抛出IllegalArgumentException,java,image-processing,javax.imageio,Java,Image Processing,Javax.imageio,我正在使用ImageIO api读取字节数组(使用ByteArrayInputStream)以获取一个BufferredImage。它在大多数情况下工作,但在某些图像中失败。在做了大量的研究之后,我发现这与颜色转换有关。但我不确定如何通过不泄露ImageIO API快速解决这个问题。以下是堆栈跟踪: java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space component

我正在使用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)
java.lang.IllegalArgumentException:源光栅标注栏和源颜色空间组件的数量不匹配
在java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:460)中
在com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1114)上
位于com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(JPEGImageReader.java:0)
位于com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1082)
位于com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
在javax.imageio.imageio.read(imageio.java:1422)
在javax.imageio.imageio.read(imageio.java:1374)
位于org.netbeans.modules.form.editors.CustomIconEditor$IconFileItem(CustomIconEditor.java:516)
位于org.netbeans.modules.form.editors.CustomIconEditor.createFileComboModel(CustomIconEditor.java:479)
位于org.netbeans.modules.form.editors.CustomIconEditor.setPackage(CustomIconEditor.java:312)
位于org.netbeans.modules.form.editors.CustomIconEditor.setValue(CustomIconEditor.java:155)
位于org.netbeans.modules.form.editors.IconEditor.getCustomEditor(IconEditor.java:228)
位于org.netbeans.modules.form.ResourceWrapperEditor.createCustomEditorGUI(ResourceWrapperEditor.java:311)
位于org.netbeans.modules.form.ResourceWrapperEditor.getCustomEditor(ResourceWrapperEditor.java:203)
位于org.netbeans.modules.form.formPropertyEdit.getCustomEditor(formPropertyEdit.java:303)
位于org.openide.explorer.propertysheet.PropertyDialogManager.(PropertyDialogManager.java:129)
在org.openide.explorer.propertysheet.CustomEditorAction.actionPerformed上(CustomEditorAction.java:217)
位于org.openide.explorer.propertysheet.SheetTable.editCellAt(SheetTable.java:998)
位于javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1078)
位于javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1008)
在java.awt.AWTEventMulticaster.mousePressed处(AWTEventMulticaster.java:263)
在java.awt.AWTEventMulticaster.mousePressed处(AWTEventMulticaster.java:262)
在java.awt.AWTEventMulticaster.mousePressed处(AWTEventMulticaster.java:262)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6260)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3255)
位于org.openide.explorer.propertysheet.SheetTable.ProcessMouseeEvent(SheetTable.java:731)
位于java.awt.Component.processEvent(Component.java:6028)
位于java.awt.Container.processEvent(Container.java:2041)
位于java.awt.Component.dispatchEventImpl(Component.java:4630)
位于java.awt.Container.dispatchEventImpl(Container.java:2099)
位于java.awt.Component.dispatchEvent(Component.java:4460)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(LightweightDispatcher.java:4574)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(LightweightDispatcher.java:4235)
位于java.awt.LightweightDispatcher.dispatchEvent(LightweightDispatcher.java:4168)
位于java.awt.Container.dispatchEventImpl(Container.java:2085)
位于java.awt.Window.dispatchEventImpl(Window.java:2475)
位于java.awt.Component.dispatchEvent(Component.java:4460)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
位于org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:184)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:174)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
在java.awt.EventDispatchThread.run处(EventDispatchThread.java:122)

因此,javax.imageio API中的一个JDK错误阻止imageio.read(..)返回BuffereImage。它于2007年报告并仍然开放:(


为了解决我的问题-我已经实现了一个直接处理字节的解决方法。生活很好。不过感谢您花时间)

错误消息提供了信息,表明ICC颜色配置文件中提到的光栅带数似乎不正确。我习惯于从图像中查看ICC配置文件。ImageIO随后在读取图像时没有问题(~1k个坏图像)。希望对您有所帮助。

再次跳过此代码。。。stacktraces in swing…看起来好像您正试图读取损坏的JPEG文件,更具体地说是一个带有颜色空间的文件,该文件将其声明为彩色图像,但只有一个光栅通道,或者更可能是一个颜色空间将其声明为灰度图像,但有三个光栅通道。后者通常由损坏的JPEG编码器产生,无法用ImageIO中的JPEG解码器读取。其他JPEG解码器通常更能容忍错误编码的JPEG文件。@jarnbjo是的,问题在于颜色空间。颜色空间为灰色。当被要求返回BuffereImage时,ImageIO当前不能与类型_GRAY一起工作。下面我的回答中提供了bug的链接。感谢您的时间。您链接到的bug与读取损坏的JPEG文件完全无关(很明显,这是导致堆栈跟踪的原因)。