我试图拍摄通过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)
*