我在将字符串(含中文)Draw到一幅图片上时发现这个问题的。
比如一幅图片的宽是400pixel,Graphics对象g的GraphicUnit是Pixel,我要画到图上的字符串是str,我用g.MeasureString(str.SubString(0,i),font)来计算前i个字符的宽度width.当width大于宽度时,停止循环,并将前i个字符画到图片上,查看画完的图片发现图上前i个字符的后面还有很大一段空白(前i的字符的宽度明显小于图片的宽),我这样用MeasureString没问题吧,还是.net的BUG?
因为是用在网页上的,所以也没法调用Windows API
使用Graphic类的MeasureString可以得到在某种字体下,字符串的显示长度。
但对于字符串尾部是空格的地方将会被忽略,无论是全角还是半角。
比如:
" str"与" str ",使用这个方法来测量时,得出来的Width都是相同的。
可以说是BUG吧!
MeasureString并不支持按给定宽度度量所需要的高度的功能,只能量出将所有的字画在一行上的宽度和高度。
可以参考一下:http://blog.joycode.com/sam1111/archive/2004/11/08/38393.aspx
MeasureString默认情况下确实要偏大一点,需要额外设置stringFormat,举个例子
e.Graphics.MeasureString(text, Font,1000,StringFormat.GenericTypographic)
这样就能正确测量了。