当前位置:主页   - 电脑 - 网站开发 - ASP.Net
GDI+中常见的几个问题(5)
来源:网络   作者:   更新时间:2012-05-13
收藏此页】    【字号    】    【打印】    【关闭

  6.透明,半透明和不透明

  这是个大题目。在WinForm/WPF里面我们经常会看到一些关于透明的属性,比如Backcolor里面可以选择Transparant, Form里面有一个叫Opacity的属性。都是和透明以及透明度相关的。在其实是在GDI+应用层上的一些东西,在这里我就不讲了。主要从更基本的地方讲起,其中还包括两块完全不同的内容。

  6.1 Alpha

  我们在上一讲中提到了PixelFormat,当时我们在LockBits的时候把PixelFormat设定成为Format24bppRgb。但是如果你仔细研究,会发现其实里面有各种各样的图片格式,其中有一种叫做Format32bppArgb。这个意思是说除了RGB,在图像中还存在一个通道,叫做A。这个A就是用来描述当前像素是透明,半透明,还是全透明的分量。这个通道是2个叫Catmull和Smith在上世纪70年代初发明的。通过这个分量,我们可以进行alpha混合的一些计算。从而使表面的图像和背景图像混合,从而造成透明半透明的效果。在这种格式下A作为一个byte,取值可以从0到255,那么0表示图像完全透明,则完全不可见,255则表示图像完全不透明。每个像素都可以实现这种透明或者半透明的效果。更详细解释可以参考http://en.wikipedia.org/wiki/Alpha_compositing,或者去买本数字图像处理的书回来看。让我们来看看下面这段代码,这个函数可以把图像变成半透明的。

 1         public unsafe Bitmap GenerateBitmap(byte alpha)
 2         {
 3             FileStream fs = new FileStream(image, FileMode.Open, FileAccess.Read);
 4             Image img = Image.FromStream(fs, false, false);
 5             Bitmap bmp = new Bitmap(img);
 6             img.Dispose();
 7             fs.Close();
 8
 9             int width = bmp.Width;
10             int height = bmp.Height;
11
12             BitmapData bmData = bmp.LockBits(
13                 new Rectangle(0, 0, width, height),
14                 ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
15
16             byte* p = (byte*)bmData.Scan0;
17             int offset = bmData.Stride - width * 4;
18             for (int j = 0; j < height; j++)
19             {
20                 for (int i = 0; i < width; i++)
21                 {
22                     p[3] = alpha;
23                     p += 4;
24                 }
25                 p += offset;
26             }
27
28             bmp.UnlockBits(bmData);
29            
30             return bmp;
31         }
32 

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明