GDI+位图透明

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

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

    代码如下:

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

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

20ExpandedSubBlockEnd.gif    }

21InBlock.gif 
22InBlock.gif    return _newImg;
23ExpandedBlockEnd.gif}

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

30 None.gif private   static   float [][] CreateAlphaMatrix( float  alpha)
31 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
32InBlock.gif    if (alpha > 1)
33InBlock.gif        alpha = 1;
34InBlock.gif 
35InBlock.gif    if (alpha < 0)
36InBlock.gif        alpha = 0;
37InBlock.gif 
38InBlock.gif    float[][] _matrix =
39ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif
40ExpandedSubBlockStart.gifContractedSubBlock.gif                new float[] dot.gif{10000},
41ExpandedSubBlockStart.gifContractedSubBlock.gif                new float[] dot.gif{01000},
42ExpandedSubBlockStart.gifContractedSubBlock.gif                new float[] dot.gif{00100},
43ExpandedSubBlockStart.gifContractedSubBlock.gif                new float[] dot.gif{000, alpha, 0},
44ExpandedSubBlockStart.gifContractedSubBlock.gif                new float[] dot.gif{00001}
45ExpandedSubBlockEnd.gif    }
;
46InBlock.gif 
47InBlock.gif    return _matrix;
48ExpandedBlockEnd.gif}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值