达达's 胡搞瞎搞工作室

此Blog搬到www.unbe.cn 去了,要找我讨论问题请到我的新Blog

GDI+位图透明

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

    代码如下:

        /// <summary>
        
/// 改变图像透明度(真透明)
        
/// </summary>

        
/// <param name="img">所要转变的图像</param>
        
/// <param name="alpha">透明度,最大为1,最小为0</param>
        
/// <returns>改变后的图像</returns>

        public static Bitmap VitrificationImage(Image img, float alpha)
        
{
            Bitmap _newImg 
= new
 Bitmap(img.Width, img.Height);

            
using (Graphics _g =
 Graphics.FromImage(_newImg))
            
{
                
using (ImageAttributes _imageAttrs = new
 ImageAttributes())
                
{
                    _imageAttrs.SetColorMatrix(
new
 ColorMatrix(CreateAlphaMatrix(alpha)));

                    _g.DrawImage(img, 
new Rectangle(00
, img.Width, img.Height),
                        
11
, img.Width, img.Height, GraphicsUnit.Pixel, _imageAttrs);
                }

            }


            
return _newImg;
        }


        
/// <summary>
        
/// 创建用于改变图像透明度的颜色矩阵
        
/// </summary>

        
/// <param name="alpha">所要设置的透明度</param>
        
/// <returns>返回用于图像转换的颜色矩阵</returns>

        private static float[][] CreateAlphaMatrix(float alpha)
        
{
            
if (alpha > 1
)
                alpha 
= 1
;
            
if (alpha < 0
)
                alpha 
= 0
;

            
float[][] _matrix =

            

                
new float[] {10000}
,
                
new float[] {01000}
,
                
new float[] {00100}
,
                
new float[] {000, alpha, 0}
,
                
new float[] {00001}

            }
;

            
return
 _matrix;
        }

 

posted on 2006-04-26 22:18  BG5SBK  阅读(1764)  评论(17编辑  收藏  举报

导航