我希望你们能帮助我解决这个问题。我不确定这是Java中的错误还是我做错了什么,但我会选择后者。
我想将 BufferedImage 转换为 GIF 图像。然后我希望将 GIF 以字节数组的形式保存在内存中。(我不想将文件保存到磁盘)
该程序应该捕获一个屏幕片段(只是为了创建一个快速图像)并使用 ImageIO ImageWriter 和 ByteArrayOutputStream 将其转换为 GIF 字节数组。
下面的代码将向您展示该错误。程序将崩溃并给出 ArrayIndexOutOfBoundsException 并且数组保持为空。如果你用“png”替换“gif”,它会工作得很好,因此我很困惑。还!如果我将图像保存到磁盘上的文件中
write.setOutput(ImageIO.createImageOutputStream(new FileOutputStream(new File("C:/Image.gif")));
它会正确地将其保存到 .gif 文件中。
所以我的问题是,我在这段代码中做错了什么?任何帮助将不胜感激!:)
注意:这不是动画 GIF,也不涉及透明度。
String format = "gif";
Robot r = null;
try {
r = new Robot();
} catch (AWTException e1) {
e1.printStackTrace();
}
BufferedImage screen = r.createScreenCapture(new Rectangle(512,512));
final BufferedImage gif = new BufferedImage(512,512,BufferedImage.TYPE_BYTE_INDEXED);
Graphics2D g = gif.createGraphics();
g.drawImage(screen,0,0,null);
g.dispose();
ImageWriter write = ImageIO.getImageWritersBySuffix(format).next();
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
write.setOutput(ImageIO.createImageOutputStream(out));
write.write(gif);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for(int i=0; i < 10; i++) {
System.out.println(out.toByteArray()[i]);
}