C#不使用Dialog保存图像

时间:2013-04-08 18:47:18

标签: c#

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

为了让你了解应用程序的功能,我提供了screenshot here,按下添加团队后,所有文本框数据都会写入文本文件,我希望图像自动保存到预定义的文件夹“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之类的模糊错误是如此令人头疼!


亚历克斯。

3 个答案:

答案 0 :(得分:2)

试试这个方法

 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);


    }

答案 1 :(得分:1)

请参阅我之前发布的类似问题的帖子......

A Generic error occurred in GDI+ in Bitmap.Save method

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

  

从a构造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将图片加载到图片中 - 因此首先不会锁定流...

答案 2 :(得分:1)

那是因为您没有为保存功能指定文件名!

看看这个:

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

现在它正常运作