wpf - 如何在 WPF 中找到任意字形的精确大小?

标签 wpf fonts size height glyph

我需要找到任意字体中每个字符的精确大小。

使用 GlyphTypeface 加载字体类。

问题是我只能使用 AdvanceWidths 属性直接访问字形的宽度,但每个字符的高度相同,并且设置为 Height属性。

似乎可以使用 Baseline、Height、XHeight、BottomSideBearings 和 TopSideBearings 属性的组合来计算单个字符高度,但没有关于所有这些值的真正含义的文档。整个字体的基线、高度和 XHeight 值是恒定的,而其他两个 - BottomSideBearings 和 TopSideBearings - 我找不到它们的含义。

一般来说,是否有任何信息如何计算任意字体的单个字形的大小? (只有“TTF”文件,或者可以从中加载任何其他 GlyphTypeface)。

最佳答案

经过一番研究,找到了计算字符大小的正确方法:

var typeface = new GlyphTypeface(new Uri(fontpath));
var character = 'W';
var charIndex = typeface.CharacterToGlyphMap[character];

var width = typeface.AdvanceWidths[charIndex];
var height = typeface.Height - typeface.TopSideBearings[charIndex]
                             - typeface.BottomSideBearings[charIndex];

这将给出以 em 为单位的字符大小 - 要找到实际大小,需要将其乘以字体大小。

关于wpf - 如何在 WPF 中找到任意字形的精确大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971547/

相关文章:

jquery - 整个应用程序中的字体大小

android - 如何在开发过程中找到应用程序的大小

wpf - 即使左键单击按钮也保留网格焦点状态

html - 使用本地存储在计算机上的字体,不起作用

c# - ClickOnce安装错误

java - SWT 中的字形指标?

C# 编码(marshal).SizeOf

c# - WPF ContextMenu itemtemplate,menuitem inside menuitem

.net - 在运行时获取 OutofMemoryException 消息 "Insufficient memory to continue the execution of the program"