Win2D 路径迷你语言 (存档)

警告

此组件已存档,在当前版本的 Windows 社区工具包中不可用。

虽然目前没有将此组件移植到 8.x 的计划,但欢迎社区表达兴趣或参与将其包含。

更多信息,请参阅:

原始文档如下。


Win2D 路径微型语言是基于 SVG 路径语言规范的强大而复杂的语言。 它有助于以更紧凑的方式指定复杂的几何图形、颜色、画笔、笔划和笔划样式。

使用 Win2D 路径微型语言,可以通过以下方式创建初始 CanvasPathGeometry 示例中的几何图形:

string pathData = “M 1 1 300 300 1 300 Z”;
CanvasGeometry triangleGeometry = CanvasPathGeometry.CreateGeometry(device, pathData);

要求

设备系列 通用、MinVersion 或更高版本
Namespace Microsoft.Toolkit.Uwp.UI.Media.Geometry
NuGet 包 Microsoft.Toolkit.Uwp.UI.Media

目录

Win2D 路径微型语言概述

Win2D 路径微型语言语法派生自 SVG 路径语法。 它是前缀表示法(即,命令后跟参数)。 为了确保在 Win2D 路径迷你语言中指定的数据简洁,必须遵循以下规则

  • 命令可以表示为onetwothree 字符(例如,Move 命令表示为 M ,LinearGradientBrush 命令表示为 LG)。
  • 可以消除多余的空格和分隔符(例如,M 100 100 L 200200包含不必要的空格,并且可以更紧凑地表示)。M100 100L200 200
  • 当同一命令连续多次使用时,可以省略后续命令中的命令字母(例如,可以在“M 100 200 L 200 100 L -100 -200”中删除第二个“L”,改用“M 100 200 L 200 100 -100 -200”)。
  • 所有命令的相对版本都可用(大写表示绝对坐标,小写表示相对坐标)。
  • 大多数参数都是整数或浮点值。 唯一允许的小数点是 Unicode U+0046 FULL STOP (“.”) 字符(也称为 Unicode 中的句点、点和小数点),不允许使用其他分隔符字符 [UNICODE]。 (例如,下面是路径数据流中的无效数值:“13,000.56”。相反,说:“13000.56”。
  • 对于命令的相对版本,所有坐标值都相对于命令开头的当前点。

在以下部分中,使用以下表示法:

  • () 指示参数分组。
  • + 指示需要一个或多个给定参数。
  • [] 指示方括号中指定的任何一个值。 例如 [01] 表示 0 或 1。
  • ? 表示可选参数

路径微型语言

路径表示形状的轮廓,可以填充、笔划、用作剪裁路径或三者的任何组合。

使用当前点的概念描述路径。 在用纸上绘图的类比中,可以将当前点视为笔的位置。 可以更改笔的位置,可以通过在直线或曲线中拖动笔来跟踪形状(打开或关闭)的轮廓。

可以使用以下命令定义路径

填充行为

Format Description
F [01] 绝对
f [01] 相对

Fill Behavior 指定如何组合几何图形或图形的相交区域以形成复合几何图形的区域。 它表示D2D1_FILL_MODE枚举基础上形成的CanvasFilledRegionDetermination枚举。 填充行为参数可以是 01

参数值0指示CanvasFilledRegionDetermination.Alternate,通过从该点向任意方向绘制一条射线到无穷大,然后计算光线穿过给定形状的路径段数,以确定某点是否位于填充区域中。 如果此数字为奇数,则点位于填充区域中;即使如此,该点位于填充区域之外。

参数值 1 表示一种确定方法,该方法通过从该点向任意方向绘制一条射线到无穷远,然后检查形状的线段与射线的交叉位置,来判断某个点是否位于路径的填充区域内。 从零开始计数,每当一个路径段从左到右穿过光线时加一,每当路径段从右到左穿过光线时减一,前提是左右是从光线的角度来看。 对交叉进行计数后,如果结果为零,则点位于路径外部。 否则,它位于路径内。

每个路径数据应只指定一个填充行为。 否则,将引发异常。

CanvasPathGeometry CanvasPathBuilder.SetFilledRegionDetermination()调用此命令的 API。

MoveTo

Format Description
M (x y)+ 绝对
m (x y)+ 相对

MoveTo 命令建立新的当前点。 效果就像“笔”被抬起并移动到新位置一样。 路径数据段必须以 Move 命令开头。 后续的“moveto”命令(即在移动命令不是首个命令时)表示新子路径的开始。

M (大写)表示绝对坐标将跟随,而 m (小写)则表示相对坐标将跟随。

如果命令 MoveTo 后跟多个坐标对,后续对将被视为隐式 LineTo 命令。 因此,如果MoveTo命令是相对的,隐式LineTo命令也是相对的;如果MoveTo命令是绝对的,隐式LineTo命令也是绝对的。

如果相对 MoveTom) 命令显示为路径的第一个元素,则其参数被视为一对绝对坐标。

在这种情况下,即使初始 MoveTo 值被解释为绝对 MoveTo坐标,后续坐标对也会被视为相对。

CanvasPathGeometry CanvasPathBuilder.BeginFigure()调用此命令的 API。

LineTo

Format Description
L (x y)+ 绝对
l (x y)+ 相对

从当前点绘制一条线到指定的(xy)坐标。 (x,y)成为新的当前点。

L (大写)表示绝对坐标将跟随,而 l (小写)则表示相对坐标将跟随。

可以指定多个坐标对来绘制多段线。 在命令结束时,新的当前点将设置为提供的最后一组坐标。

CanvasPathGeometry CanvasPathBuilder.AddLine()调用此命令的 API。

Horizontal LineTo

Format Description
H x+ 绝对
h x+ 相对

将水平线从当前点 (cpxcpy) 绘制到 (xcpy)。

H (大写)表示绝对坐标将跟随,而 h (小写)则表示相对坐标将跟随。

可以提供多个 x 值(虽然通常这没有意义)。 在命令的末尾,新的当前点变为 ( xcpy ) 表示最终值 x

CanvasPathGeometry CanvasPathBuilder.AddLine()调用此命令的 API。

Vertical LineTo

Format Description
V y+ 绝对
v y+ 相对

从当前点 (cpxcpy) 到 (cpxy) 绘制一条垂直线。

V (大写)表示绝对坐标将跟随,而 v (小写)则表示相对坐标将跟随。

可以提供多个 y 值(虽然通常这没有意义)。 在命令的末尾,新的当前点变为cpx (, y), 以达到最终值 y

CanvasPathGeometry CanvasPathBuilder.AddLine()调用此命令的 API。

立方贝塞尔

Format Description
C (x1 y1 x2 y2 x y)+ 绝对
c (x1 y1 x2 y2 x y)+ 相对

将立方贝塞尔曲线从当前点绘制到 (xy),使用 (x1y1)作为曲线开头的控制点,(x2y2作为曲线末尾的控制点。

C (大写)表示绝对坐标将跟随,而 c (小写)则表示相对坐标将跟随。

可以指定多个坐标集来绘制 polybézier 曲线。 在命令结束时,新的当前点将成为 polybézier 中使用的最终(xy)坐标对。

CanvasPathGeometry CanvasPathBuilder.AddCubicBezier()调用此命令的 API。

平滑立方贝塞尔

Format Description
S (x2 y2 x y)+ 绝对
s (x2 y2 x y)+ 相对

将立方贝塞尔曲线从当前点绘制到 (xy)。 假定第一个控制点是上一个命令上第二个控制点相对于当前点的反射。 如果没有上一个命令,或者如果上一个命令不是CcSs,则假定第一个控制点与当前点重合。

x2y2)是第二个控制点(即曲线末尾的控制点)。

S (大写)表示绝对坐标,而 s (小写)表示相对坐标将跟随。

可以指定多个坐标集来绘制多段贝塞尔曲线(polybézier)。 在命令结束时,新的当前点将成为 polybézier 中使用的最终(xy)坐标对。

CanvasPathGeometry CanvasPathBuilder.AddCubicBezier()调用此命令的 API。

二次贝塞尔

Format Description
Q (x1 y1 x y)+ 绝对
q (x1 y1 x y)+ 相对

将二次贝塞尔曲线从当前点绘制到 (x,y),使用 (x1,y1) 作为控制点。

Q (大写)表示绝对坐标,而 q (小写)表示相对坐标将跟随。

可以指定多个坐标集来绘制多段贝塞尔曲线。 在命令结束时,新的当前点将成为 polybézier 中使用的最终(xy)坐标对。

CanvasPathGeometry CanvasPathBuilder.AddQuadraticBezier()调用此命令的 API。

平滑二次贝塞尔

Format Description
T (x y)+ 绝对
t (x y)+ 相对

将二次贝塞尔曲线从当前点绘制到(x,y)。 假定控制点是上一个命令相对于当前点的控制点的反射。 (如果没有上一个命令,或者如果上一个命令不是,QqT或者t,假定控制点与当前点相吻合。

T (大写)表示绝对坐标,而 t (小写)表示相对坐标将跟随。

可以指定多个坐标集来绘制 polybézier 曲线。 在命令的末尾,新的当前点将成为 polybézier 中使用的最终(xy)坐标对。

CanvasPathGeometry CanvasPathBuilder.AddQuadraticBezier()调用此命令的 API。

Format Description
A (半径 radiusY 角度 IsLargeFlag SweepDirection x y)+ 绝对
a (半径 radiusY 角度 IsLargeFlag SweepDirection x y)+ 相对

将椭圆弧从当前点绘制到 ( xy )。 椭圆的大小和方向由两个半径(rxry)以及一个 x-axis-rotation 定义,指示椭圆整体如何相对于当前坐标系旋转。 椭圆的中心( cxcy )会自动计算,以满足其他参数施加的约束。

IsLargeFlag 指定弧线是否应采用更长或更短的方式,围绕椭圆联接其起点和终点(0 表示弧的扫描应π或更少,而 1 表示弧的扫描应π或更多)。

SweepDirection 指定绘制椭圆弧的方向(0 表示 CounterClockwise 且 1 表示顺时针)。

CanvasPathGeometry CanvasPathBuilder.AddArc()调用此命令的 API。

关闭路径

Format
Z
z

通过将直线从当前点绘制到当前子路径的初始点来关闭当前子路径。 Z由于命令z不采用任何参数,因此它们具有相同的效果。

CanvasPathGeometry CanvasPathBuilder.EndFigure()调用此命令的 API。

椭圆图

Format Description
O (radiusX radiusY x y)+ 绝对
o (radiusX radiusY x y)+ 相对

将椭圆图添加到路径。 参数radiusXradiusY分别表示 x 轴和 y 轴上的椭圆弧度。 ( x y ) 表示椭圆的中心。 当前点保持不变。

CanvasPathGeometry 在内部调用此命令的 CanvasPathBuilder.AddEllipseFigure() 扩展方法。

多边形图

Format Description
P (numSides radius x y)+ 绝对
p (numSides radius x y)+ 相对

将 n 面多边形添加到路径。 该 radius 参数表示圆的半径,以限制多边形顶点。 ( x y ) 表示多边形的中心。 当前点保持不变。

此命令在内部调用 CanvasPathBuilder.AddPolygonFigure() 扩展方法。

矩形图

Format Description
R (x y 宽度高度)+ 绝对
r (x y 宽度高度)+ 相对

将矩形添加到路径。 ( x y ) 表示矩形的左上角。 当前点保持不变。

CanvasPathGeometry 在内部调用此命令的 CanvasPathBuilder.AddRectangleFigure() 扩展方法。

RoundedRectangle 图形

Format Description
U (x y 宽度高度 radiusX radiusY)+ 绝对
u (x y 宽度高度 radiusX radiusY)+ 相对

将 RoundedRectangle 添加到路径。 ( x y ) 表示 RoundedRectangle 的左上角。 radiusXradiusY 分别表示 x 轴和 y 轴上的角曲线的弧度。 当前点保持不变。

CanvasPathGeometry 在内部调用此命令的 CanvasPathBuilder.AddRoundedRectangleFigure() 扩展方法。

CanvasBrush 微型语言

本部分详细介绍了如何将 Win2D 画笔定义为字符串及其创建的实例。 可以使用 CanvasBrush 微型语言创建以下 Win2D 画笔(它们全部实现 ICanvasBrush 接口)

  • SolidColorBrush
  • CanvasLinearGradientBrush
  • CanvasRadialGradientBrush

Win2D 路径微型语言使用以下语法来定义画笔及其属性

Format
<BrushTypeCommand> (<BrushAttributeCommand> <BrushAttributeParameters>)+

有些属性是可选的,而另一些属性则是必需的。 应按指定属性的顺序进行维护。

ICanvasBrush 属性命令

本部分介绍将用于定义和构造 ICanvasBrush 的各种画笔属性。

起点

Format
M (x y)

表示渐变开始的画布上的点。

端点

Format
Z (x y)

表示渐变结束的画布上的点。

不透明度

Format
O 透明度

表示画笔的不透明度。 参数 opacity 应具有 [0, 1] 范围内的值。

Alpha 模式

Format
A [012]

指定 alpha 通道影响颜色通道的方式。 此属性对应于 CanvasAlphaMode 枚举。 默认值为 0Premultiplied )。

成员 价值 Description
Premultiplied 0 alpha 值已被预乘。 在混合中,每个颜色都按 alpha 值进行缩放。 请注意,alpha 值本身在直接和预乘 alpha 中相同。 通常,没有颜色通道值大于 alpha 通道值。
Straight 1 alpha 通道指示颜色的透明度。
Ignore 2 将忽略 alpha 值。

缓冲区精度

Format
B [01234]

指定用于图形计算的位深度。 此属性对应于 CanvasBufferPrecision |枚举 |. 默认值为 0 (|Precision8UIntNormalized )。

成员 价值 Description
Precision8UIntNormalized 0 每个通道使用 8 位规范化整数。
Precision8UIntNormalizedSrgb 1 每个通道使用 8 位规范化整数标准 RGB 数据。
Precision16UIntNormalized 2 每个通道使用 16 位规范化整数。
Precision16Float 3 每个通道使用 16 位浮点数。
Precision32Float 4 每个通道使用 32 位浮点数。

边缘行为

Format
E [012]

指定位于渐变典型呈现区域之外的像素的行为。 此属性对应于 CanvasEdgeBehavior 枚举。 默认值为 0Clamp )。

成员 价值 Description
Clamp 0 重复画笔内容的边缘像素。
包装 1 将画笔的内容平铺。
Mirror 2 平铺画笔的内容,并翻转每个备用磁贴。

插值前颜色空间

Format
P [012]

指定在插值之前要使用的颜色空间。 此属性对应于 CanvasColorSpace 枚举。 默认值为 1Srgb )。

成员 价值 Description
Custom 0 颜色空间是自定义 ICC ColorManagementProfile。
Srgb 1 颜色空间为 sRGB。
ScRgb 2 颜色空间为 scRGB。

内插后颜色空间

Format
R [012]

指定要在插值后使用的颜色空间。 此属性对应于 CanvasColorSpace 枚举。 默认值为 1Srgb )。

成员 价值 Description
Custom 0 颜色空间是自定义 ICC ColorManagementProfile。
Srgb 1 颜色空间为 sRGB。
ScRgb 2 颜色空间为 scRGB。

原点偏移量

Format
F (x y)

指定从中心点的偏移量,用于生成画笔的径向渐变。

GradientStop

Format
S (offset hexColor)+

在渐变画笔中指定一个或多个渐变停止点(使用十六进制颜色)。

参数 offset 是指渐变停止点的位置,应是介于 0 和 1 之间的浮点数(含 0 到 1)。

hexColor参数表示以#RRGGBB#AARRGGBB格式指定的颜色。

示例:

“S 0.2 FF112233”
“S 0.1 #FF0000 0.4 #00FF00 0.9 #0000FF”

GradientStopHdr

Format
S (偏移 x y z w)+

指定渐变画笔中的一个或多个高动态范围渐变停止点。

参数 offset 是指渐变停止点的位置,它应该是介于 0 和 1 之间的浮点数(含 0 到 1)。

参数 x, y, zw 表示高动态范围颜色的组件。

示例:

“S 0.2 0.2 .5 .75 1”
“S 0.1 0.3 0.4 0.5 1.0 0.4 .3 .2 .1 0.9”

纯色画笔

Format
SC hexColor (O 不透明度)?
SC x y z w (O 不透明度)?

SolidColorBrush 由 SC 命令定义。 它有两个属性 - ColorOpacity

Color 属性被指定为十六进制颜色或高动态范围颜色。

