资源描述:
《alpha 混合线条和填充》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Alpha混合线条和填充.NETFramework4.5其他版本在GDI+中,颜色为32位值:alpha、红色、绿色和蓝色各8位。 alpha值指示颜色的透明度,即颜色与背景色的混合程度。 Alpha值的范围是0到255,其中0表示完全透明的颜色,255表示完全不透明的颜色。Alpha混合是源颜色数据和背景颜色数据之间逐个像素的混合。 给定源颜色的三个分量(红色、绿色和蓝色)都按照以下公式与背景颜色的相应分量混合:显示颜色=源颜色×alpha/255+背景颜色×(255-alpha)/255例如,假设源颜色的红色分量是150,背景颜色的红色分量是100。 如果alpha值是200
2、,则结果颜色的红色分量按以下公式计算:150×200/255+100×(255–200)/255=139本节内容如何:绘制不透明和半透明的线条演示如何绘制alpha混合线条。如何:用不透明和半透明的画笔绘制解释如何使用画笔进行alpha混合。如何:使用复合模式控制Alpha混合描述如何使用 CompositingMode 控制alpha混合。如何:使用颜色矩阵设置图像中的Alpha值解释如何使用 ColorMatrix 对象控制alpha混合。如何:绘制不透明和半透明的线条.NETFramework4.5其他版本在绘制线条时,必须将 Pen 对象传递给 Graphics 类的 D
3、rawLine 方法。 Pen 构造函数的参数之一是 Color 对象。 若要绘制不透明的线条,请将颜色的alpha分量设置为255。 要绘制半透明的线条,请将alpha分量设置为1到254之间的任意值。在背景上绘制半透明的线条时,线条的颜色与背景的颜色相混合。 alpha分量指定线条颜色和背景颜色的混合方式:alpha值越接近于0,背景颜色的权重越大;alpha值越接近于255,线条颜色的权重越大。示例下面的示例先绘制位图,然后以该位图作为背景再绘制三条线条。 第一个线条的alpha分量的值是255,因此它是不透明的。 第二个和第三个线条的alpha分量的值为128,因此它们是
4、半透明的,您可透过线条看到背景图像。 用于设置 CompositingQuality 属性的语句导致在混合第三个线条时伴随灰度校正。下面的插图显示以下代码的输出。C#VBDimbitmapAsNewBitmap("Texture1.jpg")e.Graphics.DrawImage(bitmap,10,5,bitmap.Width,bitmap.Height)DimopaquePenAsNewPen(Color.FromArgb(255,0,0,255),15)DimsemiTransPenAsNewPen(Color.FromArgb(128,0,0,255),15)e.Gra
5、phics.DrawLine(opaquePen,0,20,100,20)e.Graphics.DrawLine(semiTransPen,0,40,100,40)e.Graphics.CompositingQuality=CompositingQuality.GammaCorrectede.Graphics.DrawLine(semiTransPen,0,60,100,60)编译代码前面的示例是为使用Windows窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgse。如何:用不透明和半透明的画笔绘制.NETFramework4.5其他版本在填充形
6、状时,必须将 Brush 对象传递给 Graphics 类的某个填充方法。 SolidBrush 构造函数的一个参数是 Color 对象。 若要填充不透明的形状,请将颜色的alpha分量设置为255。 若要填充半透明形状,请将alpha分量设置为1到254之间的任意值。在填充半透明形状时,形状的颜色与背景的颜色相混合。 Alpha分量指定形状颜色和背景颜色的混合方式。Alpha值越接近于0,背景颜色的权重越大;Alpha值越接近于255,形状颜色的权重越大。示例下面的示例绘制一个位图,然后填充三个遮盖该位图的椭圆。 第一个椭圆的alpha分量的值是255,因此它是不透明的。 第二
7、个和第三个椭圆的alpha分量是128,因此它们是半透明的,所以您可透过椭圆看到背景图像。设置 CompositingQuality 属性的调用导致在混合第三个椭圆的同时进行灰度校正。下面的插图显示以下代码的输出。C#VBDimbitmapAsNewBitmap("Texture1.jpg")e.Graphics.DrawImage(bitmap,50,50,bitmap.Width,bitmap.Height)DimopaqueBrushAsNewSolidBrush(Colo