这行代码有个BUG,谁能找出来?

[复制链接]
3475|11
 楼主| 农民讲习所 发表于 2008-10-21 09:38 | 显示全部楼层 |阅读模式
pLine = 0x31f40000;
pLine += (mWindowWidth - sFontMsg.mWidth)/2 + ( mWindowHeight - sFontMsg.mHeight ) * mWindowWidth / 2;

mWindowWidth:  LCD的屏幕象素宽度,=800;
mWindowHeight: LCD的屏幕象素高度度,=600;
sFontMsg.mHeight: 要显示的字符的高度
sFontMsg.mHeight: 要显示的字符的宽度

上面代码作用是:确定要显示的字符,位于屏幕中间。
(mWindowWidth - sFontMsg.mWidth)/2,计算X偏移。
( mWindowHeight - sFontMsg.mHeight ) * mWindowWidth / 2,计算Y偏移再乘上屏幕宽度800。

现象:有些显示,X会偏右。有些显示是正确的。

aweyfan 发表于 2008-10-21 10:08 | 显示全部楼层

就是舍入误差吧

古道热肠 发表于 2008-10-21 10:25 | 显示全部楼层

最好显示约定

 (( mWindowHeight - sFontMsg.mHeight ) * mWindowWidthL) / 2;可能会更好些,加个括号,同时将mWindowWidth变换成long类型.
 楼主| 农民讲习所 发表于 2008-10-21 10:37 | 显示全部楼层

变量都是INT32,==long

simon21ic 发表于 2008-10-21 11:10 | 显示全部楼层

猜猜看

(mWindowHeight - sFontMsg.mHeight) * mWindowWidth / 2
--》
((mWindowHeight - sFontMsg.mHeight) / 2) * mWindowWidth
发表于 2008-10-21 11:14 | 显示全部楼层

是不是整除2,引起的...

simon21ic 发表于 2008-10-21 11:16 | 显示全部楼层

要是猜对的话

这个错误就很明显了
出错时会向→多移半屏
发表于 2008-10-21 11:17 | 显示全部楼层

字节对齐 引起的?瞎猜一下..

(mWindowWidth - sFontMsg.mWidth)/2,计算X偏移。//就这儿有问题????


现象:有些显示,X会偏右。有些显示是正确的。
simon21ic 发表于 2008-10-21 11:20 | 显示全部楼层

mWindowHeight - sFontMsg.mHeight 是偶数时正常
是奇数时会有偏移。当然,前提没有其他问题。
 楼主| 农民讲习所 发表于 2008-10-21 11:37 | 显示全部楼层

simon21ic对了

写算式的时候,不小心就出错。
lhj200304 发表于 2009-11-28 10:28 | 显示全部楼层
奇数除2会出问题的
linzhiqi1 发表于 2014-3-23 19:32 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

1275

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部