如何:用不透明和半透明的画笔绘制

更新:2007 年 11 月

在填充形状时,必须将 Brush 对象传递给 Graphics 类的某个填充方法。SolidBrush 构造函数的一个参数是 Color 对象。若要填充不透明的形状,请将颜色的 alpha 分量设置为 255。若要填充半透明形状,请将 alpha 分量设置为 1 到 254 之间的任意值。

在填充半透明形状时,形状的颜色与背景的颜色相混合。Alpha 分量指定形状颜色和背景颜色的混合方式。Alpha 值越接近于 0,背景颜色的权重越大;Alpha 值越接近于 255,形状颜色的权重越大。

示例

下面的示例绘制一个位图,然后填充三个遮盖该位图的椭圆。第一个椭圆的 alpha 分量的值是 255,因此它是不透明的。第二个和第三个椭圆的 alpha 分量是 128,因此它们是半透明的,所以您可透过椭圆看到背景图像。设置 CompositingQuality 属性的调用导致在混合第三个椭圆的同时进行灰度校正。

下面的插图显示以下代码的输出。

不透明和半透明

Dim bitmap As New Bitmap("Texture1.jpg")
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height)

Dim opaqueBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
Dim semiTransBrush As New SolidBrush(Color.FromArgb(128, 0, 0, 255))

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30)
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30)

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30)

Bitmap bitmap = new Bitmap("Texture1.jpg");
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height);

SolidBrush opaqueBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30);
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30);

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30);

编译代码

前面的示例是为使用 Windows 窗体而设计的,它需要 PaintEventHandler 的参数 PaintEventArgse。

请参见

任务

如何:使控件拥有透明背景

如何:绘制不透明和半透明的线条

如何:创建透明 Windows 窗体

其他资源

Windows 窗体中的图形和绘制

Alpha 混合线条和填充