2015-03-31 33 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数据不必与匹配字距对数据匹配,所以不能假定它是相同的。无论如何,如果你想得到实际的墨盒,你必须渲染一个字形,没有其他方法来获得准确的结果。