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. 如何让div水平垂直居中

    引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...

  2. HTML,XML中的转义字符

    HTML中的转义字符 HTML中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & ...

  3. Android: 在 TextView 里使用删除线

    Android: 在 TextView 里使用删除线 分类: Android2014-09-25 13:17 3431人阅读 评论(0) 收藏 举报 以编程的方式添给 TextView 添加删除线: ...

  4. python中保留两位小数

    今天写程序的时候碰到了一个问题关于如何控制浮点数只显示小数点后两位,正常的想法是用round函数,例如 round(a, 2),但是在面对下面的问题时候round就不太好用了 >>> ...

  5. Javascript 数组之判断取值和数组取值

    题目一:var arr = [ '100px', 'abc'-6, [], -98765, 34, -2, 0, '300', , function(){alert(1);}, null, docum ...

  6. [hadoop] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    hadoop 启动后,有警告信息: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform ...

  7. [Hibernate] - Interceptors and events

    Hibernate的拦截器,有很大作用.比如要监控SQL的执行效率等. 参考文档: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/ht ...

  8. Python基础(三)——集合、有序 无序列表、函数、文件操作

    1.Set集合 class set(object): """ set() -> new empty set object set(iterable) -> n ...

  9. Javascript 图片左右滑动与切换

    Html代码 : <div class="v_out v_out_p"> <div class="prev"> <a href=& ...

  10. LitDB笔记

    首先,LitDB存储的不是json,而是bson.这里就有问题了,json是可以无限扩展的,但是bson不行.所有insert的时候需要使用实体类而不是hashtable.但是它又提供了一个叫做Bso ...