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

DelphiX 教學 (23):TDirectDrawSurface.Blur 模糊特效實作指南

     編輯:Delphi

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.

執行結果分析

Blur 效果示範:原圖、單次模糊、雙重模糊

  1. Button1 (原圖):清晰銳利的原始圖片。
  2. Button2 (單次 Blur):邊緣軟化,細節模糊,適合背景虛化。
  3. Button3 (雙重 Blur):強烈模糊,細節幾乎消失,可用於劇烈動態模糊或深度場景。

實務應用建議

  • 效能優化:大解析度表面建議縮小後處理再放大,或使用 Shader 替代。
  • 組合特效:搭配 FillRectAlpha 可製作漸變模糊遮罩。
  • 記憶體對齊:確保表面寬度為 4 的倍數以獲得最佳鎖定效能。

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

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