設定個別圖元的 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::GetPixel 和 Bitmap::SetPixel 可讓您控制個別圖元值。 不過,使用 Bitmap::GetPixel 和 Bitmap::SetPixel,並不快於使用 ImageAttributes 類別和 ColorMatrix 結構。