如何使用.NET检测任何具有下行程序的unicode字符

时间:2012-07-16 10:45:40

标签: unicode typography

我正在尝试最小化以编程方式构建的Windows窗体(使用C#)上的控件之间的垂直距离。这涉及适当地设置高度属性。

我发现如果控件的文本中不包含任何带有下行符的字母(即没有任何字符j,g,p,q或y),则控件高度可能小于它确实包含这样的字母(如果 包含带有下行字母的字母,那么如果高度不够则下降器会被切断)。

只要语言是英语或类似英语,它就可以正常测试上述5个字符中的任何一个,但我需要能够满足(几乎)任何语言。

有没有办法,给定一些任意的Unicode字符(也许是字体)来确定该Unicode字符是否有下降符?

2 个答案:

答案 0 :(得分:1)

没有为Unicode字符定义属性来指示下降器的存在,它实际上是字形设计的特征而不是字符。例如,“Q”在许多字体中都有下降,而“J”在某些字体中有一个。此外,根据上下文,您还应该考虑在字母下方放置变音符号,而不仅仅是基本字母的下降符号。也可能是变音符号以上字母。

因此,您需要阅读有关字符尺寸的字体信息(如果可用),或暂时在软件中绘制字符并测量其尺寸。

根据经验,任何低于字体大小1.1倍的行高都会导致某些字符和字体出现问题。使用1(“设置实体”)是不够的,因为字符实际上可能超出字体大小。

答案 1 :(得分:0)

在Windows中,调用GetPath()以获取一个数组,该数组包含构成字形字符串周长或轮廓的每个点的X / Y坐标。在数组中搜索min / max,这将获得包含字符串的矩形完全。右边的字母边缘。