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

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

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

示例

以下示例绘制位图,然后填充重叠位图的三个椭圆。 第一个椭圆使用值为 255 的 alpha 分量,因此它是不透明的。 第二个和第三个椭圆使用值为 128 的 alpha 分量,因此它们是半透明的;还可透过椭圆看到背景图像。 设置 CompositingQuality 属性的调用会导致第三个椭圆的混合与灰度校正联合完成。

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);
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)

下图显示以下代码的输出:

显示了不透明和半透明输出的插图。

编译代码

前面的示例专用于 Windows 窗体,它需要 PaintEventArgs e,这是 PaintEventHandler 的参数。

另请参阅