首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

GDI+ 在 Delphi 圖像處理實戰:飽和度調整演算法深度解析與 Photoshop 級效果實現

     編輯:關於SqlServer

飽和度調整演算法對比

測試三種常見演算法在 25% 飽和度調整下的效果:

演算法原理調節範圍效果評價
簡單 RGB 閾值法>128 加值,<128 減值極窄失真嚴重,不可用
HSV/HSL 模式轉換色彩空間調整 S 分量窄出現色斑、顏色失真
Photoshop HSB 模式HSL 空間取 S/L 為上下限,對 RGB 直接「補丁式」調整寬廣、平滑效果最佳、最自然
三種演算法效果對比圖

Photoshop 飽和度演算法核心洞察

關鍵發現:

  • 明度調整獨立:不需色彩空間轉換,用黑/白遮罩層疊加
  • 飽和度調整「半獨立」:仍需 HSL 取得 S、L 作為上下限控制,但**調整邏輯直接操作 RGB**,不重新轉換色彩空間
  • 避免了 HSV/HSL 來回轉換的精度損失與色域截斷

核心演算法偽代碼

// 取得像素 R,G,B (0-255)
// 1. 計算 HSL 的 L (Lightness) 和 S (Saturation)
rgbMax = max(R,G,B) / 255.0
rgbMin = min(R,G,B) / 255.0
delta  = rgbMax - rgbMin
if delta == 0: return  // 純灰階,無飽和度可調

L = (rgbMax + rgbMin) / 2
if L < 0.5: S = delta / (rgbMax + rgbMin)
else:       S = delta / (2 - rgbMax - rgbMin)

// 2. 飽和度調整量 sValue (-1.0 ~ +1.0)
if sValue > 0:
    // 增強:指數式,防止超過 1.0
    sValue = 1.0 / (1.0 - sValue) - 1.0
else:
    // 減弱:線性
    sValue = sValue  // 負值

// 3. 直接修正 RGB(L 作為中性點)
R = R + (R - L*255) * sValue
G = G + (G - L*255) * sValue
B = B + (B - L*255) * sValue

// 4. 限制 0-255
clamp(R, 0, 255) 等

Delphi BASM 高效能實現

procedure PSSaturation(Data: TBitmapData; Value: Integer);  // Value: -255 ~ +255
var L, sc, sv, width, off: Integer;
asm
    // ... 完整 BASM 代碼見原文,關鍵點:
    // 1. 直接操作像素緩衝區,無函數呼叫開銷
    // 2. 整數運算模擬定點數,避免浮點指令
    // 3. 迴圈展開處理 R/G/B 三通道
    // 4. 邊界檢查內聯
end;

procedure GdiPPSSaturation(Bmp: TGpBitmap; Value: Integer);
var Data: TBitmapData;
begin
    Data := Bmp.LockBits(GpRect(0,0,Bmp.Width,Bmp.Height), [imRead,imWrite], pf24bppRGB);
    try
        PSSaturation(Data, Value);
    finally
        Bmp.UnlockBits(Data);
    end;
end;

色相/飽和度/明度聯合調整難點

  • 單獨調整各完美,但**組合時順序影響結果**
  • Photoshop 用單一函數處理 HSB 三參數,內部有精密的順序與插值邏輯
  • 類似對比度/亮度的「誰先誰後」問題,需大量實測校準

完整測試專案結構

  • RgbHsb.h/cpp:核心演算法(C++ 參考實現)
  • main.cpp/h/dfm:VCL 表單,三軌條控制 H/S/B,即時預覽
  • 使用 GDI+ Bitmap/LockBits 直接操作像素緩衝區
  • 支援 pf24bppRGB 格式,效能最佳

此演算法實現了與 Photoshop **像素級一致** 的飽和度調整效果,是 Delphi/GDI+ 圖像處理庫的核心資產。

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