TDirectDrawSurface.Noise 方法可直接在繪圖表面產生隨機噪點圖案,常用於模擬電視訊號干擾、老舊螢幕效果、程序化紋理生成等場景。本文示範如何搭配 TTrackBar 即時調整噪點強度。
procedure Noise(const Rect: TRect; Intensity: Integer);
ClientRect 全表面。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DXClass, DXDraws, ComCtrls;
type
TForm1 = class(TForm)
DXDraw1: TDXDraw;
TrackBar1: TTrackBar;
procedure FormCreate(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
{ 設定全螢幕繪圖區域 }
DXDraw1.Align := alClient;
{ 設定軌跡條控制噪點強度 0-255 }
TrackBar1.Align := alBottom;
TrackBar1.Height := 22;
TrackBar1.ShowSelRange := False;
TrackBar1.Max := 255;
TrackBar1.Position := 128; // 預設中等強度
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
{ 即時重繪噪點效果 }
DXDraw1.Surface.Fill(0); // 清除背景
DXDraw1.Surface.Lock; // 必須鎖定才能存取像素
try
{ 在整個客戶區產生指定強度的噪點 }
DXDraw1.Surface.Noise(DXDraw1.Surface.ClientRect, TrackBar1.Position);
finally
DXDraw1.Surface.UnLock;
end;
DXDraw1.Flip; // 顯示結果
end;
end.

TDXTimer 中週期性呼叫 Noise 可產生閃爍的靜電干擾動畫。Rect 參數可僅在特定區域 (如螢幕邊緣) 產生噪點,模擬鏡頭漏光效果。Noise 方法雖然簡單,但結合動態參數控制即可實現豐富的視覺效果,是程序化特效開發的基礎工具之一。