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

  • A+
所属分类:[开发技巧]

个例子中 TDirectDrawSurface 是从 TDXImageList 中获取的图片,
其实 TDirectDrawSurface 自己获取图片的方法有很多:

TDirectDrawSurface.LoadFromFile();
TDirectDrawSurface.LoadFromStream();
TDirectDrawSurface.LoadFromGraphic();
TDirectDrawSurface.LoadFromGraphicRect();
TDirectDrawSurface.LoadFromDIB();
TDirectDrawSurface.LoadFromDIBRect();

文件代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DXDraws, StdCtrls,DIB;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  ImgPath1 = 'C:\Temp\DelphiX.bmp';

procedure TForm1.Button1Click(Sender: TObject);
var
  MySurface: TDirectDrawSurface;
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  MySurface.LoadFromFile(Imgpath1);
  DXDraw1.Surface.Fill($EEEEEE);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(MySurface);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MySurface: TDirectDrawSurface;
  Stream: TMemoryStream;
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  Stream := TMemoryStream.Create;
  Stream.LoadFromFile(ImgPath1);
  MySurface.LoadFromStream(Stream);
  DXDraw1.Surface.Fill($CCCCCC);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(Stream);
  FreeAndNil(MySurface);

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  MySurface: TDirectDrawSurface;
  bit : TGraphic;
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  bit := TBitmap.Create;
  bit.LoadFromFile(ImgPath1);

  MySurface.LoadFromGraphic(bit);

  DXDraw1.Surface.Fill($999999);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(bit);
  FreeAndNil(MySurface);

end;

procedure TForm1.Button4Click(Sender: TObject);
var
  MySurFace: TDirectDrawSurface;
  bit: TBitmap;
begin
  MySurFace := TDirectDrawSurface.Create(DXDraw1.DDraw);
  bit := TBitmap.Create;
  bit.LoadFromFile(ImgPath1);
  MySurFace.LoadFromGraphicRect(bit,
  bit.Width div 2, bit.Height div 2,Rect(0,0,bit.Width, bit.Height));
  DXDraw1.Surface.Fill($666666);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(bit);
  FreeAndNil(MySurface);

end;

procedure TForm1.Button5Click(Sender: TObject);
var
  MySurface: TDirectDrawSurface;
  dib: TDIB;
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  dib := TDIB.Create;
  dib.LoadFromFile(ImgPath1);

  MySurface.LoadFromDIB(dib);
  DXDraw1.Surface.Fill($33333);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(dib);
  FreeAndNil(MySurface);
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  MySurface: TDirectDrawSurface;
  dib: TDIB;
begin
  MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
  dib :=TDIB.Create;
  dib.LoadFromFile(ImgPath1);
  MySurface.LoadFromDIBRect(dib,DXDraw1.Width,
                        DXDraw1.height,Rect(0,0,DIB.Width, DIB.Height));
  DXDraw1.Surface.Fill(0);
  DXDraw1.Surface.Draw(0,0,MySurface);
  DXDraw1.Flip;
  FreeAndNil(dib);
  FreeAndNil(MySurface);
end;
end.
 

 文件下载:

200902101538030218.rar

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
广告也精彩
avatar
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: