2011-05-06 82 views
0

处理字体时,有没有办法找出两个字符之间的空格应该是“1 2”?以像素为单位查找文本“空间”值

如果它在C++或C#中是已知的,我不介意。如果它在C++中,我将编组它,如果它在C#中,我将它保存到一个文件中并将其加载到C++中。我试着看看TextMetric结构,但它不在那里。

+0

我不知道你在问什么,你问如何根据打印的字体来计算一个空间占用多少像素? – Chad 2011-05-06 20:19:16

+0

您是指字符之间的图形距离,还是称为空格的空白字符? – 2011-05-06 20:19:19

+0

是的,我是,对你们俩。 – chadb 2011-05-06 23:07:46

回答

1

如果您想要显示文本如何呈现的度量标准,则需要提供文本。您需要提供ascii空格字符。使用Kerning调整间距和使文本看起来更具吸引力的现代系统。

1

你能使用Graphics.MeasureString()并通过字体和" "字符串与空间?

+0

这种方法对于单个字符是非常不准确的,我认为它对单个空间返回零。 – kiw 2011-05-07 02:23:01

0

下面是一个使用形式的Paint事件处理程序在C#的示例:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    float widthWithSpace = e.Graphics.MeasureString("1 2", new Font("Arial", 12)).Width; 
    float widthWithoutSpace = e.Graphics.MeasureString("12", new Font("Arial", 12)).Width; 
    float spaceWidthInPixels = widthWithSpace - widthWithoutSpace ; 
} 
1

Graphics.MeasureCharacterRanges得到相当好的结果通过之前和之后加入一个零宽度-木匠字符\u200D测量单个字形(甚至空格)。但是,由于我认为零宽度木工,它确实忽略了所有的Kerning工具。

您需要一堆附加参数,但new StringFormat(StringFormat.GenericTypographic)Rectangle.Empty对我来说确实很好。

它返回字符串中每个字符的漂亮浮点边界的数组。

相关问题