共用方式為


設定個別圖元的 Alpha 值

本主題 使用色彩矩陣在影像中設定Alpha值 會顯示變更影像Alpha值的不具破壞性方法。 該主題中的範例會以半透明方式轉譯影像,但點陣圖中的像素數據不會變更。 Alpha 值只會在轉譯期間改變。

下列範例示範如何變更個別圖元的 Alpha 值。 範例中的程式代碼實際上會變更 Bitmap 物件中的 Alpha 資訊。 這種方法比使用色彩矩陣和 ImageAttributes 物件慢得多,但可讓您控制位圖中的個別圖元。

INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
Color color, colorTemp;
for(INT iRow = 0; iRow < iHeight; iRow++)
{
   for(INT iColumn = 0; iColumn < iWidth; iColumn++)
   {
      bitmap.GetPixel(iColumn, iRow, &color);
      colorTemp.SetValue(color.MakeARGB(
         (BYTE)(255 * iColumn / iWidth), 
         color.GetRed(),
         color.GetGreen(),
         color.GetBlue()));
      bitmap.SetPixel(iColumn, iRow, colorTemp);
   }
}
// First draw a wide black line.
Pen pen(Color(255, 0, 0, 0), 25);
graphics.DrawLine(&pen, 10, 35, 200, 35);
// Now draw the modified bitmap.
graphics.DrawImage(&bitmap, 30, 0, iWidth, iHeight);

下圖顯示產生的影像。

圖示展示在黑色矩形上方的影像從左到右變得更不透明

上述程式代碼範例會使用巢狀循環來變更點陣圖中每個圖元的Alpha值。 針對每個圖元,Bitmap::GetPixel 取得現有的色彩,Color::SetValue 會建立包含新 Alpha 值的暫存色彩,然後 Bitmap::SetPixel 設定新的色彩。 Alpha 值是根據點陣圖的列來設定。 在第一個數據行中,Alpha 設定為 0。 在最後一個數據行中,Alpha 設定為 255。 因此,產生的影像會從完全透明(左邊緣)到完全不透明(右邊緣)。

Bitmap::GetPixelBitmap::SetPixel 可讓您控制個別圖元值。 不過,使用 Bitmap::GetPixelBitmap::SetPixel,並不快於使用 ImageAttributes 類別和 ColorMatrix 結構。