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

命名空间:  System.Drawing
程序集:  System.Drawing(在 System.Drawing.dll 中) 
public void Save(
	string filename
)

参数

filename
类型:System.String
Image 保存到的文件的名称。
异常 条件
ArgumentNullException

null.。

ExternalException

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

- 或 -

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

发生此行为是由于 .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 中)

新实例

public Bitmap(
	Image original
)

参数

original
类型:System.Drawing.Image
Image。

2.新实例

public Bitmap(
	string filename
)

参数

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

找不到指定文件。

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接触锁定释放了。

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

 

相关文章: