本篇實測兩個關鍵互操作場景:
TPicture 載入圖片,再 Assign 給 TPictureCollectionItem.PictureForm.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.

點擊 Button1 原尺寸繪製左上角;Button2 拉伸填滿整個客戶區,均正常顯示 BMP 內容。
TDXDrawTPictureCollection 集合Picture: TPictureAssign 給 TBitmap 存檔或列印Canvas.Draw 要求目標 Canvas 有效(視窗可見、非最小化)StretchDraw 會進行拉伸插值,大圖縮小時畫質較好,小圖放大會模糊