DirectWrite.TextLayout转换矩阵无效

时间:2013-07-23 16:18:11

标签: directx direct2d sharpdx directwrite

我正在使用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兼容的,这会导致我的问题?

1 个答案:

答案 0 :(得分:2)

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