• C# Bitmap Save Generic GDI+ Error


    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 方法会锁住文件的原因及可能的解决方法

     

  • 相关阅读:
    合并区间
    编程团体赛
    寻找数组的中间位置
    翻转链表2
    链表翻转
    CF1237H. Balanced Reversals
    arc108E
    agc028D
    CF1446D. Frequency Problem
    CF1439D. INOI Final Contests
  • 原文地址:https://www.cnblogs.com/Daywei/p/4303145.html
Copyright © 2020-2023  润新知