2015-03-31 37 views
0

我想用SharpDX來計算可以包圍字形的最小矩形。該方法GetGdiCompatibleGlyphMetrics似乎並沒有返回正確的價值觀爲我的每一個角色似乎也有1000+的寬度和高度,而我指定的16尖銳的dx最小的矩形,包含字形

fontFace = new FontFace(factory, FontFaceType.Truetype, fontFileArray, 0, FontSimulations.None);  
var glyphMetrics = fontFace.GetGdiCompatibleGlyphMetrics(16, 1, null, false, glyphIndices, false); 

如果有人有一個想法,字體大小,我會很感激。

回答

1

我找到了解決方案。我會在這裏發佈它以備將來的問題。

FontFace類有一個名爲FontFace1它本身有一個方法GetKerningPairAdjustments兒童類。這個字距參數解決了一切。

0

這可能是因爲字體大小(16)是使用與屏幕分辨率不同的測量單位設置的。

Charles Petzold幾乎是這些計算方面的專家,並且在他的blog和他的書中(他們總是推薦閱讀Windows編碼)。確切知道答案的唯一方法就是自己計算當前的屏幕分辨率和DPI設置。

+0

我知道字體大小可能是錯誤的。我必須給它一個傾角。我只是無法弄清楚如何去做。無論如何,你能否給我一個例子?我所知道的是,我想要一個16的字體大小(不知道哪個單位通常表示它)。我的屏幕是120dpi的顯示器。 – Slel 2015-04-02 15:36:11

+0

對於WPF中的字體大小,每個點都是1/96英寸。所以16點的字體大小將是0.1667英寸高。 – 2015-04-06 09:18:21

+0

再次問候。我設法用正確的字體大小和東西來計算結果。但是,我在計算以下字符串上的字形邊界矩形時遇到問題:「b A」。首字母「A」似乎與兩個字母之間的空白重疊,導致計算出的方框與「A」的實際位置略有偏移。任何想法? Thx – Slel 2015-04-09 16:15:38

0

GetGdiCompatibleGlyphMetrics以設計單位返回度量標準,您必須使用字體大小,每個傾斜像素的比例(在您的案例中爲1)以及您的字體設計的Em框大小來自行調整它們。這將爲您提供縮放設計指標。 GetKerningPairAdjustments與此無關,只有字體具有字距對數據,並且如果實際在佈局中啓用了字距調整纔可以使用它。請注意,它與佈局可能從整形中獲得的缺省字距不同,因爲GPOS數據不必與匹配字距對數據匹配,所以不能假定它是相同的。無論如何,如果你想得到實際的墨盒,你必須渲染一個字形,沒有其他方法來獲得準確的結果。