zoukankan      html  css  js  c++  java
  • Delphi 与 DirectX 之 DelphiX(19): 绘图表面(TDirectDrawSurface)如何加载图片


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

  • 相关阅读:
    手动安装mysql
    spring boot 配置注入
    IOS-电话拦截
    重新入坑-IntelliJ Maven
    git使用问题
    Intelij U
    iTunes空间不足无法备份iphone的问题
    Centos7最小化安装
    实操笔记
    centos7中端口及服务对应情况(笔记)
  • 原文地址:https://www.cnblogs.com/del/p/1375867.html
Copyright © 2011-2022 走看看