設定個別圖元的 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 結構一樣快。