我写了一个上传图片,生成缩略图+水印的方法,有时候正常,有时候老报这个错:GUI-发生一般性错误和报内存不足,谢谢方法代码如下:
    /// <summary>
    /// 生成缩略图
    /// </summary>
    /// <param name="picname">不用路径</param>
    public static void saveImg_small(string picname,string newname)
    {
        Image.GetThumbnailImageAbort ig = null;
        Image img = Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath+picname));
        if (img.Width > 0 && img.Height > 0)
        {
            Graphics gp = Graphics.FromImage(img);
            gp.DrawString("http://www.dog52.com", new Font("宋体", 14), new System.Drawing.SolidBrush(Color.Blue), img.Width - 210, img.Height - 30);
            img.Save(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath + newname));
            gp.Dispose();
            Image smallimg = img.GetThumbnailImage(130, 100, ig, IntPtr.Zero);
            if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath + "/small/")))
            {
                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath + "/small/"));
            }
            smallimg.Save(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath + "/small/" + newname));
            smallimg.Dispose();
        }
        img.Dispose();
        File.Delete(System.Web.HttpContext.Current.Server.MapPath(DCache.mycache.getsetsite().Upimagepath + picname));
    }

解决方案 »

  1.   


    从一个文件构造的Bitmap 对象或一个 Image 对象, 在该对象的生存期内该文件处于锁定状态。 因此, 在没有释放这个对象前,无法更改图像并将其保存回原文件。
         解决方法如下:
         构造一个新的Image对象,然后把原来的Image对象中的图象通过Graphics的DrawImage()方法,拷贝到新Image对象中,最后通过Dispose()方法释放员来的Image对象:
                    Image image = new Bitmap ( openFileDialog1 . FileName ); 
                    //新建第二个Image类型的变量newImage,这里是根据程序需要设置自己设置。
                    Image newImage = new Bitmap ( 800 , 600 ); 
                    //将第一个bmp拷贝到bmp2中
                    Graphics draw = Graphics . FromImage ( newImage); 
                    draw . DrawImage ( image , 0 , 0 ); 
                    //释放第一个Image对象
                    image.Dispose();
                    newImage.Save(openFileDialog1.FileName);
           你试试看!
      

  2.   

    相应的帐户没有写权限。  
    指定的物理路径不存在。   
    保存的文件已存在并因某种原因被锁定。  
    在代码中使用 using 语句,释放 Image 对象所使用的所有资源。