网站开发 asp.net php,网站空间免费,免费开店的外贸平台,做展示网站要恋用什么程序转自#xff1a;https://www.cnblogs.com/MRRAOBX/articles/7473803.html
我在将字符串(含中文)Draw到一幅图片上时发现不准这个问题的。
比如一幅图片的宽是400pixel,Graphics对象g的GraphicUnit是Pixel#xff0c;我要画到图上的字符串是str,我用g.MeasureString(str.Sub…转自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的字符的宽度明显小于图片的宽), 使用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个重载函数
1Graphics.MeasureString 方法 (String, Font) 测量用指定的 Font 对象绘制的指定字符串返回 SizeF 结构。返回的SizeF就是测量字符串的打印在屏幕上的宽度和高度默认以像素为单位与Form中控件Size的单位一致。该函数重载中还含有一个 StringFormat参数如果未指定这个参数那么将使用StringFormat.GenericDefault返回的StringFormat进行测量这个测量结果比较大。如果使用StringFormat.GenericTypographic参数测量结果比较小。
2public 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 方法。