C#不使用Dialog保存图像

当用户在表单上按“保存团队”时,我无法将用户上传的图像保存到我的“徽标”文件中。

为了让你了解应用程序的function,我在这里提供了截图 ,按下添加团队后,所有文本框数据都写入文本文件,我希望图像自动保存到预定义的文件夹“logos”中,但是每当我按下保存时,我都会收到GDI ++错误。

在阅读了网上的一些旧线程之后,我发现它可能是由文件权限,文件大小,文件名甚至是开放流等一些内容引起的。

下面是我目前用来保存我的文件的代码,它提示错误:

private void btnAddTeam_Click(object sender, EventArgs e) { //VALIDATION FOR TEXT FILE AND OTHER STUFF HERE... //SAVE THE IMAGE FILE string filePath = picTeamLogo.ImageLocation; Image tempImage = Image.FromFile(filePath); tempImage.Save(@"../logos/"); } 

如果您正在查看屏幕截图,请不要对“arsenal.png”感到困惑。我知道这不是完整的文件路径,它的转换是在另一种方法中处理的,因为只需要将文件名写入文本文件。

如果有人对我出错的地方有任何想法,那么请指出我正确的方向,模糊的错误,如我刚收到的GDI,是如此头疼!

亚历克斯。

那是因为你还没有为保存function指定文件名!

看看这个 :

 string filePath = picTeamLogo.ImageLocation; FileInfo fi = new FileInfo(filePath); Image tempImage = Image.FromFile(fi.FullName); tempImage.Save(@"../logo/" + fi.Name); 

现在它正常工作

试试这个方法

  public void storeFile(FileUpload File, string dirName) { if (!Directory.Exists(MapPath("~/uploads/" + dirName))) { Directory.CreateDirectory(MapPath("~/uploads/" + dirName)); } string saveLocation = MapPath("~/uploads/" + dirName + "/" + Path.GetFileName(File.FileName)); File.SaveAs(saveLocation); } 

对于类似的问题,请参阅我之前的post……

在Bitmap.Save方法中GDI +中发生了一般错误

流保持锁定状态 – 您可以将内存流用作临时位置然后保存。

当从文件构造Bitmap对象或Image对象时,该文件在对象的生命周期内保持锁定状态。 因此,您无法更改图像并将其保存回原始位置的同一文件中。 http://support.microsoft.com/?id=814675

 string outputFileName = "..."; using (MemoryStream memory = new MemoryStream()) { using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite)) { tempImage.Save(memory, ImageFormat.Jpeg); // memory.ToStream(fs) // I think the same byte[] bytes = memory.ToArray(); fs.Write(bytes, 0, bytes.Length); } } 

或者替代方法是通过MemoryStream将图像加载到图像中 – 因此流不会被锁定在第一位……