Delphi 与 DirectX 之 DelphiX(24): TDirectDrawSurface.Blt()、BltFast();


这两个函数可不是一般的麻烦, 特别是 Blt(); 暂时搞不彻底, 这是初步尝试的例子:

Delphi 与 DirectX 之 DelphiX(24): TDirectDrawSurface.Blt()、BltFast();

代码文件:

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.


 
   

你可能感兴趣的:(Delphi)