使用色彩矩陣設定影像中的 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%。 這會導致與背景混合的影像。 如下圖所示,點陣圖影像看起來是透明的;您可以透過它看到實心黑色線條。
影像在背景的白色部分上方時,影像已與色彩白色混合。 影像跨越黑色線條的位置,影像會與黑色混合。