读书人

图像alpha 混合有关问题

发布时间: 2012-09-14 23:00:49 作者: rapoo

图像alpha 混合问题
先上图:

正如图片所示的原因,我把图片用颜色矩阵处理了,设置了alpha 为100,最后绘制上去的。

现在我这有个小问题:

让图片的一定的高度的部分的 alpha 为255,即不进行透明处理,下面的部分进行透明处理,贴下我的代码:
定义一个函数,最后调用这个函数就可以了

C# code
 private void DrawBackgroundImg(Graphics g, Bitmap bmp, byte alpha, int alphaHeight)        {                        //图片的大小            int iWidth = bmp.Width;            int iHeight = bmp.Height;            int myAlpha = 0;            Color color, colorTemp;            for (int iRow = 0; iRow < iHeight; iRow++)            {                for (int iColumn = 0; iColumn < iWidth; iColumn++)                {                    color = bmp.GetPixel(iColumn,iRow);                    if (iRow > alphaHeight)                    {                        myAlpha = alpha;                    }                    else                    {                        myAlpha = 255;                    }                    colorTemp = Color.FromArgb(myAlpha,color);                    bmp.SetPixel(iColumn,iRow,colorTemp);                                 }            }            //绘制图形            g.DrawImage(bmp, this.ClientRectangle, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);        }


运行发现这个效率实在是不敢恭维了,有没有一种快速高效的方法来实现这种操作?还望各位高手指教。

[解决办法]
看一下这个,这个是指针法,速度很快,你要用,就在函数里多写一个位置x,y的判断就行了,判断什么位置以下使用透明处理!!!http://dongtingyueh.blog.163.com/blog/static/46194532012113104333278/
[解决办法]
1把原图分为上下两部分
2根据上下两部分坐标和长宽建立两个矩形框
3利用颜色矩阵透明化每一个部分,然后画到新图里
C# code
//以纵坐标100px为分界线            int below100px = 100;            //原图            Image imageSrc = new Bitmap(@"xxxxxx");            //新图,在新图上画原图的两个部分            Image imageNew = new Bitmap(imageSrc.Width, imageSrc.Height);            //第一部分建立高below100px,坐标为(0,0)的矩形方框            Rectangle part1 = new Rectangle(0, 0, imageSrc.Width, below100px);            //第二部分建立高imageSrc.Width-below100px,坐标为(0,below100px)的矩形方框            Rectangle part2 = new Rectangle(0, below100px, imageSrc.Width, imageSrc.Height - below100px);            //将原图第一部分设置透明度后画到新图中            Graphics gii = Graphics.FromImage(imageNew);            gii.DrawImage(imageSrc, part1, 0, 0, imageSrc.Width, below100px, GraphicsUnit.Pixel, GetImageAttributes(0.9f));            gii.Dispose();            //将原图第二部分设置透明度后画到新图中            Graphics giii = Graphics.FromImage(imageNew);            giii.DrawImage(imageSrc, part2, 0, below100px, imageSrc.Width, imageSrc.Height - below100px, GraphicsUnit.Pixel, GetImageAttributes(0.2f));            giii.Dispose(); 

读书人网 >C#

热点推荐