利用 TColorMatrix 主對角線前四個元素,獨立縮放紅、綠、藍、Alpha 四個通道數值。
ColorMatrix: TColorMatrix = (
(1.0, 0.0, 0.0, 0.0, 0.0), { R' = sR * R }
(0.0, 1.0, 0.0, 0.0, 0.0), { G' = sG * G }
(0.0, 0.0, 1.0, 0.0, 0.0), { B' = sB * B }
(0.0, 0.0, 0.0, 1.0, 0.0), { A' = sA * A }
(0.0, 0.0, 0.0, 0.0, 1.0)
);
| 矩陣位置 | 控制通道 | TrackBar | 範圍 | 效果 |
|---|---|---|---|---|
[0,0] | 紅色縮放 | TrackBar1 | 0~100 → 0.0~1.0 | 0=移除紅色, 1=原始 |
[1,1] | 綠色縮放 | TrackBar2 | 0~100 → 0.0~1.0 | 0=移除綠色, 1=原始 |
[2,2] | 藍色縮放 | TrackBar3 | 0~100 → 0.0~1.0 | 0=移除藍色, 1=原始 |
[3,3] | 透明度縮放 | TrackBar4 | 0~100 → 0.0~1.0 | 0=全透明, 1=不透明 |
var img: TGPImage;
procedure TForm1.FormCreate(Sender: TObject);
begin
img := TGPImage.Create('c:\temp\test.png'); { 專用色彩測試圖 }
{ 四 TrackBar: Max=100, Position=Max (預設原始) }
DoubleBuffered := True;
end;
procedure TForm1.FormPaint(Sender: TObject);
var g: TGPGraphics; ImageAttributes: TGPImageAttributes;
begin
g := TGPGraphics.Create(Canvas.Handle);
ImageAttributes := TGPImageAttributes.Create;
ColorMatrix[0,0] := TrackBar1.Position / 100;
ColorMatrix[1,1] := TrackBar2.Position / 100;
ColorMatrix[2,2] := TrackBar3.Position / 100;
ColorMatrix[3,3] := TrackBar4.Position / 100;
ImageAttributes.SetColorMatrix(ColorMatrix);
g.DrawImage(img, MakeRect(10, 10, img.GetWidth, img.GetHeight), 0, 0, img.GetWidth, img.GetHeight, UnitPixel, ImageAttributes);
ImageAttributes.Free; g.Free;
end;
procedure TForm1.FormDestroy(Sender: TObject); begin img.Free; end;

R' = sR * R
G' = sG * G
B' = sB * B
A' = sA * A
{ sR/sG/sB/sA 為 0.0 到 1.0 縮放因子 }
{ 此為線性縮放,保持色相不變,僅改變飽和度/亮度/透明度 }
{ 組合縮放 + 平移:先縮放再偏移 }
R' = sR * R + tR
{ 可實現完整的仿射色彩變換 }
掌握 ColorMatrix 對角線縮放,即掌握了通道級色彩強度與透明度的精確控制權,是圖像處理管線的基石操作。