Graphics.MeasureString 不能获得精确宽度的问题
最近在为eBizPlat做一个代码编辑器,需要关键字高亮显示,每行都切成许多段,在输出时发现问题,用Graphics.MeasureString()函数算出的值比实际宽度大许多,分片输出的位置相差很大,甚为蹊跷,上网一查,终于发现问题所在,现将解决之道总结一下,以便后来者借鉴。
public float CalTextWidth(Graphics g, Font font, string text)
{
StringFormat sf = StringFormat.GenericTypographic;
sf.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
SizeF s = g.MeasureString(text, font, 0, sf);
return s.Width;
}
这是为什么呢,原来在Graphics.MeasureString()函数调用中,若不指定StringFormat,则会以缺省的StringFormat来处理。
在代码第4行处,因为本人需要计算空格宽度,增加StringFormat.MeasureTrailingSpaces枚举值,若不需要计算空格宽度,则可忽略。
Graphics.MeasureString 不能获得精确宽度的问题相关推荐
- .NET Graphics.MeasureString 的使用
在画图过程中,Graphics.MeasureString可以取得字符串的宽度及高度等信息,对于字符串的存放坐标的计算非常有用,尤其是居中显示时. '------------------------- ...
- 测量string变量长度函数_利用Graphics::MeasureString函数测量字符串的宽度,高度
我就吐一句槽,今天被这个函数完虐.... 当我们需要获得一个字符串的长度时(注意,不是length,这只是返回该字符串的字符个数),我们需要知道的是一个字符串的长度也就是一个字符串的宽,说到底就是像素 ...
- c# 计算空格宽度像素_C# WinForm,Graphics.MeasureString 计算不准确的坑
Graphics.MeasureString 可以计算出指定字符串在给定字体Font的尺寸SizeF,它的计算有坑:如果把字符串拆开成一个一个单字字符串并逐个计算尺寸,然后把Width加起来,你会发现 ...
- Bypass Graphics.MeasureString limitations
http://www.codeproject.com/cs/media/measurestring.asp Bypass Graphics.MeasureString limitations By P ...
- Graphics.MeasureString用指定的字体绘制时测量指定的字符串
Graphics的MeasureString方法,只要指定了字体和字符串后,用这个方法就能获得一个矩形的区域,这个区域是Graphics对象用DrawString方法在空间表面绘制字符串时所要的区域. ...
- js获取精确宽度/高度(带小数位像素)
问题:用jquery获取div等块级元素的宽高时不能精确获取,只能得到整数部分像素,不能获取小数位px.请看下面事故: <!DOCTYPE html> <html lang=&quo ...
- js获取精确宽度/高度(带小数位的像素)
解决方法:window.getComputedStyle().getBoundingClientRect() 问题:1.用jquery获取div等块级元素的宽高时不能精确获取,只能得到整数部分像素,不 ...
- 关于计算文字显示占用画面大小(System.Drawing.Graphics.MeasureString)
最近遇到了一个需要手动为显示文字换行的场合,网上转了一圈,最后形成了下面的代码: var font = new Font("微软雅黑", 9F);var maxTextWidth ...
- C#如何测量字符串的高度宽度和精确取得字符串的高度宽度
C#如何测量字符串的高度宽度和精确取得字符串的高度宽度 因为MFC中CDC有GetTextExtent()可以获得字符串的高度宽度 像素单位,所以自然想到c#的GDI+的MeasureString,这 ...
最新文章
- 用tomcat插件 在Eclipse 中配置Tomcat项目
- Shark集群搭建配置
- 不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事
- Android之解决APP奔溃重启导致Fragment白屏问题
- Android环境的安装遇到的问题
- 深入理解JavaScript系列:闭包(Closures)
- 中国2008经济数据
- 山东大学软件学院计算机组成原理课程设计实验四
- 【Linux学习笔记】9. Linux打包压缩解压缩命令tar
- beetl html模板,Beetl模板引擎之自定义html标签
- 记一次跟突破360主机卫士上传
- oracle异地容灾备份 英文6,异地容灾备份的方案.doc
- Eclipse生成jar包和导入jar包
- ibm服务器互换硬盘,实战IBM xSeries 346服务器更换硬盘 - 鲜甜IT.Net
- 高性能平台设计——美团旅行结算平台实践
- 用Navicat连接MySQL的安装及配置
- IAMP方式下载邮件记录
- mysql 1265错误_mysql – 错误1265.尝试从txt文件加载数据时,列的数据被截断
- Activiti - 新一代的开源 BPM 引擎
- 矩阵指数(The Exponential of a Matrix)
热门文章
- 中甲新军能否重返赛场再成疑 川足前景扑朔迷离
- 国产家用投影仪什么品牌的好?便携式投影仪推荐
- 量子计算和人工智能:应该知道的10件事
- 小候鸟图书角项目活动之相趣冬月 阅读成长 妙笔绘秋
- 在线油耗计算机,计算器新玩法 Windows 7变身油耗计算器
- 无人驾驶,充满想象的美好未来
- android preference控件,Android Preference 设置项简单使用详解
- 已解决Cannot start compiler The output path is not specified for module untitled
- 动态IP(DHCP)、静态IP、拨号(PPPOE)三种上网设置区别
- 稳态视觉诱发电位SSVEP介绍