Opacity 属性是可选的,可以通过 O 属性命令指定一个 [0, 1] 范围内的不透明度值。

示例:

“SC #FFAABBCC”
“SC #FF1233AA O .75”
“SC 0.1 0.3 0.4 0.5”
“SC 0.1 0.3 0.4 0.5 O 0.9”

LinearGradientBrush

Format
LG M x0 y0 Z x1 y1 (O 不透明度 A [012] B [01234] E [012] P[012] R [012])? S (offset hexColor)+

LinearGradientBrush 由 LG 命令定义。 它具有以下必需属性

  • StartPoint ( M
  • EndPoint (Z)
  • GradientStops ( S

它还具有以下可选属性

  • 不透明度 ( O
  • Alpha 模式 ( A
  • 缓冲区精度 ( B
  • 边缘行为 ( E
  • 预内插颜色空间(P
  • 后插值颜色空间 ( R

示例:

“LG M 0 80 Z0 0 S 0.00 #ffee5124, 0.18 #fff05627, 0.26 #fff15b29, 0.6 #fff58535, 1.00 #fff9af41”
“LG M 0 80 Z0 0 O 0.75 A 1 E 2 S 0.00 #ffee5124, 0.3 #fff05627, 0.7 #fff58535, 1.00 #fff9af41”

带有 GradientStopHdr 的 LinearGradientBrush(线性渐变画笔)

Format
LH M x0 y0 Z x1 y1 (O 不透明度 A [012] [01234] B [012] E [012] PR [012])? S (偏移 x y z w)+

带有 GradientStopHdr 的 LinearGradientBrush 由 LH 命令定义。 它具有以下必需属性

  • StartPoint ( M
  • EndPoint ( Z
  • GradientStopHdrs ( S

它还具有以下可选属性

  • 不透明度 ( O
  • Alpha 模式 ( A
  • 缓冲区精度 ( B
  • 边缘行为 ( E
  • 预插值颜色空间 (P
  • 后内插颜色空间 ( R

示例:

“LH M 0 80 Z0 0 P 1 R 1 S 0.00 0.9333333, 0.3176471, 0.1411765, 1, 0.14 0.9411765, 0.3372549, 0.1529412, 1, 0.26 0.945098, 0.3568628, 0.1607843, 1, 0.72 0.9607843, 0.5215687, 0.2078431, 1, 1.00 0.9764706, 0.6862745, 0.254902, 1”

RadialGradientBrush (径向渐变画笔)

Format
RGradX radY x y (O不透明度 A [012] B [01234] [012] E x1 y1 F [012] PR [012])? S (offset hexColor)+

RadialGradientBrush 由 RG 命令定义。 它具有以下必需属性

  • RadiusX
  • Y轴半径
  • CenterX ( x
  • CenterY ( y
  • GradientStops ( S

它还具有以下可选属性

  • 不透明度 ( O
  • Alpha 模式 ( A
  • 缓冲区精度 ( B
  • 边缘行为 ( E
  • 原点偏移量 ( F
  • 预内插颜色空间 ( P
  • 后插值颜色空间 ( R

示例:

“RG 40 6 0 32 0 4 00 S 0.00 #ffee5124, 0.18 #fff05627, 0.26 #fff15b29, 0.7 #fff58535, 1.00 #fff9af41”
“RG 40 60 320 40 0 A 1 B 2 E 2 S 0.00 #ffee5124, 0.3 #fff05627, 0.7 #fff58535, 1.00 #fff9af41”

带“GradientStopHdr”的“RadialGradientBrush”

Format
RHradX radY x y (O不透明度 A [012] B [01234] [012] E x1 y1 F [012] PR [012])? S (偏移 x y z w)+

命令参数

RadialGradientBrush 由 RG 命令定义。 它具有以下必需属性

  • RadiusX
  • Y半径
  • CenterX ( x
  • CenterY ( y
  • GradientStopHdrs ( S

它还具有以下可选属性

  • 不透明度 ( O
  • Alpha 模式 ( A
  • 缓冲区精度 ( B
  • 边缘行为 ( E
  • 原点偏移量 ( F
  • 预插值颜色空间 ( P
  • 后内插颜色空间 ( R

示例:

“RH 400 400 32 0 3 20 O 0.94 A 1 E 2 S 0.00 0.9333333, 0.3176471, 0.1411765, 1, 0.18 0.9411765, 0.3372549, 0.1529412, 1, 0.26 0.945098, 0.3568628, 0.1607843, 1, 0.72 0.9607843, 0.5215687, 0.2078431, 1, 1.00 0.9764706, 0.6862745, 0.254902, 1”

CanvasStrokeStyle 微型语言

Microsoft.Graphics.Canvas.Geometry.CanvasStrokeStyle 类定义绘制线条的笔划样式。 描边样式描述线条是否由短划线、点或实线组成、如何连接线段、端点的处理方式等。

本部分详细介绍了如何将 CanvasStrokeStyle 定义为一个字符串以及如何从中创建 CanvasStrokeStyle 实例。

Win2D 路径微型语言使用以下格式来定义 CanvasStrokeStyle 及其属性

Format
CSS<StrokeStyleAttributeCommand><StrokeStyleAttributeParameter>)+

有些属性是可选的,而另一些属性则是必需的。 应按指定属性的顺序进行维护。

CanvasStrokeStyle 属性

本部分介绍用于定义和构造 CanvasStrokeStyle 对象的各种笔划属性。

短划线样式

Format
DS [01234]

描述笔触样式中的短划线、点和间隙的顺序。 如果设置了此属性,则忽略此属性 CustomDashStyle 。 此属性对应于 CanvasDashStyle 枚举。 默认值为 0Solid )。

成员 价值 Description
实线 0 没有中断的实线。
划线 1 一条短划线,后跟一个长度相等的间距。 短划线和间隙的长度都是线条宽度的两倍。 等效的自定义短划线样式为 {2, 2}。
2 一个点后跟一个较长的间距。 等效的自定义短划线样式为 {0, 2}。
DashDot 3 短划线,后跟一个空格,再后跟一个点,然后是另一个空格。 等效的自定义短划线样式为 {2, 2, 0, 2}。
DashDotDot 4 短划线,后跟一个缝隙,后跟一个点,后跟另一个缝隙,后跟另一个缝隙。 等效的自定义短划线样式为 {2, 2, 0, 2, 0, 2}。

线条连接

Format
LJ [0123]

描述联接两行或线段的形状。 此属性对应于 CanvasLineJoin 枚举。 默认值为 0Miter)。

成员 价值 Description
Miter 0 常规角顶点。
棱台效果 1 斜面顶点。
圆形 2 圆角顶点。
MiterOrBevel 3 常规角顶点,除非联接超出斜接限制;否则,斜顶点。

Miter 限制

Format
ML 限制

描述斜接边缘长度与笔划厚度一半之比的限制。

短划线偏移量

Format
DO 抵消

描述笔划在虚线序列中开始的偏移距离。

启动上限

Format
SC [0123]

描述笔划开头使用的形状类型。 此属性对应于 CanvasCapStyle 枚举。 默认值为 0Flat)。

成员 价值 Description
平坦 0 不延伸至行最后一点的上限。
正方形 1 一半的正方形的长度等于线条粗细。
圆形 2 直径等于线条粗细的半圆形。
Triangle 3 等腰直角三角形的斜边长度等于线条的粗细。

端盖

Format
EC [0123]

描述笔划起始处所使用的形状类型。 此属性对应于 CanvasCapStyle 枚举。 默认值为 0Flat)。

成员 价值 Description
平坦 0 不超过行末端的限度。
正方形 1 一半的正方形的长度等于线条粗细。
圆形 2 直径等于线条粗细的半圆形。
Triangle 3 等腰直角三角形的斜边长度等于线条的粗细。

短划线上限

Format
DC [0123]

描述笔划开头使用的形状类型。 此属性对应于 CanvasCapStyle 枚举。 默认值为 0Flat )。

成员 价值 Description
平坦 0 不延伸超过线最后一点的盖。 如果 Dash Cap 设置为平面,则点的大小将为零,因此只有短划线可见。
正方形 1 一半的正方形的长度等于线条粗细。
圆形 2 直径等于线条粗细的半圆形。
Triangle 3 等腰直角三角形的斜边长度等于线的厚度。

转变行为

Format
TB [012]

描述世界如何转换、每英寸点数(DPI)和笔划宽度影响笔的形状。 此属性对应于 CanvasStrokeTransformBehavior 枚举。 默认值为 0Normal)。

成员 价值 Description
Normal 0 笔划遵循宽度。 当前设置世界转换、DPI 和笔划
Fixed 1 笔划不受全局变换的影响,但它确实符合 DPI 和笔划宽度。
细线 2 笔画被强制设定为 1 像素宽(在设备空间中),且不受世界变换、DPI 或笔画宽度的影响。

自定义短划线样式

Format
CDS (dashSize spaceSize)+

描述描述自定义短划线模式的数组。 数组元素指定模式中每个短划线和空格的长度。 第一个元素设置短划线的长度,第二个元素设置空格的长度,第三个元素设置短划线的长度等。 短划线模式中每个短划线和空格的长度是数组中的元素值和笔划宽度的乘积。

注释

当将 CustomDashStyle 设置为 null 时,该属性会被 DashStyle 属性替代。

此数组必须包含偶数元素。

示例:

“CDS 2 2 0 2 1 3”

定义 CanvasStrokeStyle

使用上一节中定义的属性,CanvasStrokeStyle 可以通过以下方式定义

Format
CSSDS [01234] LJ [0123] ML limit DO offset SC [0123] EC [0123] DC [0123] TB [012] CDS (dashSize spaceSize)+ )?

所有属性 CanvasStrokeStyle 都是可选的。 如果在定义字符串中 CanvasStrokeStyle 未指定任何属性,则会创建默认 CanvasStrokeStyle 对象。

注释

指定属性时,必须维护属性的顺序。

示例:

“CSS CDS 2 2 0 2 1 3”
“CSS”
“CSS DS 2 DO 2 SC 1 EC 2 ”

CanvasStroke 微型语言

ICanvasStroke 接口和 CanvasStroke 类

在 Win2D 中,用于向 CanvasGeometry 呈现轮廓的笔划由三个组件组成

  • 笔划宽度 – 定义笔划的宽度。
  • 笔划画笔 – 用于定义将呈现笔划效果的ICanvasBrush
  • 笔划样式 – 定义 CanvasStrokeStyle 笔划的样式。
  • 变换 - 定义笔刷的变换属性。

ICanvasStroke 接口在命名空间中 Microsoft.Toolkit.Uwp.UI.Media.Geometry 定义,封装这三个组件,类 CanvasStroke 实现此接口。

public interface ICanvasStroke
{
    ICanvasBrush Brush { get; }
    float Width { get; }
    CanvasStrokeStyle Style { get; }
    Matrix3x2 Transform { get; set; }
}

public sealed class CanvasStroke : ICanvasStroke
{
    public ICanvasBrush Brush { get; }
    public float Width { get; }
    public CanvasStrokeStyle Style { get; }
    public Matrix3x2 Transform { get; set; }

    public CanvasStroke(ICanvasBrush brush, float strokeWidth = 1f);
    public CanvasStroke(ICanvasBrush brush, float strokeWidth, CanvasStrokeStyle strokeStyle);
    public CanvasStroke(ICanvasResourceCreator device, Color strokeColor, float strokeWidth = 1f);
    public CanvasStroke(ICanvasResourceCreator device, Color strokeColor, float strokeWidth, CanvasStrokeStyle strokeStyle);
}

若要使用微型语言定义 CanvasStroke,命令 ST 按以下方式使用

Format
ST strokeWidth <CanvasBrushML><CanvasStrokeStyleML>

在此命令字符串中,strokeWidth 是一个正浮点数,CanvasBrushML 表示 CanvasBrush 微型语言,CanvasStrokeStyleML 表示 CanvasStrokeStyle 微型语言。

示例:

“ST 4.5 LG M 0 0 Z80 80 S 0.00 #ffff0000, 0.5 #ff00ff00, 0.99 #ff0000ff CSS DS 2 Do 2 SC 1 EC 2 CDS 2 2 0 2 1 3”
“ST 2 SC #ff0000”

创建几何图形、画笔、描边和描边样式

若要创建 CanvasGeomety、Brushes、CanvasStrokes 和 CanvasStrokeStyles 的实例,可以使用 CanvasPathGeometry 命名空间中的 Microsoft.Toolkit.Uwp.UI.Media.Geometry 类。