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

Delphi 圖像類體系詳解:TGraphic、TBitmap、TMetafile、TIcon、TPicture

     編輯:Delphi

Delphi Graphic 單元五大核心圖像類架構與用法

Graphics 單元定義了 Delphi 圖像處理的核心類層次結構。理解 TGraphic 為抽象基類,TBitmap/TMetafile/TIcon 為三大具體實現,TPicture 為容器封裝,TImage 為視覺控件,能讓你靈活選擇最適合的圖像處理方式。

類繼承體系

TGraphic (抽象基類)
├── TBitmap      // 位圖 (DIB),像素級操作、雙緩衝繪圖核心
├── TMetafile    // 圖元檔 (WMF/EMF),向量圖形、可縮放無失真
└── TIcon        // 圖標 (ICO/CUR),多解析度、含透明遮罩

核心類功能對比

TPicture:統一容器


var
  Pic: TPicture;
begin
  Pic := TPicture.Create;
  try
    // 可載入任意支援格式
    Pic.LoadFromFile('image.bmp');   // → Pic.Bitmap
    Pic.LoadFromFile('drawing.wmf'); // → Pic.Metafile
    Pic.LoadFromFile('app.ico');     // → Pic.Icon

    // 統一訪問介面
    Pic.Graphic  // 返回當前具體 TGraphic 實例

    // 顯示到 TImage
    Image1.Picture.Assign(Pic);
  finally
    Pic.Free;
  end;
end;

TImage 控件:視覺化展示

TImage
└── Picture: TPicture
    ├── Bitmap: TBitmap
    ├── Metafile: TMetafile
    ├── Icon: TIcon
    └── Graphic: TGraphic (統一介面)

為何 TBitmap 是「內存畫板」之王


// 雙緩衝繪圖經典模式
var
  BackBuffer: TBitmap;
begin
  BackBuffer := TBitmap.Create;
  try
    BackBuffer.Width := ClientWidth;
    BackBuffer.Height := ClientHeight;
    BackBuffer.PixelFormat := pf32bit;  // 高效像素格式

    // 1. 所有繪圖操作在 BackBuffer 上
    BackBuffer.Canvas.FillRect(ClientRect);
    BackBuffer.Canvas.TextOut(10, 10, 'Hello');
    // ... 複雜繪圖 ...

    // 2. 一次性刷新到螢幕 (無閃爍)
    Canvas.Draw(0, 0, BackBuffer);
  finally
    BackBuffer.Free;
  end;
end;

格式轉換與互操作

類別檔案格式特性典型用途Canvas 輸出
TBitmap.bmp像素陣列、支援 ScanLine、透明色、Alpha 通道離屏緩衝、圖像處理、截圖Canvas.Draw/StretchDraw
TMetafile.wmf/.emfGDI 記錄、向量、無限縮放不失真報表輸出、剪貼簿向量圖、印刷Canvas.Draw/StretchDraw
TIcon.ico/.cur多尺寸/色深、AND/XOR 遮罩透明應用程式圖標、系統托盤、游標Canvas.Draw

最佳實踐建議

  1. 高頻繪圖/動畫:TBitmap 雙緩衝 (pf32bit + ScanLine)
  2. 報表/列印/向量輸出:TMetafile 記錄 GDI 命令
  3. UI 圖標/游標:TIcon 多解析度自動選擇
  4. 未知格式載入/顯示:TPicture + TImage 自動識別
  5. 跨執行緒繪圖:每執行緒建立獨立 TBitmap,避免 Canvas 衝突

掌握這五大類的分工與協作,能讓 Delphi 圖像處理代碼既優雅又高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
來源 → 目標方法注意
TBitmap → TMetafileMetafile.Canvas.Draw(0,0,Bitmap)光柵化為向量記錄,非真正向量化
TMetafile → TBitmapBitmap.Canvas.Draw(0,0,Metafile)光柵化渲染,指定 Bitmap 尺寸
TIcon → TBitmapBitmap.Canvas.Draw(0,0,Icon)提取指定尺寸幀
TBitmap → TIconIcon.Handle := Bitmap.ReleaseHandle需手動管理 Handle 生命週期