程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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:TempDelphiX.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