前面介绍Color类时曾经讲到了FromArgb方法。该方法一个最常用的重载为:
code.vb.net
Overloads Public Shared Function FromArgb(Integer,Integer, _
Integer,Integer) As Color
它有4个参数,是当前要设置的颜色的ARGB分量G ipha、红色、绿色和蓝色)值,均为8位,共32位。其中的alpha值表示颜色的透明度,即前景色与背景色的混合程度,取值范围为0到255,取0时表示完全透明,取255时完全不透明。
对于给定的alpha值,前景色、背景色和当前色之间具有下面的关系式:
当前色=前景色Xalpha/255+背景色X(255-alpha)/255
下面的程序首先创建一个蓝紫色的矩形作为背景,然后创建两个位图,每个位图中有两个矩形。第1个位图中间的两个矩形具有透明效果,第2个位图中间的两个矩形则没有透明效果。有无透明效果是通过将该位图Graphics对象的CompositingMode属性设置为Composti No.Sourc op枚举值来实现的。设置为该枚举值以后,前景仓烙覆盖弯景色,而不是混合。
【VB.NET】
code.vb.net
Protected Overries Sub OnPaint(ByVal text-blue-400">e As System.Windows.Formns.PaintEventArgs)
Dim g As Graphics = text-blue-400">e.Graphics
'创建一个填充矩形
Dim brush As New SolidBrush(Color.Blue Violet)
g.FillRectangle(brush, 180, 70,200,150)
'创建一个位图,其中的两个矩形之间有透明效果
Dim bm1 As New Bitmap(200, 100)
Dim bg1 As Graphics = Graphics.FromImage(bm1)
Dim redBrush As New SolidBrush(Color.FromArgb(210,255,0,0)
Dim greenBrush As New SolidBrush(Color.FromArgb(210,0,255,0)
bg1.FillRectangle(redBrush, 0,0,150,70)
bg1.FillRectangle(greenBrush, 30, 30, 150,70)
g.DrawImage(bm1, 100,100)
'创建第2个位图,其中两个矩形之间没有透明效果
Dim bm2 As New Bitmap(200,100)
Dim bg2 As Graphics = Graphics. Fromimage(bm2)
bg2.CompositingMode = CompositingMode.SourceCopy
bg2.FillRectangle(redBrush, 0,0,150,70)
bg2.FillRectangle(greenBrush,30,30,150,70)
g.CompositingQuality = CompositingQuality.GammaCorrected
g.DrawImage(bm2,300,100)
End Sub"
【VC#.NET】
code.vc#.net
protected override void OnPaint(PaintEventArgs e)
{
Graphics g= e.Graphics;
//创建一个填充矩形
SolidBrush brush=new SolidBrush(Color.BlueViolet);
g.FillRectangle(brush, 180,70, 200, 150);
//创建一个位图,其中的两个矩形之间有透明效果
Bitmap bm1=new Bitmap(200, 100);
Graphics bg1= Graphics.Fromlmage(bm1);
SolidBrush redBrushnew olidBrush(Color.FromArgb(210,255,0,0));
SolidBrush greenBrush=new SolidBrush(Color.FromArgb(210, 0,255,0));
bg1.FillRectangle(redBrush, 0, 0,150,70);
bg1.FillRectangle(greenBrush,30,30,150,70);
g.DrawImage(bm1,100,100);
//创建第2个位图,其中两个矩形之间没有透明效果
Bitmap bm2=new Bitmap(200,100);
Graphics bg2= Graphics. Fromlmage(bm2);
bg2.CompositingMode = CompositingMode.SourceCopy;
bg2.FillRectangle(redBrush, 0, 0, 150,70);
bg2.FillRectangle(greenBrush,30, 30,150, 70);
g.CompositingQuality = CompositingQuality.GammaCorrected;
g.Drawlmage(bm2,300, 100);
}
程序运行结果如图3-14所示。
\[\]
图3-14 Alpha混合示例