Image.Save 方法 (String)

将该 Image 保存到指定的文件或流。

命名空间:  System.Drawing
程序集:  System.Drawing(在 System.Drawing.dll 中)

public void Save(
string filename
)

参数

filename
类型:System.String
字符串,包含要将此 Image 保存到的文件的名称。
异常 条件
ArgumentNullException

filename 为 null.。

ExternalException

该图像以错误的图像格式保存。

- 或 -

该图像被保存到创建该图像的文件

如果图像的文件格式的编码器不存在,则使用可移植网络图形 (PNG) 编码器。 使用 Save 方法将图形图像保存为 Windows 图元文件格式 (WMF) 或增强型图元文件格式 (EMF) 文件时,结果文件将另存为可移植网络图形 (PNG) 文件。 发生此行为是由于 .NET Framework 的 GDI+ 组件没有可用来将文件另存为 .wmf 或 .emf 文件的编码器。

不允许将图像保存到构造该图像的文件,这样会引发异常。

Referencehttp://www.codeproject.com/Questions/52709/C-Bitmap-Save-Generic-GDI-Error

这个网页里解释了为什么会出现这样的问题和怎么解决的。

Refernence: 

GDI+中发生一般性错误

Bitmap构造函数

命名空间:  System.Drawing
程序集:  System.Drawing(在 System.Drawing.dll 中)

1.从指定的现有图像初始化 Bitmap 类的新实例

public Bitmap(
Image original
)

参数

original
类型:System.Drawing.Image
从中创建新 Bitmap 的 Image

2.从指定的文件初始化 Bitmap 类的新实例

public Bitmap(
string filename
)

参数

filename
类型:System.String
位图文件的名称和路径。
异常 条件
FileNotFoundException

找不到指定文件。

文件名和路径可以是相对于应用程序的路径或者是绝对路径。 使用此构造函数打开以下文件格式的图像:BMP、GIF、EXIF、JPG、PNG 和 TIFF。 有关支持的格式的更多信息,请参见位图类型。 在释放 Bitmap 之前,此文件将一直保持锁定状态。

Image.FromFile  一旦使用后,对应的文件在一直调用 其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作).

举例代码

第一段代码
Bitmap bmp = new Bitmap("1.bmp");
bmp.save("1.bmp"); //这里抛出异常“GDI+发生一般错误” 第二段代码
Image img = Image.FomFile("1.bmp");
或 Bitmap img = new Bitmap("1.bmp");
Bitmap bmp = new Bitmap(img)
img.Dispose();
bmp.save("1.bmp"); //而这里却不会 原因:第一段就不用多说了,图像被锁定,不能保存同一文件 第二段虽然1.bmp也被锁定了,但是new Bitmap(img)后是一个新的实例,相当于复制了一份图像。img.Dispose将1.bmp接触锁定释放了。

reference:Image.FromFile 方法会锁住文件的原因及可能的解决方法

 

C# Bitmap Save Generic GDI+ Error的更多相关文章

  1. JMeter导入jmx运行脚本时出现这样的错误jmeter.save.SaveService: Conversion error com.thoughtworks.xstream.converters.ConversionException:

    2016/12/20 13:51:55 ERROR - jmeter.save.SaveService: Conversion error com.thoughtworks.xstream.conve ...

  2. WPF GDI+ bitmap.save 一般性错误

    做水印图片的时候,发现WPF的System.Windows.Shapes类有绘制直线,椭圆等形状.却没有绘字符串的类. 无奈之下又用回GDI+ 发生的GDI+一般性错误初步估计的线程的原因. 在loa ...

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

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

  4. Image.Save出错 GDI 一般错误

    一般是路径问题 需要转化为绝对路径 \转换为/ if (HttpContext.Current!=null) outPath = HttpContext.Current.Server.MapPath( ...

  5. Exception:A generic error occurred in GDI+

    分析: 一般出现这种问题都是GDI和原数据(比如Bitmap)是同一个实体,只不过是两个引用.换句话说就是这个路径的图片被GDI占用啦. 还有一种情况是路径有问题. 场景一: WPF的Image控件的 ...

  6. COM Error Code(HRESULT)部分摘录

    Return value/code Description 0x00030200 STG_S_CONVERTED The underlying file was converted to compou ...

  7. System Error Codes

    很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...

  8. winerror.h中的内容(可以查看last error对应)

    /************************************************************************* ** winerror.h -- error co ...

  9. asp.net GDI+绘制五边形

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

随机推荐

  1. 让PHP代码更危险----使用别的系统命令--如sql语句--exec(),system()方法甚至html的js语句

    如题,所以涉及到别的语言时,程序就可能更加不安全.

  2. C# 二维list

    public class ValueList : List<double> { public ValueList() { } } public ValueList[] valListArr ...

  3. Spring使用拦截器支持国际化(转)

    Spring使用拦截器支持国际化很方便,使用时只需要两个步骤: 一.spring配置 具体配置方式如下: <!-- 资源文件绑定器,文件名称:messages.properties(没有找到时的 ...

  4. Linux-CentOS6.4-PXE-DHCP-FTP

    DHCP服务器地址:192.168.1.100TFTPfFF服务器地址:192.168.1.100FTP服务器地址:192.168.1.100安装树目录:/var/ftp/pub引导程序目录:/var ...

  5. html之dl标签

    用来定义列表之用 通常与dt:定义列表中的项目 dd:描述列表中的项目 示例代码: <dl> <dt>数据库</dt> <dd>oracle</d ...

  6. python之路 之open

    一.open:文件打开操作 文件句柄 = open('文件路径','读写模式') 打开文件的模式有: r:只读,默认(文件不存在则报错) w:只写(文件不存在则自动创建) a:追加(文件不存在则自动创 ...

  7. Extjs4.2.1中的helloworld

    ExtJS最新正式版4.2.1下载地址:http://pan.baidu.com/s/1qWNt2kk (开发api文档:https://github.com/extjs-doc-cn/ext4api ...

  8. get跟post编码--转

    1.Get是用来从服务器上获得数据(没有请求体),而Post是用来向服务器上传递数据(包含请求体). 2.Get将表单中数据的按照variable=value的形式,添加到action(服务)所指向的 ...

  9. mysqlbinlog快速遍历搜索记录 (转)

    目标,开发人员说有个数据莫名其妙添加了,但是不知道是从哪里添加的,而且应用功能里面不应该添加这样的数据,为了查清楚来源,所 以我就准备去binlog里面找了,但是binlog有好几个月的数,我这样一个 ...

  10. Android 服务端开发之开发环境配置

    Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...