TDirectDrawSurface.Blur 方法提供了一種簡單有效的影像模糊處理方式,常用於遊戲中的景深效果、動態模糊或 UI 背景虛化。本文將示範如何正確呼叫此方法並觀察多次疊加的效果差異。
Blur 必須在 Lock 與 UnLock 之間呼叫,因為它直接操作顯存像素資料。Blur 會產生更強烈的模糊效果,類似高斯模糊的多通道疊加。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DXDraws, StdCtrls;
type
TForm1 = class(TForm)
DXDraw1: TDXDraw;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
ImgPath1 = 'C:\Temp\DelphiX.bmp';
procedure TForm1.Button1Click(Sender: TObject);
begin
{ 基礎顯示:清除表面、載入圖片、翻轉顯示 }
DXDraw1.Surface.Fill(0);
DXDraw1.Surface.LoadFromFile(ImgPath1);
DXDraw1.Flip;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{ 單次模糊處理 }
DXDraw1.Surface.Fill(0);
DXDraw1.Surface.LoadFromFile(ImgPath1);
{ 必須鎖定表面才能存取像素資料 }
DXDraw1.Surface.Lock;
try
DXDraw1.Surface.Blur; // 執行一次模糊運算
finally
DXDraw1.Surface.UnLock;
end;
DXDraw1.Flip;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
{ 雙重模糊:疊加兩次 Blur 產生更強烈效果 }
with DXDraw1.Surface do
begin
Fill(0);
LoadFromFile(ImgPath1);
Lock;
try
Blur; // 第一次模糊
Blur; // 第二次模糊,效果疊加
finally
UnLock;
end;
end;
DXDraw1.Flip;
end;
end.

FillRectAlpha 可製作漸變模糊遮罩。Blur 是 DelphiX 內建少數幾個像素級影像處理函數之一,雖然功能單一,但善用疊加特性即可實現多種視覺效果,是 2D 遊戲特效開發的實用工具。