程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi與 DirectX之DelphiX(19):繪圖表面(TDirectDrawSurface)如何加載圖片

Delphi與 DirectX之DelphiX(19):繪圖表面(TDirectDrawSurface)如何加載圖片

編輯:Delphi

上個例子中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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved