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

DelphiX 實戰:TDIB.DoBrightness 亮度調整

     編輯:Delphi

TDIB.DoBrightness 以單一參數調整影像整體亮度,正值變亮、負值變暗,操作直觀。本文提供載入圖片後一鍵提升亮度的最小範例。

效果預覽

DoBrightness 效果

核心程式碼

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DIB, StdCtrls;
type
  TForm1 = class(TForm)
    DXPaintBox1: TDXPaintBox;
    Button1: TButton; // 載入圖片
    Button2: TButton; // 調整亮度
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const ImgPath1 = 'C:\Temp\DX.jpg';
begin
  DXPaintBox1.DIB.LoadFromFile(ImgPath1);
  DXPaintBox1.Width := DXPaintBox1.DIB.Width;
  DXPaintBox1.Height := DXPaintBox1.DIB.Height;
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // DoBrightness(Delta: Integer)  // Delta: -255~255
  DXPaintBox1.DIB.DoBrightness(32);
  DXPaintBox1.Repaint;
end;
end.

參數與行為

  • Delta (Integer):亮度增量,範圍 -255 ~ 255
  • 正值:每通道 +Delta(飽和 255)
  • 負值:每通道 -|Delta|(飽和 0)
  • 範例 32 為明顯但自然的提亮
  • 就地修改,線性位移(非 Gamma 感知)

與 Darker/Lighter 差異

方法參數方向用途
DoBrightness(32)正/負雙向單滑桿雙向調整
Lighter(110)正僅亮單向強化
Darker(130)正僅暗單向壓暗

應用場景

  • **使用者亮度滑桿**:-100~100 映射到 -255~255
  • **自動曝光補償**:依直方圖平均亮度動態計算 Delta
  • **日夜循環**:遊戲世界時間驅動亮度漸變
  • **HDR 色調映射前置**:將高動態範圍壓縮至可顯示範圍

進階:自動亮度正規化


procedure AutoBrightness(DIB: TDIB; TargetMean: Byte = 128);
var x, y: Integer; c: TRGBQuad; sum: Int64; mean: Double; delta: Integer;
begin
  sum := 0;
  for y := 0 to DIB.Height - 1 do
    for x := 0 to DIB.Width - 1 do begin
      c := DIB.Pixels[x, y];
      sum := sum + c.rgbRed + c.rgbGreen + c.rgbBlue;
    end;
  mean := sum / (DIB.Width * DIB.Height * 3);
  delta := Round(TargetMean - mean);
  if Abs(delta) > 5 then DIB.DoBrightness(delta); // 避免微調抖動
end;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved