共用方式為


HOW TO:使用色彩矩陣設定影像中的 Alpha 值

更新:2007 年 11 月

Bitmap 類別 (繼承自 Image 類別) 和 ImageAttributes 類別提供取得和設定像素值的功能。您可以使用 ImageAttributes 類別來修改整個影像的 Alpha 值,或者呼叫 Bitmap 類別的 SetPixel 方法來修改個別的像素值。

範例

ImageAttributes 類別具有許多屬性,可在呈現影像時用來修改影像。在下列範例中,使用 ImageAttributes 物件將所有 Alpha 值設定為原值的 80%。做法是初始化色彩矩陣,然後將矩陣中的 Alpha 縮放值設定為 0.8。然後將色彩矩陣的位址傳遞至 ImageAttributes 物件的 SetColorMatrix 方法,並將 ImageAttributes 物件傳遞至 Graphics 物件的 DrawString 方法。

在呈現時,會將點陣圖中的 Alpha 值轉換為原值的 80%。結果便會將影像與背景混合。如下圖所示,點陣圖影像看起來為透明的,您可以透過影像看見實心黑線。

使用矩陣進行透明混色

當影像出現在背景的白色部分上方時,影像已與白色混合。而穿過黑色線條的影像部分則會與黑色混合。

' Create the Bitmap object and load it with the texture image.
Dim bitmap As New Bitmap("Texture.jpg")

' Initialize the color matrix.
' Note the value 0.8 in row 4, column 4.
Dim matrixItems As Single()() = { _
   New Single() {1, 0, 0, 0, 0}, _
   New Single() {0, 1, 0, 0, 0}, _
   New Single() {0, 0, 1, 0, 0}, _
   New Single() {0, 0, 0, 0.8F, 0}, _
   New Single() {0, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(matrixItems)

' Create an ImageAttributes object and set its color matrix.
Dim imageAtt As New ImageAttributes()
imageAtt.SetColorMatrix( _
   colorMatrix, _
   ColorMatrixFlag.Default, _
   ColorAdjustType.Bitmap)

' First draw a wide black line.
e.Graphics.DrawLine( _
   New Pen(Color.Black, 25), _
   New Point(10, 35), _
   New Point(200, 35))

' Now draw the semitransparent bitmap image.
Dim iWidth As Integer = bitmap.Width
Dim iHeight As Integer = bitmap.Height

' Pass in the destination rectangle (2nd argument) and the x _
' coordinate (3rd argument), x coordinate (4th argument), width _
' (5th argument), and height (6th argument) of the source rectangle.
e.Graphics.DrawImage( _
   bitmap, _
   New Rectangle(30, 0, iWidth, iHeight), _
   0.0F, _
   0.0F, _
   iWidth, _
   iHeight, _
   GraphicsUnit.Pixel, _
   imageAtt)

// Create the Bitmap object and load it with the texture image.
Bitmap bitmap = new Bitmap("Texture.jpg");

// Initialize the color matrix.
// Note the value 0.8 in row 4, column 4.
float[][] matrixItems ={ 
   new float[] {1, 0, 0, 0, 0},
   new float[] {0, 1, 0, 0, 0},
   new float[] {0, 0, 1, 0, 0},
   new float[] {0, 0, 0, 0.8f, 0}, 
   new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(matrixItems);

// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

// First draw a wide black line.
e.Graphics.DrawLine(
   new Pen(Color.Black, 25),
   new Point(10, 35),
   new Point(200, 35));

// Now draw the semitransparent bitmap image.
int iWidth = bitmap.Width;
int iHeight = bitmap.Height;
e.Graphics.DrawImage(
   bitmap,
   new Rectangle(30, 0, iWidth, iHeight),  // destination rectangle
   0.0f,                          // source rectangle x 
   0.0f,                          // source rectangle y
   iWidth,                        // source rectangle width
   iHeight,                       // source rectangle height
   GraphicsUnit.Pixel,
   imageAtt);

編譯程式碼

上述範例是專為與 Windows Form 搭配使用而設計的,而且它需要 PaintEventArgse (即 PaintEventHandler 的參數)。

請參閱

其他資源

Windows Form 中的圖形和繪圖

Alpha 混色線條和填色