zoukankan      html  css  js  c++  java
  • Delphi 与 DirectX 之 DelphiX(18): TDXDraw 中描绘图片的命令


    前面的绘图命令都是来自 TDXImageList,
    准确地说是来自 TDXImageList.Items 所包含的 TPictureCollectionItem 对象.

    那 TDXDraw 本身有没有绘图命令呢?
    TDXDraw 本身没有绘图命令, 但它的有绘图表面(TDirectDrawSurface), 譬如: Surface、Primary;
    TDXDraw 的绘图表面有更多的绘图命令, 另外 TDXDraw 可以多个绘图表面.

    TDirectDrawSurface 的绘图命令和 TPictureCollectionItem 的绘图命令最大的区别是它们的图像来源;
    TDirectDrawSurface 的图像来源必须是另一个已绘制好的 TDirectDrawSurface 对象.

    这里列举的只是 TDirectDrawSurface 和 TPictureCollectionItem 类似的描绘图片的命令:
    TDirectDrawSurface.Draw(); TDirectDrawSurface.StretchDraw(); TDirectDrawSurface.DrawAdd(); TDirectDrawSurface.DrawAlpha(); TDirectDrawSurface.DrawSub(); TDirectDrawSurface.DrawAddCol(); TDirectDrawSurface.DrawAlphaCol(); TDirectDrawSurface.DrawSubCol(); TDirectDrawSurface.DrawRotate(); TDirectDrawSurface.DrawRotateAdd(); TDirectDrawSurface.DrawRotateAdd(); TDirectDrawSurface.DrawRotateAlpha(); TDirectDrawSurface.DrawRotateSub(); TDirectDrawSurface.DrawRotateAddCol(); TDirectDrawSurface.DrawRotateAlphaCol(); TDirectDrawSurface.DrawRotateCol(); TDirectDrawSurface.DrawRotateSubCol(); TDirectDrawSurface.DrawWaveX(); TDirectDrawSurface.DrawWaveXAdd(); TDirectDrawSurface.DrawWaveXAlpha(); TDirectDrawSurface.DrawWaveXSub(); TDirectDrawSurface.DrawWaveY(); TDirectDrawSurface.DrawWaveYAdd(); TDirectDrawSurface.DrawWaveYAlpha(); TDirectDrawSurface.DrawWaveYSub();

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DXDraws, StdCtrls;
    
    type
      TForm1 = class(TForm)
        DXDraw1: TDXDraw;
        DXImageList1: TDXImageList;
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
      PicItem: TPictureCollectionItem;
    
    procedure TForm1.FormCreate(Sender: TObject);
    const
      ImgPath1 = 'C:\Temp\DelphiX.bmp';
    begin
      DXImageList1.DXDraw := DXDraw1;
      PicItem := TPictureCollectionItem(DXImageList1.Items.Add);
      PicItem.Picture.LoadFromFile(ImgPath1);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MySurface: TDirectDrawSurface;
    begin
      MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
      PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下}
      MySurface.SetSize(PicItem.Width, PicItem.Height);
      MySurface.Fill(0);
      PicItem.Draw(MySurface, 0, 0, 0);
    
      DXDraw1.Surface.Fill(0);
      DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2,
                           (DXDraw1.Height - MySurface.Height) div 2,
                           MySurface);
      DXDraw1.Flip;
      FreeAndNil(MySurface);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      MySurface: TDirectDrawSurface;
      m,n: Integer;
    begin
      m := 40; n := 15;
      MySurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
      PicItem.Restore; {Surface.Draw 的矩形范围好像能直接作用到列表中的图片, 需要恢复一下}
      MySurface.SetSize(PicItem.Width, PicItem.Height);
      MySurface.Fill(0);
      PicItem.Draw(MySurface, 0, 0, 0);
    
      DXDraw1.Surface.Fill(0);
      DXDraw1.Surface.Draw((DXDraw1.Width - MySurface.Width) div 2 + m,
                           (DXDraw1.Height - MySurface.Height) div 2 + n,
                           Bounds(m, n, MySurface.Width - m*2, MySurface.Height - n*2),
                           MySurface);
      DXDraw1.Flip;
      FreeAndNil(MySurface);
    end;
    
    end.
    

  • 相关阅读:
    SQL Server 附加数据库,报只读文件,无权修改其中某些文件
    NLog.config 配置
    系统架构设计师论文可靠性设计
    二、软件设计原则
    JavaScript 判断数组是否含有重复值
    mysql 添加索引 mysql 如何创建和删除索引
    利用pandas,BytesIO,zipfile打包csv文件,生成压缩文件
    不良人mysql索引
    转mysql数据库允许空值索引问题
    多线程中ThreadPoolExecutor.map()中传递多个参数
  • 原文地址:https://www.cnblogs.com/del/p/1375723.html
Copyright © 2011-2022 走看看