2013-07-23 61 views
0

我使用DirectWrite(通過SharpDX)繪製TextLayout,它的工作方式與預期一樣,除了幾件事情。我打電話此TextLayout構造:DirectWrite.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兼容的,這會導致我的問題?

回答

2

傳遞給IDWriteTextLayout構造函數的轉換僅影響提示/網格擬合和佈局的細微度量(除非您需要GDI兼容像素對齊度量,另一個創建自然佈局的構造函數將提供更精確的子像素佈局)。到繪製具有不同方向的文本佈局,您必須設置用於繪製的任何變換(如果您正在使用D2D設備上下文/渲染目標或SetCurrentTransform(如果IDWriteBitmapRenderTarget),則使用SetTransform進行變換)。