使用C#中的SaveFileDialog保存为特定的文件格式

时间:2015-03-02 11:04:21

标签: c# picturebox savefiledialog

我正在使用图片框来编辑图像,还有一个文件保存对话框来保存图像。

我遇到的问题是,无论我选择哪种文件格式,文件都会保存为位图。我在这里做了一些研究并试图做一些改变,但它们没有用。该对话框尝试将文件保存5次,然后失败。我的感觉是我没有成功获取文件格式/文件扩展名。

我正在尝试几种不同的方法,但它们没有用。我在这里读到了我应该使用的堆栈溢出(Path.GetExtension(save.FileName)),但编译器拒绝Path.GetExtension(当前上下文中不存在路径)。这是我的代码,如果有人能指出我的错误所在,我会很感激。

{
    SaveFileDialog save = new SaveFileDialog();
    save.Filter = "Bitmap files (*.bmp)|*.bmp|JPG files (*.jpg)|*.jpg|GIF files (*.gif)|*.gif|PNG files (*.png)|*.png|TIF files (*.tif)|*.tif|All files (*.*)|*.*";
    save.FilterIndex = 4;
    save.RestoreDirectory = true;
    save.OverwritePrompt = true;
    save.ShowHelp = true;
    save.AddExtension = true;

    if (save.ShowDialog() == DialogResult.OK && save.FilterIndex == 1)  
        pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
    if (save.ShowDialog() == DialogResult.OK &&  save.FileName.Substring(save.FileName.Length - 4) == ".jpg") 
        pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
    if (save.ShowDialog() == DialogResult.OK && save.FileName.Substring(save.FileName.Length - 3) == "gif")
        pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Gif);
    if (save.ShowDialog() == DialogResult.OK && save.FileName.Substring(save.FileName.Length - 3) == "png") 
        pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Png);
    if (save.ShowDialog() == DialogResult.OK && save.FileName.Substring(save.FileName.Length - 3) == "tif")
        pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
    else 
        MessageBox.Show("File Save Error."); 
}

另外,有没有办法在C#中访问文件保存选项(例如,jpg中的子采样或gif中的抖动)?

谢谢

1 个答案:

答案 0 :(得分:0)

只想发布适用于其他任何人同样问题的内容。感谢上面的每个人的帮助。

使用system.IO;

        SaveFileDialog save = new SaveFileDialog();
        save.Filter = "Bitmap files (*.bmp)|*.bmp|JPG files (*.jpg)|*.jpg|GIF files (*.gif)|*.gif|PNG files (*.png)|*.png|TIF files (*.tif)|*.tif|All files (*.*)|*.*";
        save.FilterIndex = 2;
        save.RestoreDirectory = true;
        save.OverwritePrompt = true;
        save.ShowHelp = true;
        save.AddExtension = true;

        if ((save.ShowDialog() == DialogResult.OK))  
            if (Path.GetExtension(save.FileName).ToLower() == ".bmp")
                pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            else if (Path.GetExtension(save.FileName).ToLower() == ".jpg")
                pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            else if (Path.GetExtension(save.FileName).ToLower() == ".gif")
                pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Gif);
            else if (Path.GetExtension(save.FileName).ToLower() == ".png")
                pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Png);
            else if (Path.GetExtension(save.FileName).ToLower() == ".tif")
                pictureBox1.Image.Save(save.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
            else
                MessageBox.Show("File Save Error.");

出于某种原因,PNG比TIF略大,PNG应该小约33%,我怀疑这是Visual Studio PNG实现的一个问题。对于任何对真正小型PNG感兴趣的人,都有一个名为PNGcrush的开源控制台应用程序。