我有代码在屏幕上,在单独的画布中生成一对相关的图形。我希望将这两个图像保存为单独的文件。但是当我使用相同的命令来保存它们时,一个正确保存,另一个保存为空白图像(仅背景颜色)。
画布之间有一个区别:一个是简单的绘制,而另一个是在屏幕外关联的缓冲图像上,因此我可以用鼠标在它上面拖一条线。
设置此缓冲安排的代码是
public class VolCanvas extends Canvas
{
volCnv.createBufferStrategy(2);
offScreen = volCnv.getBufferStrategy();
if (offScreen != null) ofsg = (Graphics2D) offScreen.getDrawGraphics();
// carry out draw operations with ofsg
.
.
.
ofsg.dispose();
offscreen.show();
}
然后在保存到文件之前,我通过函数
进行画布到图像转换private BufferedImage canvasToImage(Canvas cnvs)
{
int w = cnvs.getWidth();
int h = cnvs.getHeight();
int type = BufferedImage.TYPE_INT_RGB;
BufferedImage image = new BufferedImage(w,h,type);
Graphics2D g2 = image.createGraphics();
cnvs.paint(g2);
g2.dispose();
return image;
}//canvasToImage
最后,我在下面显示的ActiionListener中进行保存。
public class SaveChart implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
File outFile;
String outDirName = "", fileName;
BufferedImage outImage;
outImage = canvasToImage(graphCnv);
outDirName = Global.directory + "images/";
outFile = new File(outDirName);
fileDlgBox.setCurrentDirectory(outFile); //setting the target directory
fileDlgBox.showSaveDialog(null);
outFile = fileDlgBox.getSelectedFile();
try
{
ImageIO.write(outImage, "PNG", outFile);
}
catch(IOException ioe){}
outImage = canvasToImage(volCnv);
fileName = outFile.getName();
fileName = outDirName + fileName + "_vol";
outFile = new File(fileName);
try
{
ImageIO.write(outImage, "PNG", outFile);
}
catch(IOException ioe){}
}//actionPerformed
}//SaveChart
关于这最后一个代码,第一个保存工作完美,相关画布只是一个画布。第二个保存功能如前所述,这是与屏幕外组件一起使用的画布。
我为这个问题的长度道歉,但人们通常希望看到所有相关的代码,所以在这里。
提前感谢您对这个谜团的任何见解。
John Doner
答案 0 :(得分:5)
试试这段代码
public void Crear_Imagen(Image image)
{
try
{
BufferedImage bi = (BufferedImage) image;
File outputfile = new File("name.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e)
{
}
}