java.lang.ArrayIndexOutOfBoundsException读取图像为byte []

时间:2016-02-04 16:48:20

标签: java image

我试图拍摄通过RServe制作的png图像文件,转换' raw' binary to byte [],并创建Buffered Image以通过JLabel图标在JFrame中显示。以下代码适用于我正在制作的一种图像,但不适用于另一种图像。

REXP xp = c.eval("r=readBin(" + imageFileSelect + ",'raw',800*800)");
        c.eval( "unlink(" + imageFileSelect + "); r");
        InputStream in = new ByteArrayInputStream(xp.asBytes());
        BufferedImage buffered = ImageIO.read(in);
        Image rescale = buffered.getScaledInstance(800,800, Image.SCALE_SMOOTH);

        JLabel picLabel = new JLabel();
        picLabel.setPreferredSize(new Dimension(775,775));
        ImageIcon icon = new ImageIcon(rescale);
        picLabel.setIcon(icon);

在InputStream上使用.available()为工作图像提供~350,000。在不起作用的图像上使用相同的命令,我得到650,000并且永远不会发出BufferedImage。我的问题:1)是.available()命令告诉我输入流的大小我做的那样,不工作的图像是大小的2倍? 2)我的代码是否有尺寸限制,不允许制作第二张图片,或者是否有其他错误我没看到?

或者,如果使用以下代码创建我的图像图标,则会收到包含的错误。

Image img =  Toolkit.getDefaultToolkit().createImage(xp.asBytes());
Image rescale = img.getScaledInstance(750,750, Image.SCALE_SMOOTH);

Uncaught error fetching image:

java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at sun.awt.image.PNGFilterInputStream.read(PNGImageDecoder.java:828)
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:364)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
*

0 个答案:

没有答案