如何使用ImageIO保存用图形创建的Java图像

如何使用ImageIO保存用图形创建的Java图像,java,javax.imageio,Java,Javax.imageio,我正在使用图形库创建图像,并尝试使用BuffereImage和ImageIO保存创建的图像。运行后,我的图像弹出,但保存的图像只是黑色的 import java.awt.*; 导入java.awt.image.buffereImage; 导入java.io.File; 导入java.io.IOException; 导入javax.imageio.imageio; 导入javax.swing.JFrame; 公共类绘图扩展画布{ 公共静态void main(字符串[]args){ JFrame=新

我正在使用图形库创建图像,并尝试使用BuffereImage和ImageIO保存创建的图像。运行后,我的图像弹出,但保存的图像只是黑色的

import java.awt.*;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
公共类绘图扩展画布{
公共静态void main(字符串[]args){
JFrame=新JFrame(“我的图纸”);
画布=新绘图();
画布。设置大小(400400);
帆布。背景(颜色。青色);
frame.add(画布);
frame.pack();
frame.setVisible(true);
}
公共空间涂料(图g){
矩形bb=新矩形(100100200200);
g、 setColor(颜色为黄色);
试一试{
米奇(g,bb);
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共空心长方体椭圆形(图形g,矩形bb){
g、 椭圆形(bb.x,bb.y,bb.宽度,bb.高度);
g、 setColor(Color.blue);
}
公共无效米奇(图形g,矩形bb)抛出IOException{
boxOval(g,bb);
int dx=bb.width/2;
int dy=bb.高度/2;
g、 setColor(Color.RED);
矩形一半=新矩形(bb.x,bb.y,dx,dy);
半平移(-dx/2,-dy/2);
长方形(g,半);
半平移(dx*2,0);
长方形(g,半);
翻译(dx/10,50);
长方形(g,半);
BuffereImage buff=新的BuffereImage(dx、dy、BuffereImage.TYPE_INT_RGB);
File File=新文件(“mickey.png”);
System.out.println(“保存…”);
write(buff,“png”,文件);
System.out.println(“已保存!”);
}
}
我希望保存到
mickey.png
的图像与我之前在
mickey
方法中绘制的图像相同。

您需要执行以下操作:

    BufferedImage buff = new BufferedImage(dx, dy, BufferedImage.TYPE_INT_RGB);
    this.paint(buff.getGraphics()); // call paint to draw on the image
    File file = new File("mickey.png");
    System.out.println("saving....");
    ImageIO.write(buff, "png", file);
    System.out.println("saved!");
重新排列代码以在mickey()和paint()外部执行保存操作。

您需要执行以下操作:

    BufferedImage buff = new BufferedImage(dx, dy, BufferedImage.TYPE_INT_RGB);
    this.paint(buff.getGraphics()); // call paint to draw on the image
    File file = new File("mickey.png");
    System.out.println("saving....");
    ImageIO.write(buff, "png", file);
    System.out.println("saved!");
重新排列代码,在mickey()和paint()外部进行保存