2

您好,我的后续函数有问题,应该将转发的 bufferedImage 保存在磁盘上。当我运行此代码时,没有异常抛出没有问题,BufferedImage 被传输到 ImageIO.write(img, ext ,fileToSave) 文件已创建,ext 正确但我的磁盘上没有图像!几个小时后,我不知道会出什么问题。也许许可?但我有它在磁盘上读/写。

  public boolean SaveImage(BufferedImage img)
{
    JFileChooser FC=new JFileChooser("C:/");
    FC.addChoosableFileFilter(new jpgSaveFilter());
    FC.addChoosableFileFilter(new jpegSaveFilter());
    FC.addChoosableFileFilter(new PngSaveFilter());
    FC.addChoosableFileFilter(new gifSaveFilter());
    FC.addChoosableFileFilter(new BMPSaveFilter());
    FC.addChoosableFileFilter(new wbmpSaveFilter()); 

    int retrival=FC.showSaveDialog(null);

    if (retrival == FC.APPROVE_OPTION) 
       {

            String ext="";

            String extension=FC.getFileFilter().getDescription();

           if(extension.equals("*.jpg,*.JPG"))
          { 
              ext=".jpg";
          }
          if(extension.equals("*.png,*.PNG"))
          { 
              ext=".png";
          }
          if(extension.equals("*.gif,*.GIF"))
          { 
              ext=".gif";
          }
          if(extension.equals("*.wbmp,*.WBMP"))
          { 
              ext=".wbmp";
          }
          if(extension.equals("*.jpeg,*.JPEG"))
          { 
              ext=".jpeg";
          }
          if(extension.equals("*.bmp,*.BMP"))
          { 
              ext=".bmp";
          }

          File fileToSave = FC.getSelectedFile();
          try{
              ImageIO.write(img, ext ,fileToSave);

          }
          catch (IOException e) {
                e.printStackTrace();
            }
          catch(Exception ex)
          {
              System.out.println(ex.getMessage());
              return false;
          }
          return true;
       }
    return false;
}

感谢帮助!

4

3 回答 3

5

问题是您将文件格式指定为 ext

有效地你的说法

ImageIO.write(img, ".jpg" ,fileToSave)

您需要提供它,以便它评估为

ImageIO.write(img, "jpg" ,fileToSave)
于 2012-08-01T09:55:33.390 回答
2

ImageIO.write 中的扩展名应该是"PNG", "JPG". 没有重点。

而且这种if (extension.equals("..."))方法非常糟糕。确保您确实提供了扩展。IE:至少其中一个 if 成功了。尝试ext在写入之前打印它,以检查它是否具有正确的值。

System.out.println("Extension: " + ext);

哦,javax.imageio只支持 PNG、JPG、JPEG(和 GIF 只读)。要动态获取支持的格式列表,请使用:

ImageIO.getWriterFormatNames();
于 2012-08-01T09:53:21.487 回答
0

错误可能在这里: JFileChooser FC=new JFileChooser("C:/"); 将文件路径更改为“C:\”(或双反斜杠)

于 2012-08-01T10:05:33.307 回答