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

这个错误经常发生,代码如下:


   private  static  byte[] GetBytes (Image image)
        {
            try
            {
                if (image == null) return null;
                using (MemoryStream stream = new MemoryStream())
                    {
                        image .Save(stream, ImageFormat.Jpeg);
                        return stream.GetBuffer();
                    }
            }
            finally
            {
                if(image != null)
                {
                    image.Dispose();
                    image = null;
                }
            }
        }

修改后的代码如下:


   private  static  byte[] GetBytes (Image image)
        {
            try
            {
                if (image == null) return null;
                using(Bitmap bitmap = new Bitmap(image))
                {
                    using (MemoryStream stream = new MemoryStream())
                    {
                        bitmap.Save(stream, ImageFormat.Jpeg);
                        return stream.GetBuffer();
                    }
                }
            }
            finally
            {
                if(image != null)
                {
                    image.Dispose();
                    image = null;
               }
            }
        }

MSDN 解释如下:

Bitmap 对象或一个 图像 对象从一个文件, 构造时该文件仍保留锁定对于对象的生存期。 因此, 无法更改图像并将其保存回它产生相同的文件。

替代方法
•    创建非索引映像。
•    创建索引映像。
这两种情况下, 原始 位图 上调用 Bitmap.Dispose() 方法删除该文件上锁或删除要求, 流或内存保持活动。

创建非索引图像
即使原始映像被索引格式中该方法要求新图像位于每像素 (超过 8 位 -) -, 非索引像素格式。 此变通方法使用 Graphics.DrawImage() 方法来将映像复制到新 位图 对象:
1.    构造从流、 从内存, 或从文件原始 位图 。
2.    创建新 位图 的相同大小, 带有是超过 8 位 - - 像素 (BPP) 每像素格式。
3.    使用 Graphics.FromImage() 方法以获取有关二 位图 Graphics 对象。
4.    用于 Graphics.DrawImage() 绘制首 位图 到二 位图 。
5.    用于 Graphics.Dispose() 处置是 图形 。
6.    用于 Bitmap.Dispose() 是首 位图 处置。

创建索引映像
此解决办法在索引格式创建一个 Bitmap 对象:
1.    构造从流、 从内存, 或从文件原始 位图 。
2.    创建新 位图 具有相同的大小和像素格式作为首 位图 。
3.    使用 Bitmap.LockBits() 方法来锁定整个图像对于两 Bitmap 对象以其本机像素格式。
4.    使用 Marshal.Copy 函数或其他内存复制函数来从首 位图 复制到二 位图 图像位。
5.    使用 Bitmap.UnlockBits() 方法可以解锁两 Bitmap 对象。
6.    用于 Bitmap.Dispose() 是首 位图 处置。

创建非索引图像,例如:

Code
  if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //创建一个bitmap类型的bmp变量来读取文件。
                Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
                //新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
                Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
                //将第一个bmp拷贝到bmp2中
                Graphics draw = Graphics.FromImage(bmp2);
                draw.DrawImage(bmp,0,0);
                pictureBox1.Image = (Image)bmp2 ;//读取bmp2到picturebox
                FILE = openFileDialog1.FileName;
                openFileDialog1.Dispose();
                draw.Dispose();
                bmp.Dispose();//释放bmp文件资源
          }

如果是在Web 程序中注意这些设置:

1. 相应的帐户没有写权限。
解决方法:赋予 NETWORK SERVICE 帐户以写权限。
2. 指定的物理路径不存在。
解决方法:
在调用 Save 方法之前,先判断目录是否存在,若不存在,则创建。
if (!Directory.Exists(dirpath))
Directory.CreateDirectory(dirpath);

转载请注明原创地址:http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html

重新启动IIS.

转载于:https://www.cnblogs.com/songtzu/archive/2013/01/06/2847162.html

GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...相关推荐

  1. GDI+中发生一般性错误的解决办法

    开发的过程中遇到了这个错误想要记录下来! 我是在保存图片文件时遇到的这个错误. 网上也搜了很多资料,试过之后还是会出错,代码其实也都大同小异没有太大区别,先把我遇到问题的经过描述一下: 我要做的是读取 ...

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

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...

  3. 图像对象paip.Image对象出现“对象当前正在其他地方使用或者GDI+中发生一般性错误的解决...

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ paip.Image对象现出"对象以后正在其他地方用使或者GDI+中产生一般性误错的决解 作者Attilax ,   ...

  4. C#界面设计--5--Bitmap.save保存图片时: GDI+ 中发生一般性错误 解决办法

    Bitmap.save保存图片时: GDI+ 中发生一般性错误 解决办法 源程序: var date = DateTime.Now.ToString("yyyy-MM-dd");/ ...

  5. GDI+ 中发生一般性错误(生成验证码时出现的错误)

    我在生成验证码时,出现这样的错误:GDI+ 中发生一般性错误. 怎么解决? 转载于:https://www.cnblogs.com/happyangle/archive/2008/06/11/1217 ...

  6. GDI+中发生一般性错误

    在PictureBox中有一副图,希望保存成图片,用 pictureBox1.Image("c:\\aa.jpg",System.Drawing.Imaging.ImageForm ...

  7. GDI+ 中发生一般性错误

    使用Chartlet时打开页面跳出以下错误: "/"应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息 ...

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

    从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生"GDI+ 中发生一般性错误". public static Sy ...

  9. GDI+中发生一般性错误 以及发布时候需要配置的文件

    mxcms在本地测试完毕.搬家到服务器上,修改测试数据新闻的时候,提示"GDI+中发生一般性错误". 找了下,发现是缩略图的原因. 解决方法:将缩略图文件夹里的文件全部删除. fi ...

最新文章

  1. php运算符的特殊用法
  2. win10右键一直转圈_Win10电脑开机一直转圈无法进入系统的解决方法
  3. finalshell连接失败解决方法_iPhone热点连不上?教你网络连接失败或断线的解决办法...
  4. 三大运营商2月份运营数据发布:超过一半的中国人都在用移动
  5. 什么是网络爬虫python_什么的什可以组什么词语
  6. 交换机 链路层无法udp通讯_一文读懂计算机底层网络原理,包括TCP、UDP、header,什么是包、帧、段等关键问题...
  7. 跟着开源项目学因果推断——whynot(十四)
  8. ubuntu LVS+keepalived 笔记
  9. 纽微特反省:经常跑同一个客户,也没新东西看
  10. android 放大镜功能,Android 做一个放大镜的效果(转)
  11. java 度分秒转换为度_andriod Java中度转度分秒
  12. 8 款好用的 React Admin 管理后台模板推荐
  13. layui 列表 模板
  14. widows 程序无响应判断,程序假死状态
  15. 网络安全学习路线(顶级白帽黑客)
  16. 运行django项目报错Couldn‘t import Django
  17. 文件下载(导出)功能,fileDownload。
  18. 【旅游热点】金秋十月 “额济纳胡杨林”登内蒙古景区热度榜首
  19. linux qq x64,QQ Linux 版时隔多年再次更新,支持 x64、ARM64 等多种架构
  20. Push rejected by evil dragon bureaucrats

热门文章

  1. 巴菲特:人生赢家,都是稳中求生,稳中求胜
  2. C++字符串和数字转换完全攻略
  3. C++文件操作之get/getline(待学)
  4. php7的稳定性,探索PHP7(一)--性能
  5. A Simple Math Problem
  6. atom 代码都是白色 怎么显示颜色_IBC1.0完成,ATOM为什么没涨?
  7. Floating-Rate Note - FRN
  8. java中各种流的详细使用
  9. 如何创建Kafka客户端:Avro Producer和Consumer Client
  10. UVA - 10118 Free Candies 记忆化搜索经典