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+ 中发生一般性错误”的发生,通常有以下三 ...
随机推荐
- 关于区域性网站CMS的一些个人看法
最近了解了几款国外开源CMS,与现有国内客户需求及业务习惯,结论如下:1.国人的习惯,有后台管理和会员管理2种,而老外大部分开源系统都是一个管理即前台管理,而且大部分架构是固定死的,如果在想抽出一个后 ...
- Windows Azure Virtual Machine 之用程序控制Azure VM
我们在很多时候可能会需要用程序来控制VM的创建,删除工作. 而在这些工作之中,用程序创建一个VM将会是一个非常复杂的过程,因为他涉及到很多步骤. 具体步骤如下 1 创建一个Hosted cloud s ...
- centos 配置 ssl服务
使用的是appach 2.4.10 版本 各个版本配置不同 1.首先修改httpd.conf 文件 appach 安装目录下的 conf文件夹中找到 #LoadModule socache_shmcb ...
- 一次APP测试的感悟
项目经理担责任.产品担责任.测试只需要把测试中发现的问题展示出来.如实反应问题.谁担责任谁有权利决定上不上线.所以他们直接绕过了测试.APP的上线让我学到了很多东西,见识了很多东西,也感悟了很多.这是 ...
- Spring之ClassPathResource加载资源文件
先看Demo: 1 @Test 2 public void testClassPathResource() throws IOException { 3 Resource res = new Clas ...
- .md文件的语法
md全称是Macdown,.md文件可以当记事本一样使用,作为编辑软件,还可以自己添加样式,图片,链接等,可以用记事本打开,也可以保持样式排版转换为html文件,语法比较简单..md除了编辑容易的优势 ...
- Volley 实现原理图
1.启动requestQueue 2. 添加请求 3. 启动cacheDispatcher 4.启动networkDispatcher 5. 数据分发
- 我所理解的ECMAScript、DOM、BOM---写给新手们
像很多新手一样,我知道js有三部分组成,即ECMAScript.DOM.BOM三部分组成,ECMAScript是核心解释器.DOM(Document Object Model)是文档对象模型.BOM( ...
- [TCPIP] 分层 Note
TCP/IP 分层 TCP/IP是一组不同层次上的多个协议的组合. 通常被分为:链路层.网络层.运输层.应用层 1. 链路层(数据链路层 或 网络接口层) 通常包括操作系统中的设备驱动程序和计算机中 ...
- CentOS 7 下,如何设置DNS服务器
在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...