TDIB.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.
| 方法 | 參數 | 方向 | 用途 |
|---|---|---|---|
DoBrightness(32) | 正/負 | 雙向 | 單滑桿雙向調整 |
Lighter(110) | 正 | 僅亮 | 單向強化 |
Darker(130) | 正 | 僅暗 | 單向壓暗 |
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;