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

Delphi與DirectX之DelphiX(6):TDXImageList 與 VCL 圖形互操作

     編輯:Delphi

TDXImageList 與標準 VCL 圖形類別互通性驗證

本篇實測兩個關鍵互操作場景:

  1. VCL → DelphiX:用 TPicture 載入圖片,再 Assign 給 TPictureCollectionItem.Picture
  2. DelphiX → VCL:直接用 Form.Canvas.Draw/StretchDraw 繪製 TPictureCollectionItem.Picture.Graphic 到普通視窗

核心發現

  • TPictureCollectionItem.Picture 實為 TPicture 相容物件,完全支援 Assign 雙向複製
  • Picture.Graphic 返回 TGraphic (TBitmap/TJPEGImage 等),可直接傳給 VCL Canvas 繪圖方法
  • 無需額外轉換,極大簡化混合繪圖場景開發

完整測試代碼

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, StdCtrls;
type
  TForm1 = class(TForm)
    DXImageList1: TDXImageList;
    Button1: TButton;  // VCL Canvas.Draw 繪製
    Button2: TButton;  // VCL Canvas.StretchDraw 繪製
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var Pic: TPicture;
begin
  // 1. VCL TPicture 載入
  Pic := TPicture.Create;
  try
    Pic.LoadFromFile('C:\Temp\Test.bmp');
    // 2. Assign 給 DelphiX Item
    DXImageList1.Items.Add;
    DXImageList1.Items[0].Picture.Assign(Pic);
  finally
    Pic.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 直接用 VCL Canvas 繪製 DelphiX 圖片
  Refresh;
  Canvas.Draw(0, 0, DXImageList1.Items[0].Picture.Graphic);
end;

procedure TForm1.Button2Click(Sender: TObject);
var PicItem: TPictureCollectionItem;
begin
  Refresh;
  PicItem := DXImageList1.Items[0];
  // 使用中介變數讓代碼提示更友好
  Canvas.StretchDraw(ClientRect, PicItem.Picture.Graphic);
end;
end.

執行效果

DelphiX 圖片在 VCL 視窗繪製

點擊 Button1 原尺寸繪製左上角;Button2 拉伸填滿整個客戶區,均正常顯示 BMP 內容。

TDXImageList 結構速覽

  • DXDraw:繪圖目標 TDXDraw
  • Items:TPictureCollection 集合
  • TPictureCollectionItem:單元項目,核心屬性 Picture: TPicture

實務應用場景

  • 遊戲編輯器:用 VCL 控件預覽、編輯素材,運行時轉給 DelphiX 高速渲染
  • 混合介面:工具列/屬性頁用 VCL,遊戲畫面用 DirectX
  • 截圖/匯出:將 DirectX Surface 內容 Assign 給 TBitmap 存檔或列印

注意事項

  • Canvas.Draw 要求目標 Canvas 有效(視窗可見、非最小化)
  • StretchDraw 會進行拉伸插值,大圖縮小時畫質較好,小圖放大會模糊
  • 頻繁在 VCL 與 DirectX 間傳遞圖形會產生效能開銷,核心渲染迴路建議純 DirectX
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved