皆さんがこれで私を助けてくれることを願っています。それが Java のバグなのか、何か間違ったことをしているのかはわかりませんが、後者を使用します。
BufferedImage を GIF 画像に変換したい。次に、GIF をバイト配列の形式でメモリに保持したいと考えています。(ファイルをディスクに保存したくない)
プログラムは画面セグメントをキャプチャし (簡単な画像を作成するためだけに)、ImageIO ImageWriter と ByteArrayOutputStream を使用して GIF バイト配列に変換する必要があります。
以下のコードは、バグを示しています。プログラムがクラッシュして ArrayIndexOutOfBoundsException が発生し、配列は空のままになります。「gif」を「png」に置き換えると問題なく動作するため、混乱します。また!イメージをディスク上のファイルに保存すると
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]);
}