2012-04-18 56 views
2

我想测量字符串的长度为像素单位。我在网上搜索了2天,但没有运气。最后,我几分钟前从博客中发现了一些代码段,并对其进行了一些修改。这里是我的功能:C#字符串测量

private void cmdMeasure_Click(object sender, EventArgs e) 
{ 
    Font fntStyle = new Font("Arial", 16, FontStyle.Regular, GraphicsUnit.Pixel); 
    Size textSize = TextRenderer.MeasureText(str2measure.Text, fntStyle); 
    MessageBox.Show(textSize.ToString()); 
} 

问:

什么是16的单位?是em,pt还是GraphicsUnit枚举的单位?我没有真正得到由c#定义的描述,“单位参数指定的单位中的新字体的em尺寸”。

TextRenderer.MeasureText方法是否包含其度量中的字符之间的空格?

+3

继文档[here](http://msdn.microsoft.com/en-us/library/ms141987.aspx)和[here](http://msdn.microsoft.com/en-us/library /system.drawing.graphicsunit.aspx)显示16以像素为单位,因为参数'GraphicsUnit.Pixel'被提供给Font构造函数。 – 2012-04-18 03:47:45

+0

由于GraphicsUnit.Pixel将会像素化,并且对于大多数字体来说意味着大写字母W的高度。字符可以自然重叠,并且测量将返回最终大小,从左侧到右侧加上边缘-填充。你也可以使用Graphics.MeasureCharacterRanges。 – SimpleVar 2012-04-18 03:52:41

+0

http://stackoverflow.com/questions/451903/how-can-i-convert-a-string-length-to-a-pixel-unit – 2012-04-18 03:56:30

回答

3

什么是16的单位?是em,pt还是GraphicsUnit 枚举的单位?我实际上没有得到由c#定义的描述“ 的em尺寸,单位参数指定单位中的新字体”。

正如其他人所说,它是像素,因为你传递GraphicsUnit.Pixel。

TextRenderer.MeasureText方法在测量中包含 之间的空格吗?

是的。它为您提供围绕整个文本块的边界框的尺寸。

+0

我试图测量字符串“a”,它返回的宽度17和18的高度。那么你是说宽度还是高度减去16等于边界框的厚度? – ELM 2012-04-18 04:11:09

+0

17x18尺寸仅仅意味着在Arial屏幕上绘制的大小为16字体的“a”将非常适合17x18矩形。把它看作是“用来”显示文本的区域。 – Larsenal 2012-04-18 04:23:09

+0

17x18的单位是多少?那也是以像素为单位吗? – ELM 2012-04-18 06:11:11

1

TextRenderer.MeasureString确实考虑了空间。在你的例子中,数字16以像素为单位。

虽然,我不确定你是否正确测量你的字符串。我认为你需要从str2measure文本框让你的字体:

Size textSize = TextRenderer.MeasureText(str2measure.Text, str2measure.Font); 
+0

我试图改变str2measure.Text的font属性,但函数返回相同结果。 – ELM 2012-04-18 04:13:24

0

答案Q1。仅当您传递GraphicsUnit时,它才是像素。像素

Ans Q2。它正在考虑整个文本块,无论什么内容甚至是空白。