前面的绘图命令都是来自 TDXImageList,
准确地说是来自 TDXImageList.Items 所包含的 TPictureCollectionItem 对象.
那 TDXDraw 本身有没有绘图命令呢?
TDXDraw 本身没有绘图命令, 但它的有绘图表面(TDirectDrawSurface), 譬如: Surface、Primary;
TDXDraw 的绘图表面有更多的绘图命令, 另外 TDXDraw 可以多个绘图表面.
TDirectDrawSurface 的绘图命令和 TPictureCollectionItem 的绘图命令最大的区别是它们的图像来源;
TDirectDrawSurface 的图像来源必须是另一个已绘制好的 TDirectDrawSurface 对象.
这里列举的只是 TDirectDrawSurface 和 TPictureCollectionItem 类似的描绘图片的命令:
TDirectDrawSurface.Draw(); TDirectDrawSurface.StretchDraw(); TDirectDrawSurface.DrawAdd(); TDirectDrawSurface.DrawAlpha(); TDirectDrawSurface.DrawSub(); TDirectDrawSurface.DrawAddCol(); TDirectDrawSurface.DrawAlphaCol(); TDirectDrawSurface.DrawSubCol(); TDirectDrawSurface.DrawRotate(); TDirectDrawSurface.DrawRotateAdd(); TDirectDrawSurface.DrawRotateAdd(); TDirectDrawSurface.DrawRotateAlpha(); TDirectDrawSurface.DrawRotateSub(); TDirectDrawSurface.DrawRotateAddCol(); TDirectDrawSurface.DrawRotateAlphaCol(); TDirectDrawSurface.DrawRotateCol(); TDirectDrawSurface.DrawRotateSubCol(); TDirectDrawSurface.DrawWaveX(); TDirectDrawSurface.DrawWaveXAdd(); TDirectDrawSurface.DrawWaveXAlpha(); TDirectDrawSurface.DrawWaveXSub(); TDirectDrawSurface.DrawWaveY(); TDirectDrawSurface.DrawWaveYAdd(); TDirectDrawSurface.DrawWaveYAlpha(); TDirectDrawSurface.DrawWaveYSub();
本例效果图:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList1: TDXImageList; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var PicItem: TPictureCollectionItem; procedure TForm1.FormCreate(Sender: TObject); const ImgPath1 = 'C:\Temp\DelphiX.bmp'; begin DXImageList1.DXDraw := DXDraw1; PicItem := TPictureCollectionItem(DXImageList1.Items.Add); PicItem.Picture.LoadFromFile(ImgPath1); end; procedure TForm1.Button1Click(Sender: TObject); var MySurface: TDirectDrawSurface; begin MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下} MySurface.SetSize(PicItem.Width, PicItem.Height); MySurface.Fill(0); PicItem.Draw(MySurface, 0, 0, 0); DXDraw1.Surface.Fill(0); DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2, (DXDraw1.Height - MySurface.Height) div 2, MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; procedure TForm1.Button2Click(Sender: TObject); var MySurface: TDirectDrawSurface; m,n: Integer; begin m := 40; n := 15; MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下} MySurface.SetSize(PicItem.Width, PicItem.Height); MySurface.Fill(0); PicItem.Draw(MySurface, 0, 0, 0); DXDraw1.Surface.Fill(0); DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2 + m, (DXDraw1.Height - MySurface.Height) div 2 + n, Bounds(m, n, MySurface.Width - m*2, MySurface.Height - n*2), MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; end.