加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#中图片与BASE64码互相转换

发布时间:2020-12-16 01:25:34 所属栏目:百科 来源:网络整理
导读:1 .GDI+ 的前世今生 GDI+ 全称图形设备接口, Graphics Device Interface ?(GDI)? ,他的爸爸叫做GDI,? 用C 写的。Windows XP出来以后 用C++重新写了一下,变成了GDI+。从.NET Framework 1.0 开始,GDI+ 就被正式封装在了.NET Framework 里面,并被广泛地应

1.GDI+的前世今生

GDI+全称图形设备接口,Graphics Device Interface?(GDI)?,他的爸爸叫做GDI,?用C写的。Windows XP出来以后用C++重新写了一下,变成了GDI+。从.NET Framework 1.0开始,GDI+就被正式封装在了.NET Framework里面,并被广泛地应用到了所有和图形图像相关的程序中。不幸的是,这个GDI+引入了微软有史以来最大的2个patch,造成了Microsoft IT,Support,Developer,Tester的无数麻烦。[1][2]

GDI+没有用显卡加速,所以Windows Vista推荐用Windows Display Driver Model (WDDM)了,支持渲染,3D加速。不过普通的应用程序,用GDI/GDI+其实是完全足够了,所以GDI+是在微软平台上开发图形图像程序的最好选择了。至少现在没有听说微软准备重新写GDI

GDI+?可以用来做图形处理,也可以做图像处理。这里只分析几个使用.NET Framework容易出错的地方。?

2. GDI+一般性错误(A generic error occurred in GDI+)

这是使用GDI+的时候最滑稽的一个Exception,里面啥信息都没有。对于刚刚开始使用.NET Framework开发者来说,很难发现这个问题到底是为什么。

我们先来看看下面一段代码?

?

string?fileName?=?"sample.jpg";
Bitmap?bmp?=?new?Bitmap(fileName);
bmp.Save(fileName,?ImageFormat.Jpeg);

这段代码的目的是要打开一个Bitmap,然后保存。可惜这段代码一定会给你一个GDI+一般性错误:

System.Runtime.InteropServices.ExternalException

其中的Error Code是0x80004005,innerException是空。如果你查Windows的Error Code表,会发现这个错误原因是“Unspecified Error”,还是什么都不知道。这其实是.NET Framework封装不好的问题,我们可以调用

Marshal.GetLastWin32Error()

拿到Win32的Error,?32。这个错误代码就有点信息量了,在winerror.h里面,我们可以找到下面的定义:

//
//?MessageId:?ERROR_SHARING_VIOLATION
//
//?MessageText:
//
//??The?process?cannot?access?the?file?because?it?is?being?used?by?another?process.
//
#define?ERROR_SHARING_VIOLATION??????????32L

??

原来是文件不能写。其实MSDN里面有一句话,The file remains?locked?until the Bitmap is disposed。所以文件读取以后是锁着的,没有办法写。那如果我想做点改动然后再保存原来的文件怎么办呢?

这里有个土办法可以搞定这个问题?

Bitmap?bmpTemp?=?new?Bitmap(image);
Bitmap?bmp?=?new?Bitmap(bmpTemp);
bmpTemp.Dispose();
bmp.Save(image,?ImageFormat.Jpeg);

?

只要把当前的图像复制一份,然后把旧的Dispose掉,那个文件就不被锁住了,这样就可以放心覆盖原始文件了。

想想如果你要用GDI+写一个Painter,很容易你就会遇到这个问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读