首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學 GDI+ [93]:TGPImage 調整 RGB 三原色縮放與透明度 - ColorMatrix 對角線縮放

     編輯:Delphi

利用 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]紅色縮放TrackBar10~100 → 0.0~1.00=移除紅色, 1=原始
[1,1]綠色縮放TrackBar20~100 → 0.0~1.00=移除綠色, 1=原始
[2,2]藍色縮放TrackBar30~100 → 0.0~1.00=移除藍色, 1=原始
[3,3]透明度縮放TrackBar40~100 → 0.0~1.00=全透明, 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;

效果圖

RGB 縮放與透明度調整效果

數學原理

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 對角線縮放,即掌握了通道級色彩強度與透明度的精確控制權,是圖像處理管線的基石操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved