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

DelphiX 實戰:TDIB.DrawMorphed 形態變換效果範例

     編輯:Delphi

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

效果預覽

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 為種子顏色,執行形態學膨脹運算
  • Button2:黃色文字區域向外擴展,形成黃色發光/描邊效果
  • Button3:紅色背景區域向內擴展,壓縮文字區域
  • 連續點擊可疊加效果,觀察區域逐步增長/收縮

應用場景

  • 文字描邊、發光特效
  • 二值圖像去噪(侵蝕後再膨脹 = 開運算)
  • 區域填充邊界平滑
  • 特效動畫(能量場擴散、火焰蔓延)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved