C# GDI+发生一般性错误(A generic error occurred in GDI+))
解决思路:
1. 因为 .net GDI+ 是对底层 的封装。
所以可以尝试用 Marshal.GetLastWin32Error();函数获得底层错误代码。
try{
image.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
}
catch (Exception exp)
{
var code = Marshal.GetLastWin32Error();
throw new Exception(exp.Message + ":" + code.ToString(), exp);
}
2. 查看错误代码含义
https://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
ERROR_PATH_NOT_FOUND
- 3 (0x3)
- The system cannot find the path specified.
- 原因:save的目录不存在。
- 解决:手动或通过程序建save的目录。
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
原因: save的目录没有权限
解决: 查看目录的权限
ERROR_SHARING_VIOLATION
- 32 (0x20)
The process cannot access the file because it is being used by another process.
原因:
从一个文件构造的Bitmap 对象或一个 Image 对象, 在该对象的生存期内该文件处于锁定状态。 因此, 在没有释放这个Image或Bitmap对象前,无法更改图像并将其保存回原文件。
解决方法:
解决:
构造一个新的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();
3.其他问题
a. Image 对应的Stream被Dispose了。
b. 保存成png时报错。
C# GDI+发生一般性错误(A generic error occurred in GDI+))的更多相关文章
- GDI+一般性错误(A generic error occurred in GDI+)
1.GDI+的前世今生 GDI+全称图形设备接口,Graphics Device Interface (GDI) ,他的爸爸叫做GDI, 用C写的.Windows XP出来以后用C++重新写了一下,变 ...
- A generic error occurred in GDI+的解决方案
转自智慧光原文A generic error occurred in GDI+. 解决方法 使用image1.RotateFlip(RotateFlipType.Rotate90FlipNone)方法 ...
- GDI+ 发生一般性错误解决办法
错误的代码g对象继续占用 未释放资源 如果路径不一样 没问题 相同路径 获取图片进行 缩略会造成GDI错误 /// <summary> /// 生成缩略图 /// </summary ...
- Exception:A generic error occurred in GDI+
分析: 一般出现这种问题都是GDI和原数据(比如Bitmap)是同一个实体,只不过是两个引用.换句话说就是这个路径的图片被GDI占用啦. 还有一种情况是路径有问题. 场景一: WPF的Image控件的 ...
- A generic error occurred in GDI+. 上传图片报错
代码就不说了,因为本地测试 ok, 服务端 就不行 ,服务器 环境 阿里云 win2008 r2 64 位 原因 是我没有这是 文件加权限 : 左边 的 少了 权限~ 代码 :含义是 网络图片 裁剪 ...
- C# .NET开发图形图像程序时提示"GDI+ 中发生一般性错误"
今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html).顿时感觉好 ...
- GDI+中发生一般性错误的解决办法(转帖)
今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...
- GDI+ 中发生一般性错误。
GDI+ 中发生一般性错误. “/wechat”应用程序中的服务器错误. GDI+ 中发生一般性错误. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及 ...
- [转载]GDI+中发生一般性错误
注:第一次写博客,把自己遇到的问题和收集的资料记录在博客上.在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发生一般性错误”的发生,通常有以下三 ...
随机推荐
- T-SQL存储过程、游标
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...
- java连接mysql步骤
转自:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html JDBC连接mysql数据库 •创建一个以JDBC连接数据库的程 ...
- Bash:-3次错误输入退出脚本
Limit_Condition() { let count++ ]];then echo "超过3次机会,自动关停脚本" exit fi Comfirm() { count= wh ...
- <基督教福音视频>
<信耶稣还是罪人吗?>全集 http://www.youku.com/playlist_show/id_18458615.html <因信称义>全集 http://www.yo ...
- Linux时间戳和标准时间的互转
转http://hi.baidu.com/taolizao/blog/item/2d6f9a1ba50ef3eae0fe0ba9.html 在LINUX系统中,有许多场合都使用时间戳的方式表示时间 ...
- IIS出现Service Unavailable 错误
IIS访问操作出现以下问题时要如何解决:
- Candies-POJ3159差分约束
Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...
- 一些Unity基础操作的性能测试
从以前一个文章转移过来的内容,以后会进一步进行测试 内容 毫秒数(Editor) 毫秒数(Build PC) 加减内部变量 4ms 1ms new List<int>() 559m ...
- animation 动画重播
<style> div, body{ margin: 0; padding: 0; } body{ background-color: #333; } @keyframes running ...
- 开始学习Angular Mobile UI
介绍 Mobile AngularUI 可以让你使用Twitter Booostrap和Angular JS来开发混合移动App和桌面应用程序. 下面是是一些贯穿整个项目的步骤,我强烈的建议你去继续阅 ...