Java将图像保存到文件问题

时间:2011-03-06 03:09:47

标签: bufferedimage javax.imageio

我有代码在屏幕上,在单独的画布中生成一对相关的图形。我希望将这两个图像保存为单独的文件。但是当我使用相同的命令来保存它们时,一个正确保存,另一个保存为空白图像(仅背景颜色)。

画布之间有一个区别:一个是简单的绘制,而另一个是在屏幕外关联的缓冲图像上,因此我可以用鼠标在它上面拖一条线。

设置此缓冲安排的代码是

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

1 个答案:

答案 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) 
    {
    }
}