处理字体时,有没有办法找出两个字符之间的空格应该是“1 2”?以像素为单位查找文本“空间”值
如果它在C++或C#中是已知的,我不介意。如果它在C++中,我将编组它,如果它在C#中,我将它保存到一个文件中并将其加载到C++中。我试着看看TextMetric结构,但它不在那里。
处理字体时,有没有办法找出两个字符之间的空格应该是“1 2”?以像素为单位查找文本“空间”值
如果它在C++或C#中是已知的,我不介意。如果它在C++中,我将编组它,如果它在C#中,我将它保存到一个文件中并将其加载到C++中。我试着看看TextMetric结构,但它不在那里。
如果您想要显示文本如何呈现的度量标准,则需要提供文本。您需要提供ascii空格字符。使用Kerning调整间距和使文本看起来更具吸引力的现代系统。
你能使用Graphics.MeasureString()并通过字体和" "
字符串与空间?
这种方法对于单个字符是非常不准确的,我认为它对单个空间返回零。 – kiw 2011-05-07 02:23:01
下面是一个使用形式的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 ;
}
Graphics.MeasureCharacterRanges得到相当好的结果通过之前和之后加入一个零宽度-木匠字符\u200D
测量单个字形(甚至空格)。但是,由于我认为零宽度木工,它确实忽略了所有的Kerning工具。
您需要一堆附加参数,但new StringFormat(StringFormat.GenericTypographic)
和Rectangle.Empty
对我来说确实很好。
它返回字符串中每个字符的漂亮浮点边界的数组。
我不知道你在问什么,你问如何根据打印的字体来计算一个空间占用多少像素? – Chad 2011-05-06 20:19:16
您是指字符之间的图形距离,还是称为空格的空白字符? – 2011-05-06 20:19:19
是的,我是,对你们俩。 – chadb 2011-05-06 23:07:46