TDIB.DrawAdditive 以加法混合模式將來源圖像疊加到目標 DIB 上,常用於發光、光暈等特效。本文提供完整可編譯的 Delphi 範例,展示不同 Alpha 值下的視覺差異。

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; // Alpha=1
Button3: TButton; // Alpha=128
Button4: TButton; // 黑底+Alpha=128
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
end;
var Form1: TForm1;
implementation
{$R *.dfm}
var dib: TDIB;
procedure TForm1.FormCreate(Sender: TObject);
const ImgPath1 = 'C:\Temp\test.bmp';
begin
Position := poScreenCenter;
dib := TDIB.Create;
dib.LoadFromFile(ImgPath1);
DXPaintBox1.Width := dib.Width;
DXPaintBox1.Height := dib.Height;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin dib.Free; end;
procedure TForm1.Button1Click(Sender: TObject); // 顯示原圖
begin
DXPaintBox1.DIB.Assign(dib);
DXPaintBox1.Repaint;
end;
procedure TForm1.Button2Click(Sender: TObject); // Alpha=1 (幾乎透明)
begin
DXPaintBox1.DIB.Fill(clWhite);
DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 1);
DXPaintBox1.Repaint;
end;
procedure TForm1.Button3Click(Sender: TObject); // Alpha=128 (半透明疊加)
begin
DXPaintBox1.DIB.Fill(clWhite);
DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 128);
DXPaintBox1.Repaint;
end;
procedure TForm1.Button4Click(Sender: TObject); // 黑底 + Alpha=128 (發光效果)
begin
DXPaintBox1.DIB.Fill(clBlack);
DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 128);
DXPaintBox1.Repaint;
end;
end.
DrawAdditive(SrcDIB, X, Y, SrcW, SrcH, Alpha)object Form1: TForm1
ClientHeight = 204, ClientWidth = 253
object DXPaintBox1: TDXPaintBox ... end
object Button1: TButton ... Caption = 'Button1' ... end
object Button2: TButton ... Caption = 'Button2' ... end
object Button3: TButton ... Caption = 'Button3' ... end
object Button4: TButton ... Caption = 'Button4' ... end
end
建議將按鈕 Caption 改為「原圖」、「Alpha=1」、「Alpha=128(白底)」、「Alpha=128(黑底)」以利辨識。