我有这段代码
private void saveImage()
{
Bitmap bmp1 = new Bitmap(pictureBox.Image);
bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Dispose of the image files.
bmp1.Dispose();
}
我的驱动器“c:\”已经有了 t.jpg 的图像。
我希望每次程序运行时都用新图像替换它。但是出现了GDI +错误
我怎么能解决它?
答案 0 :(得分:34)
如果您的图片已经存在,则必须将其删除。
private void saveImage()
{
Bitmap bmp1 = new Bitmap(pictureBox.Image);
if(System.IO.File.Exists("c:\\t.jpg"))
System.IO.File.Delete("c:\\t.jpg");
bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Dispose of the image files.
bmp1.Dispose();
}
答案 1 :(得分:1)
我想您之前使用Image.Load方法加载了c:\ t.jpg图像。如果是这样,则Image对象将在图像文件上保留一个打开的文件句柄,这意味着该文件无法被覆盖。
与其使用Image.Load来获取原始图像,不如从您创建并处理的FileStream中加载它。
所以,而不是
Image image = Image.Load(@"c:\\t.jpg");
执行以下操作:
using(FileStream fs = new FileStream(@"c:\\t.jpg", FileMode.Open))
{
pictureBox.Image = Image.FromStream(fs);
fs.Close();
}
文件句柄已释放,因此可以成功使用Bitmap.Save覆盖文件。因此,您在问题中提供的代码应该可以正常工作。保存前无需删除原始文件或处理图像。
答案 2 :(得分:0)
private void saveImage(Image file, string filename){
try
{
if(Directory.Exists("filepath"+filename))
{
file.Dispose();
}
else
{
Directory.CreateDirectory("filepath"+filename);
file.Save("filepath" + filename, Imageformat.Jpeg);
}
}
finally
{
file.Dispose();
}
}
这个对我有用。