Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C中的SaveFileDialog保存为特定文件格式#_C#_Picturebox_Savefiledialog - Fatal编程技术网

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

C# 使用C中的SaveFileDialog保存为特定文件格式#,c#,picturebox,savefiledialog,C#,Picturebox,Savefiledialog,我使用图片框编辑图像,使用文件保存对话框保存图像 我遇到的问题是,无论我选择何种文件格式,该文件都会保存为位图。我在这里做了一些研究,尝试做一些改变,但都不起作用。对话框尝试保存文件5次,然后失败。我的感觉是,我没有成功地选择文件格式/文件扩展名 我尝试了几种不同的方法,但都不管用。我在这里读到关于堆栈溢出的内容,我应该使用(Path.GetExtension(save.FileName)),但编译器拒绝使用Path.GetExtension(当前上下文中不存在路径)。这是我的代码,如果有人能指

我使用图片框编辑图像,使用文件保存对话框保存图像

我遇到的问题是,无论我选择何种文件格式,该文件都会保存为位图。我在这里做了一些研究,尝试做一些改变,但都不起作用。对话框尝试保存文件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中的抖动)


谢谢你

我只是想把对其他人有用的东西和同样的问题一起贴出来。感谢上面所有人的帮助

使用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比TIFs节省的空间稍大,PNG应该小33%,我怀疑这是VisualStudioPNG实现的一个问题。对于任何对真正小型PNG感兴趣的人来说,有一个开源的控制台应用程序叫做PNGcrush

请清理代码并进行调试,看看有什么问题。你测试了5次
OK
1就足够了,用三种不同的方法检查文件扩展名5次只要检查一次OK,获取一次文件名,然后在调试器中检查它的值。如果您有编译器错误,只需通过添加缺少的名称空间或库来修复它。只需在谷歌上搜索路径。GetExtension将显示要使用的名称空间。此外,我认为VisualStudio本身提出了一个修复方案,可以在上下文菜单中添加名称空间。您只需检查一次FilterIndex。你需要检查它的所有分支!另外:您的
子字符串()
是假的,请使用
Path.GetExtension()
还有:您的意思是“else if”,而不仅仅是“if”。Panagiotis Kanavos:我没有意识到Path.GetExtension是一个命名空间问题。我已经上了6周的C#入门课,我们甚至还没有讨论过Windows窗体和控件,我会错过一些对有经验的用户来说显而易见的东西。谢谢你指出这一点。陶:是的,你是对的。我尝试了3种不同的文件扩展名测试方法,这就是为什么我只使用了一次。你总是帮了大忙,谢谢。科赫博士:Path.GetExtension成功了,谢谢。迈克·纳基斯:对,我不应该半睡半醒,谢谢你。