0

我正在使用 DirectWrite (通过SharpDX)绘制一个 TextLayout 并且它按预期工作,除了几件事。我正在调用这个 TextLayout 构造函数:

http://sharpdx.org/documentation/api/m-sharpdx-directwrite-textlayout--ctor-2

我的代码非常简单:

// define 45 deg rotation matrix
var transformMatrix = new SharpDX.DirectWrite.Matrix();
transformMatrix.M11 = 0.7f;
transformMatrix.M12 = 0.7f;
transformMatrix.M21 = -0.7f;
transformMatrix.M22 = 0.7f;
transformMatrix.Dx = 0;
transformMatrix.Dy = 0;

var pixelsPerDip = 5;

var TextLayout = new SharpDX.DirectWrite.TextLayout(DWFactory, "Hello world!",
        TextFormat, 400, 200, pixelsPerDip, transformMatrix, true);

我可以将变换矩阵更改为任何值,但它对我的输出没有影响。我还发现pixelsPerDip除了在我指定零时不绘制文本之外没有任何效果。我深入研究了 SharpDX 源,这些输入似乎得到了正确处理。我究竟做错了什么?

我正在使用的 TextLayout 构造函数调用CreateGdiCompatibleTextLayout()。我正在做/使用的其他事情是否可能与 GDI 不兼容,这会导致我的问题?

4

1 回答 1

2

传递给 IDWriteTextLayout 构造函数的转换仅影响布局的提示/网格拟合和细微指标(除非您需要与 GDI 兼容的像素对齐指标,否则创建自然布局的其他构造函数将提供更准确的子像素布局)。要绘制具有不同方向的文本布局,您必须设置用于绘制的任何内容的变换(如果您使用的是 D2D 设备上下文/渲染目标,则为 SetTransform,如果使用 IDWriteBitmapRenderTarget,则为 SetCurrentTransform)。

于 2013-10-30T00:57:59.540 回答