TDIB.DrawMorphed 實作形態學運算中的「膨脹」或「侵蝕」效果,以指定顏色為種子進行區域擴展或收縮,可產生發光擴散、邊緣銳化等視覺效果。本文提供紅/黃雙色文字互轉的動態演示範例。

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; // 黃色形態擴展
Button3: TButton; // 紅色形態擴展
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var Form1: TForm1;
implementation {$R *.dfm}
const c1 = clRed; c2 = clYellow;
var w, h: Integer;
procedure TForm1.Button1Click(Sender: TObject); // 建立基礎圖像
begin
w := DXPaintBox1.ClientWidth; h := DXPaintBox1.ClientHeight;
DXPaintBox1.DIB.SetSize(w, h, 24);
DXPaintBox1.DIB.Fill(c1); // 紅底
DXPaintBox1.DIB.Canvas.Brush.Style := bsClear;
DXPaintBox1.DIB.Canvas.Font.Color := c2; // 黃字
DXPaintBox1.DIB.Canvas.Font.Name := 'Arial Black';
DXPaintBox1.DIB.Canvas.Font.Size := 36;
DXPaintBox1.DIB.Canvas.Font.Style := [fsBold];
DXPaintBox1.DIB.Canvas.TextOut(20, 10, 'DelphiX');
DXPaintBox1.Repaint;
end;
procedure TForm1.Button2Click(Sender: TObject); // 黃色種子擴展
begin
DXPaintBox1.DIB.DrawMorphed(DXPaintBox1.DIB, 0, 0, w, h, 0, 0, c2);
DXPaintBox1.Repaint;
end;
procedure TForm1.Button3Click(Sender: TObject); // 紅色種子擴展
begin
DXPaintBox1.DIB.DrawMorphed(DXPaintBox1.DIB, 0, 0, w, h, 0, 0, c1);
DXPaintBox1.Repaint;
end;
end.
DrawMorphed(SrcDIB, DstX, DstY, DstW, DstH, SrcX, SrcY, SeedColor)SeedColor 為種子顏色,執行形態學膨脹運算