Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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/7/image/5.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.lang.ArrayIndexOutOfBoundsException将图像作为字节[]读取_Java_Image - Fatal编程技术网

java.lang.ArrayIndexOutOfBoundsException将图像作为字节[]读取

java.lang.ArrayIndexOutOfBoundsException将图像作为字节[]读取,java,image,Java,Image,我试图获取一个通过RServe生成的png图像文件,将“raw”二进制文件转换为byte[],并创建缓冲图像,通过JLabel图标显示在JFrame中。下面的代码适用于我正在制作的一种类型的图像,但不适用于另一种类型的图像 REXP xp = c.eval("r=readBin(" + imageFileSelect + ",'raw',800*800)"); c.eval( "unlink(" + imageFileSelect + "); r"); Input

我试图获取一个通过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)
*

这是你正在尝试的某种奇怪的格式吗?应为gif jpg png BMP图像在R服务器中制作为位图。因此,在Rserve会话中,我将文件作为原始二进制文件取出,并将其转换为字节。我试着用ImageIO.read(文件名)直接读取该文件,但不起作用。除非有办法在Rserve中创建图像并将其保存在临时Java位置。我有一个自动将图像保存到桌面的程序版本。但不是我试图让它更具动态性,在用户需要之前不打印图像。这就是我关注的:“以下代码适用于我正在制作的一种类型的图像,但不适用于另一种类型的图像。”它适用于哪种类型的图像,是png、bmp还是其他类型的图像?如果读卡器没有标题信息,它将无法读取原始字节。好的,它被创建为位,总是以相同的方式创建,但有时它被java接受,有时它不是,这就是我得到的。也许你们需要澄清你们的管道,那个些比特是从哪里来的——上面我写的是位图,当时我的意思是抱歉。工作的图像是在RServe中创建的线图,作为png。第二幅图像也是png,但它是由RCircos软件包制作的绘图。这些图像比线图更复杂,但仍然是png。因此,这两幅图像都来自R中不同的绘图功能