这两个函数可不是一般的麻烦, 特别是 Blt(); 暂时搞不彻底, 这是初步尝试的例子:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls, DirectX; type TForm1 = class(TForm) DXDraw1: TDXDraw; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} const ImgPath1 = 'C:\Temp\DelphiX.bmp'; ImgPath2 = 'C:\Temp\Test.bmp'; procedure TForm1.Button1Click(Sender: TObject); var MySurface: TDirectDrawSurface; DF: TDDBltFX; begin MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); MySurface.LoadFromFile(ImgPath1); DXDraw1.Surface.LoadFromFile(ImgPath2); DF.dwSize := SizeOf(DF); DF.dwDDFX := 0; DXDraw1.Surface.Blt(Rect(0, 0, MySurface.Width div 2, MySurface.Height div 2), MySurface.ClientRect, DDBLT_KEYSRC or DDBLT_WAIT, DF, MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; procedure TForm1.Button2Click(Sender: TObject); var MySurface: TDirectDrawSurface; begin MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw); MySurface.LoadFromFile(ImgPath1); DXDraw1.Surface.LoadFromFile(ImgPath2); DXDraw1.Surface.BltFast(0, 0, Bounds(16, 4, Trunc(MySurface.Width * 0.9), Trunc(MySurface.Height * 0.9)), DDBLTFAST_SRCCOLORKEY or DDBLTFAST_WAIT, MySurface); DXDraw1.Flip; FreeAndNil(MySurface); end; end.