为什么两个Graphics对象对同一个字符串调用MeasureString得到的长度不一样呢?

allanli 2006-04-13 10:25:23
一个Graphics对象g1是通过PrintDocument.PrinterSettings.CreateMeasurementGraphics()得到的
一个Graphics对象g2是通过OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs)过程传入的e.Graphics得到的
设置单位g.PageUnit = GraphicsUnit.Millimeter,分别调用g.MeasureString("2270*1736*370", New System.Drawing.Font("宋体", 12.0!))
得到的长度分别是g1=29.78767,g2=29.7594223,为什么有这么大的误差啊!!!如果这个误差无法避免,那么是不是有固定的比例呢?

请高手们帮帮忙试试,提出解决办法,先谢了.
...全文
356 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
youwan 2007-04-28
  • 打赏
  • 举报
回复
关注
sz_lgp 2006-04-26
  • 打赏
  • 举报
回复
我发现了一个问题:打印用的graphics是用0.01mm来测量的(默认下)而me.graphics是用象素单位来测量的。

打印用的graphics.MeasureString("中", New System.Drawing.Font("宋体", 10))=17.56

而me.graphics..MeasureString("中", New System.Drawing.Font("宋体", 10))=16.88

打印机是用实际的长度单位来工作的。可以比例之。
sz_lgp 2006-04-25
  • 打赏
  • 举报
回复
今天做打印程序时,就碰到这个问题,用me.graphics测量要打印的全部数据的总页数比用PrintDocument.PrinterSettings.CreateMeasurementGraphics测量时短了一页(20页就少一页)
现在还没有解决它,谁搞定了发给我:research@kolormagnetics.com,我谢了!
sz_lgp 2006-04-22
  • 打赏
  • 举报
回复
我也遇到过,中文、英文、数字混在一起误差更明显,我怀疑是字体的计量精度不够。
zhaoliang_chen 2006-04-19
  • 打赏
  • 举报
回复
可能和显示器硬件有关系
Muf 2006-04-19
  • 打赏
  • 举报
回复
估计有几个地方可能造成差异:
1. dpi(差异)
2. 字体(打印机自带字体和windows字体差异)
3. 输出精度(如防锯齿等)
allanli 2006-04-19
  • 打赏
  • 举报
回复
啊,如果是楼上的精度就不会有问题了,我是了两台电脑,几台打印机都是这样啊,误差起码达到千分之几十的误差!!!
真相重于对错 2006-04-19
  • 打赏
  • 举报
回复
具体差别应该和打印机有关,
我这得结果
Width=29.78767
Width= 29.787674
sx_lxh 2006-04-19
  • 打赏
  • 举报
回复
关注。
allanli 2006-04-19
  • 打赏
  • 举报
回复
再UP
高手都到哪去啦,MVP去哪里啦???有没有微软的技术人员回答一下啊???
xjtandqt 2006-04-19
  • 打赏
  • 举报
回复
我也遇到过这个问题
g.MeasureString("1", New System.Drawing.Font("宋体", 12.0!))
两次测试的Size长度和高度都不样

g.MeasureString("一", New System.Drawing.Font("宋体", 12.0!))
两次测试的Size长度和高度都一样

测试的字符如果是中文的就会一样。
shine28 2006-04-13
  • 打赏
  • 举报
回复
这个难说,毕竟调用的类是不一样的,我们无法得知他们是通过什么来测量的,建议取一种为标准来用。
长江支流 2006-04-13
  • 打赏
  • 举报
回复
你这个问题和我这个应该是差不多,虽然问的不一样
http://community.csdn.net/Expert/topic/4616/4616268.xml?temp=8.449954E-02

不过,你对照我那个设置一下应该可一试
醉龍 2006-04-13
  • 打赏
  • 举报
回复
遇到过同样的问题,但没找到答案!

帮定!求解同样的问题
copico 2006-04-13
  • 打赏
  • 举报
回复
格式化保留后两位
不过LZ应该不会想要这种结果
copico 2006-04-13
  • 打赏
  • 举报
回复
GraphicsUnit.Millimeter
可否还设更精确的刻度呢

功力不够,学习
allanli 2006-04-13
  • 打赏
  • 举报
回复
OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs)是PrintDocument中的事件过程,或者换一种解决方式,有什么办法能够得到OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs)中e.Graphics对象一摸一样的对象呢?主要是能够保证其MeasureString方法测出的长度一样.

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