有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAlang.ArrayIndexOutOfBoundsException将图像读取为字节[]

我试图获取一个通过RServe生成的png图像文件,将“raw”二进制文件转换为byte[],并创建缓冲图像,通过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()给出了约350000。在不起作用的图像上使用相同的命令,我得到650000,而BuffereImage永远不会生成。我的问题是: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) 个答案