图像alpha 混合问题
先上图:
正如图片所示的原因,我把图片用颜色矩阵处理了,设置了alpha 为100,最后绘制上去的。
现在我这有个小问题:
让图片的一定的高度的部分的 alpha 为255,即不进行透明处理,下面的部分进行透明处理,贴下我的代码:
定义一个函数,最后调用这个函数就可以了
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); }
//以纵坐标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();