经过一天的疯狂网罗,终于解决了实现GDI+绘图时的半透明处理,首先终于可以松一口气了,呵呵。
记得一年前在做Windows Mobile手的机GDI+时,想实现图片的半透明处理,但是最终以失败告终,因为考虑到要调用Win32的API,而且看着那复杂的计算公式,我放弃了。
今天,同样为了实现半透明的处理,我首先想到的也是Win32的API函数,但是我相信.NET是不会忘记这些重要的函数的,应该是我还没有找到正确的函数罢了,网罗了一天的资料,终于让我在一本《精通.NET核心技术高级特性》这本书里找到了答案。
要实现图像的透明处理首先要了解alpha通道(阿尔法通道),这是一个8为的灰度通道,用来记录透明度的。也是现在的32位真彩色中的一个通过,32位真彩色其实就是在24位真彩色(由R,G,B三基色构成,每个颜色值占8位)的基础上增加了一个alpha通道。当两个图像之间进行重叠时,其实是一张图像覆盖了另外一张图像,那么如何能够呈现出一个透明的效果的呢,这时候就要借助alpha这个通道的值了,当两个图像重叠之后若要实现透明处理,则新的像素值应该是源像素值*(alpha/255)+背景像素*(255-alpha)/255。这样处理之后的图片就会呈现出透明的效果了,有兴趣的朋友可以试一试哦~
那么在.NET的GDI+中如何使用alpha通道呢?.NET的GDI+中提供了Color这样的一个类,该类里面包含一个FromArgb的方法,可以从该方法的名字中得之,这是个将alpha,red,green,blue值进行混合的函数,这个函数的返回值就是一个Color类型的,那么拿这个返回的Color去画直线,填充多边形的时候,都会自动与背景色进行alpha混合了,这样就能得到一个0~255之间的透明度了。