文档章节

Direct2D (7) : 空间变换

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 291
阅读 11
收藏 0

{相关方法} 
TDirect2DCanvas.RenderTarget.SetTransform();
TDirect2DCanvas.RenderTarget.GetTransform();

{相关结构}
TD2DMatrix3x2F (或D2D_MATRIX_3X2_F) //因第三列的值在这里是固定的(0,0,1),所以这里用的是 3*2 的矩阵;该结构重载了 * 运算符

{TD2DMatrix3x2FHelper 为 TD2DMatrix3x2F 提供的方法(多为 class 方法)}
Identity();     //初始化 TD2DMatrix3x2F,默认值:_11、_22 为 1.0,其它是 0
Translation();  //平移
Scale();        //放缩
Rotation();     //旋转
Skew();         //斜切
Determinant();  //计算行列式
IsInvertible(); //是否可逆
Invert();       //逆向运算
SetProduct();   //乘

{相关全局函数}
D2D1MakeRotateMatrix();   //旋转
D2D1MakeSkewMatrix();     //斜切
D2D1IsMatrixInvertible(); //是否可逆
D2D1InvertMatrix();       //逆向运算


测试代码:

uses Direct2D, D2D1;

procedure TForm1.FormPaint(Sender: TObject);
var
  cvs: TDirect2DCanvas;
  pts: array[0..2] of TPoint;
  matrix: TD2DMatrix3x2F;
begin
  pts[0] := Point(ClientWidth div 2, ClientHeight div 2);
  pts[1] := Point(ClientWidth div 5, ClientHeight div 2);
  pts[2] := Point(ClientWidth div 2, ClientHeight div 5);

  cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
  cvs.BeginDraw;
  cvs.Brush.Style := bsClear;

  {原始}
  cvs.Pen.Color := clSilver;
  cvs.Pen.Width := 9;
  cvs.Polygon(pts);

  cvs.Pen.Width := 2;

  {平移}
  matrix := TD2DMatrix3x2F.Translation(90, 50);
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clRed;
  cvs.Polygon(pts);

  {放缩}
  matrix := TD2DMatrix3x2F.Scale(1.5, 0.5, pts[0]);
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clBlue;
  cvs.Polygon(pts);

  {旋转}
  matrix := TD2DMatrix3x2F.Rotation(90, pts[0]);
//  D2D1MakeRotateMatrix(90, pts[0], @matrix); //同上一行
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clGreen;
  cvs.Polygon(pts);

  {斜切}
  matrix := TD2DMatrix3x2F.Skew(60, 0, pts[0]);
//  D2D1MakeSkewMatrix(60, 10, pts[0], @matrix); //同上一行
  cvs.RenderTarget.SetTransform(matrix);
  cvs.Pen.Color := clPurple;
  cvs.Polygon(pts);

  cvs.EndDraw;
  cvs.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;


效果图:



本文转载自:http://www.cnblogs.com/del/archive/2011/04/01/2001989.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Direct2D教程(十一)几何变换

什么是几何变换(Transform) 在图形学中,主要有三种几何变换,分别是平移(Translate),旋转(Rotation)和缩放(Scaling)。在D2D中,这三种变换都有实现,而且还有一种不太常见的变换,...

吞吞吐吐的
2017/09/12
0
0
Direct2D教程(十二)图层

什么是Layers? Layer,中文译成图层,在Direct2D中可以用来完成一些特殊效果,使用Layer的时候,先将Layer Push到render target,然后进行绘制,此时是直接绘制在Layer上的,绘制完毕后,将...

吞吞吐吐的
2017/10/26
0
0
深度解读 - Windows 7核心图形架构细致分析(转贴)

原帖地址:http://technet.microsoft.com/zh-cn/library/ee921514.aspx 如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版。 Windows 7 在 Windows Vista 的基础上进行了大量的...

迈克老狼1
2012/12/23
0
0
WhiteStarUML 5.6.1 发布,UML 建模软件

WhiteStarUML 发布了 5.6.1 版本。 该版本的改动: 新增选项:现在可以在 Windows 7+上面选择启用 Direct2D 来绘制反锯齿图形。勾选 General -> Use Direct2D 添加了“复制/粘贴格式”命令 ...

daxiaoming
2015/01/26
2.7K
9
Windows桌面应用程序(1-2-4-7th) DPI和设备无关的像素

要使用Windows图形进行有效编程,您必须了解两个相关的概念: 每英寸点数(DPI) 设备无关像素(DIP)。 我们从DPI开始。这将需要短暂的绕行排版。在印刷术中,类型的大小以称为点的单位来测量。一点...

qq_37422196
01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

区块链教程以太坊源码分析chain-indexer区块链索引一

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一 chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议...

兄弟连区块链入门教程
6分钟前
0
0
社会化分享插件集成分享

一.前提摘要 社会化分享每个app必备的推广需求,无论是拉新,邀请,游戏奖励,等等都离不开分享的影子,下面我们介绍下社会化分享的插件; 首先要说下,现在的社交App,社区App等,国内外的...

佳妮
6分钟前
0
0
IOC 之 Spring 统一资源加载策略

统一资源:Resource org.springframework.core.io.Resource 为 Spring 框架所有资源的抽象和访问接口 它继承 org.springframework.core.io.InputStreamSource接口 作为所有资源的统一抽象,S...

职业搬砖20年
7分钟前
0
0
Python爬虫实战入门一:工具准备

一、基础知识 使用Python编写爬虫,当然至少得了解Python基本的语法,了解: 基本数据结构 数据类型 控制流 函数的使用 模块的使用 不需要过多过深的Python知识,仅此而已。 个人推荐《Pytho...

糖宝lsh
11分钟前
0
0
Hanlp中使用纯JAVA实现CRF分词

Hanlp中使用纯JAVA实现CRF分词 与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与...

左手的倒影
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部