Direct2D (7) : 空间变换 转

涂孟超

``````{相关方法}
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;``````

涂孟超

Direct2D教程（十一）几何变换

2017/09/12
0
0
Direct2D教程（十二）图层

2017/10/26
0
0

2012/12/23
0
0
WhiteStarUML 5.6.1 发布，UML 建模软件

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

daxiaoming
2015/01/26
2.8K
9

Dy_
2014/01/16
8.2K
10

Ubuntu16.04下安装docker

[TOC] 本文开发环境为Ubuntu 16.04 LTS 64位系统，通过apt的docker官方源安装最新的Docker CE(Community Edition)，即Docker社区版，是开发人员和小型团队的理想选择。 1. 开始安装 1.1 由于...

24分钟前
3
0

dragon_tech
36分钟前
1
0
day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下？蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍，并有着更低的脂肪和含糖量”，听起来诱人又美味的并不是羊奶或豆奶，而是你可能打死都想不到...

41分钟前
8
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

46分钟前
2
0
OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单（2018）请戳（这里） 【今日歌曲】 @达尔文 ：分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌，请使劲儿戳（这里...

350
6