GDI+ 发生一般性错误解决办法

错误的代码g对象继续占用 未释放资源 如果路径不一样 没问题 相同路径 获取图片进行

缩略会造成GDI错误

  1 /// <summary>
  2         /// 生成缩略图
  3         /// </summary>
  4         /// <param name="originalImagePath">源图路径(物理路径)</param>
  5         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
  6         /// <param name="width">缩略图宽度</param>
  7         /// <param name="height">缩略图高度</param>
  8
  9         public void CreateMinImage(string originalImagePath, string thumbnailPath, int width, int height)
 10         {
 11             System.Drawing.Image originalImage = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(originalImagePath));
 12
 13             int towidth = width;
 14             int toheight = height;
 15
 16             int ow = originalImage.Width;
 17             int oh = originalImage.Height;
 18
 19             //新建一个bmp图片
 20             System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
 21
 22             //新建一个画板
 23             System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
 24
 25
 26             //设置高质量插值法
 27             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
 28
 29             //设置高质量,低速度呈现平滑程度
 30             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 31
 32             //清空画布并以透明背景色填充
 33             g.Clear(System.Drawing.Color.Transparent);
 34
 35             //在指定位置并且按指定大小绘制原图片的指定部分
 36             g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight));
 37
 38             try
 39             {
 40                 //以jpg格式保存缩略图
 41                 string FileExt = Path.GetFileNameWithoutExtension(originalImagePath);
 42 //这里报错               bitmap.Save(HttpContext.Current.Server.MapPath(thumbnailPath) + FileExt + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
 43             }
 44             catch (System.Exception e)
 45             {
 46                 throw e;
 47             }
 48             finally
 49             {
 50                 originalImage.Dispose();
 51                 bitmap.Dispose();
 52                 g.Dispose();
 53             }
 54
 55         }
 56
 57 //修改后的代码
 58 public void CreateMinImageAndDel(string originalImagePath, string thumbnailPath, int width, int height)
 59         {
 60             Graphics draw = null;
 61             string FileExt = "";
 62
 63             System.Drawing.Image originalImage = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(originalImagePath));
 64
 65             int towidth = width;
 66             int toheight = height;
 67
 68             int ow = originalImage.Width;
 69             int oh = originalImage.Height;
 70
 71             //新建一个bmp图片
 72             System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
 73             System.Drawing.Image bitmap2 = new System.Drawing.Bitmap(towidth, toheight);
 74             //新建一个画板
 75             System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
 76
 77
 78             //设置高质量插值法
 79             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
 80
 81             //设置高质量,低速度呈现平滑程度
 82             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 83
 84             //清空画布并以透明背景色填充
 85             g.Clear(System.Drawing.Color.Transparent);
 86
 87             //在指定位置并且按指定大小绘制原图片的指定部分
 88             g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight));
 89
 90             try
 91             {
 92                 //以jpg格式保存缩略图
 93                 FileExt = Path.GetFileNameWithoutExtension(originalImagePath);
 94           //用新建立的image对象拷贝bitmap对象 让g对象可以释放资源
 95                 draw = Graphics.FromImage(bitmap2);
 96                 draw.DrawImage(bitmap, 0, 0);
 97
 98             }
 99             catch (System.Exception e)
100             {
101                 throw e;
102             }
103             finally
104             {
105                 originalImage.Dispose();
106                 bitmap.Dispose();
107                 g.Dispose();
108           //保存调整在这里即可
109                 bitmap2.Save(HttpContext.Current.Server.MapPath(thumbnailPath) + FileExt + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
110             }
111         }
时间: 2024-10-10 04:47:24

GDI+ 发生一般性错误解决办法的相关文章

“GDI+ 中发生一般性错误” 解决方法

System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误 相应的帐户没有写权限,赋予帐户写入权限

GDI+中发生一般性错误的解决办法(转载)

今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误"的异常.于是开始"摆渡",并寻找到了解决办法:赋予 NETWORK SERVICE 帐户以写权限. 以下为晚上寻找到的资料: 在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致"GDI+ 中发生一般性错误"的发生,通常有以下三种

[转]GDI+ 中发生一般性错误

在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三种原因:1. 相应的帐户没有写权限.解决方法:赋予 NETWORK SERVICE 帐户以写权限.2. 指定的物理路径不存在.解决方法:在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建.if (!Directory.Exists(dirpath))Directory.CreateDirectory(dirpath);3. 保存的文件已存在并因

[转载]GDI+中发生一般性错误

注:第一次写博客,把自己遇到的问题和收集的资料记录在博客上.在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致"GDI+ 中发生一般性错误"的发生,通常有以下三种原因:1. 相应的帐户没有写权限.解决方法:赋予 NETWORK SERVICE 帐户以写权限.2. 指定的物理路径不存在.解决方法:在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建.if (!Directory.Exists(dirpath))Directory.Cre

一、GDI+中发生一般性错误——C#踩坑记

处理图片的时候发生 GDI+中发生一般性错误 我知道的原因有4个 1. 相应的帐户没有写权限. 解决方法:增加权限,赋予 NETWORK SERVICE 帐户以写权限. 2. 指定的物理路径不存在.解决方法:在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建. 网络中应该使用虚拟路径,记得加“~/” if (!Directory.Exists(dirpath))Directory.CreateDirectory(dirpath); 3. 保存的文件已存在并因某种原因被锁定.解决方法

Image.Save()发生“GDI+ 中发生一般性错误”

从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生“GDI+ 中发生一般性错误”.public static System.Drawing.Image ToImage(byte[]bytes){    System.IO.Stream ms = new System.IO.MemoryStream(bytes);    System.Drawing.Image image =System.Drawing.Image.FromStre

GDI+ 中发生一般性错误。

“/wechat”应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误. 源错误: 行 37: } 行 38: string savePath = string.Format("{0}/storebook.png"

GDI+中发生一般性错误之文件被占用

有多种原因可能导致这个异常出现,比如创建文件的权限不足.文件被占用等. 这里提供一个使用Stream读取图片避免文件被占用的方法. public Image GetImageFromStream(string fileName) { Image img = null; try { FileStream fs = File.OpenRead(fileName); img = Image.FromStream(fs); fs.Close(); } catch (IOException ie) { M

《BI项目笔记》SSAS部署时发生的问题——元数据管理器中存在错误 解决办法

原文:<BI项目笔记>SSAS部署时发生的问题--元数据管理器中存在错误 解决办法 在生成和部署期间出错.是否继续?解决办法: 用Microsoft SQL Server Management Studio 连接Analysis Services 然后删除多维数据库,重新布署.这样就OK的.