GDI+位图透明

    前段时间做了一个图片透明画的代码,基本思路是使用ColorMatrix设置位图的Alpha通道,使其透明化。这类代码可能高手都懒得写,像我等菜鸟要用时就得费一番周则研究了,所以我把做完的代码发上来,大家有需要用的就拿去用,如果高兴的话还可以评论里说声加油之类的话,呵呵。

    利用ColorMatrix还可以调整整个位图的RGB值,看各位需要发挥了。

    代码如下:

 1///<summary>
 2/// 改变图像透明度(真透明)
 3/// </summary>
 4/// <param name="img">所要转变的图像</param>
 5/// <param name="alpha">透明度,最大为1,最小为0</param>
 6/// <returns>改变后的图像</returns>

 7public static Bitmap VitrificationImage(Image img, float alpha)
 8{
 9    Bitmap _newImg = new Bitmap(img.Width, img.Height);
10 
11    using (Graphics _g = Graphics.FromImage(_newImg))
12    {
13        using (ImageAttributes _imageAttrs = new ImageAttributes())
14        {
15            _imageAttrs.SetColorMatrix(new ColorMatrix(CreateAlphaMatrix(alpha)));
16 
17            _g.DrawImage(img, new Rectangle(00, img.Width, img.Height),
18                        11, img.Width, img.Height, GraphicsUnit.Pixel, _imageAttrs);
19        }

20    }

21 
22    return _newImg;
23}

24 
25///<summary>
26/// 创建用于改变图像透明度的颜色矩阵
27/// </summary>
28/// <param name="alpha">所要设置的透明度</param>
29/// <returns>返回用于图像转换的颜色矩阵</returns>

30private static float[][] CreateAlphaMatrix(float alpha)
31{
32    if (alpha > 1)
33        alpha = 1;
34 
35    if (alpha < 0)
36        alpha = 0;
37 
38    float[][] _matrix =
39    
40                new float[] {10000},
41                new float[] {01000},
42                new float[] {00100},
43                new float[] {000, alpha, 0},
44                new float[] {00001}
45    }
;
46 
47    return _matrix;
48}
posted @ 2007-05-23 17:35  至尊王者  阅读(2820)  评论(3编辑  收藏  举报