【转】解决MeasureString 不准确的问题

【转】解决MeasureString 不准确的问题转自:https://www.cnblogs.com/MRRAOBX/articles/7473803.html我在将字符串(含中文)Draw到一幅图片上时发现不准这个问题的。比如一幅图片的宽是400pixel,Graphics对象g的GraphicUnit是Pixel,我要画到图上的字符串是str,我用g.MeasureString(str.SubString(0,i),font)来计算前i个字符的宽度width.当width大于宽度时,停止循环,并将前i个字符画到图片上(使得文字靠右对齐),查看

转自:https://www.cnblogs.com/MRRAOBX/articles/7473803.html

我在将字符串(含中文)Draw到一幅图片上时发现不准这个问题的。

比如一幅图片的宽是400pixel,Graphics对象g的GraphicUnit是Pixel,我要画到图上的字符串是str,我用g.MeasureString(str.SubString(0,i),font)来计算前i个字符的宽度width.当width大于宽度时,停止循环,并将前i个字符画到图片上(使得文字靠右对齐),查看画完的图片发现图上前i个字符的后面还有很大一段空白(前i的字符的宽度明显小于图片的宽),

【转】解决MeasureString 不准确的问题

使用Graphic类的MeasureString可以得到在某种字体下,字符串的显示长度。

但对于字符串尾部是空格的地方将会被忽略,无论是全角还是半角。

比如:

” str”与” str       ”,使用这个方法来测量时,得出来的Width都是相同的。

MeasureString默认情况下确实要偏大一点,需要额外设置stringFormat,举个例子

e.Graphics.MeasureString(text, Font,1000,StringFormat.GenericTypographic)

这样就能正确测量了。

MeasureString并不支持度量给定宽度时,所需要的高度的功能,只能量出将所有的字画在一行上的宽度和高度。

可以参考一下:http://blog.joycode.com/sam1111/archive/2004/11/08/38393.aspx

(1)在窗体中测量字符串

使用System.Drawing.Graphics的MeasureString函数 主要用它的2个重载函数

(1)Graphics.MeasureString 方法 (String, Font) ,测量用指定的 Font 对象绘制的指定字符串,返回 SizeF 结构。返回的SizeF就是测量字符串的打印在屏幕上的宽度和高度,默认以像素为单位,与Form中控件Size的单位一致。该函数重载中还含有一个 StringFormat参数,如果未指定这个参数,那么将使用StringFormat.GenericDefault返回的StringFormat进行测量,这个测量结果比较大。如果使用StringFormat.GenericTypographic参数测量,结果比较小。

(2)public SizeF MeasureString(string text,Font font,SizeF layoutArea,StringFormat stringFormat, out int charactersFitted, out int linesFilled); 这个函数能测量使用指定字体和指定矩形区域中能容纳字符串的长度和行数,其中,layoutArea为一个容纳字符串的矩形区域; stringFormat为字符串的对齐方式,字符间距,是否保持词组在同一行等属性(这个参数很重要);charactersFitted返回能容纳的字符的数目;linesFilled返回能容纳字符的行数。 重点:默认的情况下Graphics返回的结果是用像素作为单位,设置PageUnit属性可以改变这种状态。窗体中创建Graphics实例直接可以使用Control.CreateGraphics 方法。

今天的文章【转】解决MeasureString 不准确的问题分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8418.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注