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

这两个函数可不是一般的麻烦, 特别是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.

时间: 2024-10-31 10:24:49

Delphi与DirectX之DelphiX(24):TDirectDrawSurface.Blt()、BltFast();的相关文章

Delphi与DirectX之DelphiX(87): TDIB.DrawTransparent、DrawTranslucent、Dra

Delphi与DirectX之DelphiX(87): TDIB.DrawTransparent.DrawTranslucent.DrawAlpha(); TDIB.DrawTransparent: 按指定的透明色透明; TDIB.DrawTranslucent: 先按指定的透明色透明, 然后再半透明; DIB.DrawAlpha: 先按指定的透明色透明, 再按指定的透明度透明. 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages,

Delphi与DirectX之DelphiX(17):TPictureCollectionItem.PatternWidth、Patte

Delphi与DirectX之DelphiX(17):TPictureCollectionItem.PatternWidth.PatternHeight 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls; type TForm1 = class(TForm) DXD

Delphi与DirectX之DelphiX(7)

Delphi与DirectX 之DelphiX(7): 给TDXImageList加载图片的最后方案 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXImageList

Delphi与DirectX之DelphiX(6)

Delphi与DirectX之DelphiX(6): 让TDXImageList和常规VCL交互使用 本例测试了两个问题: 1.其他 VCL 加载的图片能否给 TDXImageList 使用; 2.TDXImageList 中的图片能否给其他 VCL 使用. 例子中先用 TPicture 加载了图片, 然后给 TDXImageList; 然后把图片绘制在了窗体上, 而非 TDXDraw 中. 继续了解点 TDXImageList: TDXImageList 控件只有两个属性: DXDraw 和

Delphi与DirectX之DelphiX(1):安装测试

测试 Demo 下载: files.cnblogs.com/del/DelphiX_1.rar (在 Delphi 2007 和 2009 下均编译通过) 其实按照这里(www.cnblogs.com/del/archive/2008/06/13/1219324.html)的介绍, 比下载来的快, 也不需要下载. DirectX, 微软很久的技术了; 从 Windows Vista 开始, DirectX 已经是微软操作系统的界面基础了. 在 Delphi 下使用 DirectX 比较流行的有下

Delphi与DirectX之DelphiX(20):TDirectDrawSurface.FillRect...

TDirectDrawSurface.Fill(); TDirectDrawSurface.FillRect(); TDirectDrawSurface.FillRectAlpha(); TDirectDrawSurface.FillRectAdd(); TDirectDrawSurface.FillRectSub(); 其中 Fill 在前面每个例子中都有用到; 另外注意: 这几个函数中的颜色格式有点乱: Fill 与 FillRect 使用的是非 Delphi 的颜色格式, 它们使用的红色应

Delphi与 DirectX之DelphiX(19):绘图表面(TDirectDrawSurface)如何加载图片

上个例子中TDirectDrawSurface是从TDXImageList中获取的图片, 其实TDirectDrawSurface自己获取图片的方法有很多: TDirectDrawSurface.LoadFromFile(); TDirectDrawSurface.LoadFromStream(); TDirectDrawSurface.LoadFromGraphic(); TDirectDrawSurface.LoadFromGraphicRect(); TDirectDrawSurface.

Delphi与DirectX之DelphiX(23):TDirectDrawSurface.Blur;

本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, StdCtrls; type TForm1 = class(TForm) DXDraw1: TDXDraw; Button1: TButton; Button2: TButton; Button3: TButton; procedur

Delphi与DirectX之DelphiX(21):TDirectDrawSurface的绘图命令

TDirectDrawSurface.PokeLine(); TDirectDrawSurface.PokeLinePolar(); TDirectDrawSurface.PokeBox(); TDirectDrawSurface.PokeBlendPixel(); TDirectDrawSurface.PokeCircle(); TDirectDrawSurface.PokeEllipse(); TDirectDrawSurface.PokeFilledEllipse(); TDirectDr