Graphics 是 GDI+ 核心,負責繪圖、填充、影像處理。本文聚焦兩個常被忽視但極重要的屬性:CompositingMode 與 CompositingQuality。
列舉屬性,兩種值:
顯示顏色 = 源顏色 × alpha/255 + 背景顏色 × (255-alpha)/255private int CompositeColor(int color, int alpha, int backgroudColor)
{
return color * alpha / 255 + backgroudColor * (255 - alpha) / 255;
}
private void Draw(object sender, EventArgs e)
{
this.BackColor = Color.FromArgb(255, 255, 255);
Graphics g = this.CreateGraphics();
// 1. SourceOver:半透明紅色與白背景混合 → 淺紅
g.CompositingMode = CompositingMode.SourceOver;
g.FillRectangle(new SolidBrush(Color.FromArgb(127, 255, 0, 0)), new Rectangle(0, 0, 200, 200));
// 2. SourceCopy:直接畫半透明紅色(背景被忽略) → 純半透明紅
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(new SolidBrush(Color.FromArgb(127, 255, 0, 0)), new Rectangle(200, 0, 200, 200));
// 3. SourceCopy 但手動預乘混合 → 效果等同第 1 區塊
g.CompositingMode = CompositingMode.SourceCopy;
g.FillRectangle(new SolidBrush(Color.FromArgb(
255,
CompositeColor(255, 127, 255),
CompositeColor(0, 127, 255),
CompositeColor(0, 127, 255))),
new Rectangle(0, 200, 200, 200));
g.Dispose();
}

若需在 SourceCopy 下獲得混合效果,必須自行預乘計算(如第 3 區塊)。
五種等級:
| 成員 | 說明 |
|---|---|
| AssumeLinear | 假設線性插值,品質略優於 Default,速度稍慢 |
| Default | 預設基本計算 |
| GammaCorrected | 套用 Gamma 灰度校正,不做計算優化 |
| HighQuality | 高品質、低速度:平滑鋸齒 + Gamma 校正 |
| HighSpeed | 高速度、低品質:優化計算,一般情況差異不明顯 |
| Invalid | 無效值(未定義行為) |
影像合成涉及大量浮點運算與量化,易產生鋸齒。多層透明疊加更需重複運算。CompositingQuality 由 GDI+ 內部優化這些過程:

實務上若不極度追求品質,HighSpeed 或 Default 通常足夠;列印或專業輸出建議 HighQuality。