使用颜色矩阵设置图像中的 Alpha 值
Bitmap 类 (继承自 Image 类) 和 ImageAttributes 类提供获取和设置像素值的功能。 可以使用 ImageAttributes 类修改整个图像的 alpha 值,也可以调用 Bitmap 类的 Bitmap::SetPixel 方法来修改各个像素值。 有关设置单个像素值的详细信息,请参阅 设置单个像素的 Alpha 值。
以下示例绘制一条宽黑色线条,然后显示覆盖该线条的一部分的不透明图像。
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));
下图显示了生成的图像,该图像在 (30, 0) 绘制。 请注意,宽黑线不会通过图像显示。
ImageAttributes 类具有许多属性,可用于在呈现期间修改图像。 在下面的示例中, ImageAttributes 对象用于将所有 alpha 值设置为它们的 80%。 方法是通过初始化颜色矩阵,并将矩阵中的 Alpha 缩放值设置为 0.8。 颜色矩阵的地址传递到 ImageAttributes 对象的 ImageAttributes::SetColorMatrix 方法,ImageAttributes 对象的地址传递给 Graphics 对象的 DrawImage 方法。
// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
&bitmap,
Rect(30, 0, iWidth, iHeight), // Destination rectangle
0, // Source rectangle X
0, // Source rectangle Y
iWidth, // Source rectangle width
iHeight, // Source rectangle height
UnitPixel,
&imageAtt);
呈现期间,位图中的 Alpha 值将转换为原来的 80%。 这将导致图像与背景混合。 如下图所示,位图图像看上去是透明的;可以看见黑色实线穿过它。
位于背景的白色部分上的图像与白色混合。 穿过黑线部分的图像与黑色混合。