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

本文提供了一个使用Delphi和DirectX进行图像处理的示例,包括如何加载图像、使用不同参数进行图像复制(Blt)操作及快速绘制(BltFast)。

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

o_091155.gif

代码文件:
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.

类似“爱情类”RPG游戏,类似主题医院及暗黑破坏神的场景,还算曲折的故事情节,动听的音乐(MP3格式),动人的结尾动画(AVI格式因为太大,不便上传),现奉献全部源代码,及编译所需组件,有兴趣着可以用此来 ";编撰";自己未实现的梦. NewStar 1998 操作系统: win98-win2000 编译语言环境: Delphi 3.0 (4.0) 美工:推荐 Abode Photoshop 4.0 动画制作环境: 推荐Asymetrix DVP 4.0 DELPHI3.0 游戏VCL组件安装: 1、Anigrp10.dcu :动画工程师引擎,负责场景动画 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中Anigrp10.dcu,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将Anigrp10.dcu复制到Delphi3 安装目录 Lib目录下。 2、AMixer.pas :声音控制引擎,负责声音效果 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中AMixer.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将AMixer.pas复制到Delphi3 安装目录 Lib目录下。 2、MPEGPLAYER.pas: MP3音乐声音控制引擎,负责MP3音乐播放 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中MPEGPLAYER.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将MPEGPLAYER.pas复制到Delphi3 安装目录 Lib目录下。 编译注意:在编译提供的样例程序时,请将Dbclient.dll及Mpegdll.dll复制到样例程序目录中。 场景对话文件编辑: 游戏中所有场景对话都保存在Dat.cdx文件中,要修改对话,可以用Delphi的ClientDataSet 组件的LoadFromFile及SaveToFile方法打开本文件读写,文件内容可以在DBGrid中显示,采用 DataSource来连接ClientDataSet和DBGrid. EMAIL: newstarchj@163.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值