上个例子中 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);
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;
{使用 TDIB 需要 uses DIB 单元}
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($333333);
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.