社区
机器视觉
帖子详情
求解根据位图的每行像素点数和位数计算每行字节数的公式?
mickyo
2010-08-26 04:58:23
我看到一个根据位图的每行像素点数和位数计算每行字节数的公式,请问为什么这样计算?
(mImageWidth * (mImageBitCount / 8) + 3) & ~3;
mImageWidth 位图宽度
mImageBitCount 位图的点位数
...全文
566
7
打赏
收藏
求解根据位图的每行像素点数和位数计算每行字节数的公式?
我看到一个根据位图的每行像素点数和位数计算每行字节数的公式,请问为什么这样计算? (mImageWidth * (mImageBitCount / 8) + 3) & ~3; mImageWidth 位图宽度 mImageBitCount 位图的点位数
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
w137087334
2011-03-09
打赏
举报
回复
个人认为(mImageWidth * (mImageBitCount / 8) + 3) & ~3这个公式不太好,因为
1.mImageBitCount=1,2,4的时候mImageBitCount / 8=0;
2.如果算出(mImageWidth * mImageBitCount )/ 8=4.1~4.9之间的数,即使加3,再& ~3只能是4,而事实应该是8.(例如mImageWidth=9,mImageBitCount=4,如果用这个公式算出的结果是4,事实上宽度是8)
公式(nImageWidth*nBitCount+31)/32*4算出的结果就比较好了,如果nImageWidth*nBitCount=32的倍数,则其加31再对32整除,这个加的31也就被舍弃了(因为“/”这个是整除,直接丢弃小数未4),而如果一旦nImageWidth*nBitCount(一定是整数)不能被32整除,那么加31以后一定能使/32以后的结果和实际相符。例如:nBit=4,nImageWidth=9,则实际情况是4*9/8=4.5>4,则位图行宽必须占8个字节,用公式套:4*9+31=67,67/32=2,2*4=8,和事实相符
所以计算位图每行所占字节要用(nImageWidth*nBitCount+31)/32*4这个公式,一定不会出错
mickyo
2010-08-27
打赏
举报
回复
我的理解是:
(mImageWidth * (mImageBitCount / 8) 计算每行像素需要的字节数,此时可能会存在不足,比如 31*1/8 = 3.875 实际字节数应该是 4
计算出来的字节数应该是4的倍数,如果不足,最多相差 3 个字节,所以+3 就是
(mImageWidth * (mImageBitCount / 8) + 3) 此时计算出来的字节数绝对足够了,但可能还有多余,也不是4的倍数,比如 31*1/8+3 = 6 实际上只要 4 字节就可以了,于是要倒扣
4的倍数在二进制上就是最后两位为0,所以用 &~3 让最后两位为0
~3 就是让最后两位为0 &~3 就是让计算出来的数的二进制最后两位置为0,就可以被4整除了
希望我这个理解是正确的吧
mickyo
2010-08-27
打赏
举报
回复
(((bits) + 31) / 32 * 4) 这个公式未必正确
(mImageWidth * (mImageBitCount / 8) + 3) & ~3 绝对正确
laoma_hbu
2010-08-26
打赏
举报
回复
(nImageWidth*nBitCount+31)/32*4;
nImageWidth为图像宽度;nBitCount为每个像素所占的位数,如:二值为1,灰度为8,真彩24
swimmingfish2004
2010-08-26
打赏
举报
回复
& ~3
和 /4 *4的效果是一样的。
应为为4的倍数所以对于一个二进制表示来说最后两位为0.所以可以用3的取反来做位与
swimmingfish2004
2010-08-26
打赏
举报
回复
(mImageWidth * (mImageBitCount / 8) + 3) /4 *4
解释:
其中mImageWidth * (mImageBitCount / 8)为存储像素值所需的每行字节数。我们不妨将其设为b。
现在公式就变成了(b+3)/4*4。此处的除法为整除运算,因为每一行必须是4的倍数。所以必须要填充一定数目的无意义的字节。如b=1022,则每行字节数必须为(1022+3)/4*4=1024。
fengbingchun
2010-08-26
打赏
举报
回复
8bit占一个字节,图像每行的字节数必须是4的倍数,我没见过这个公式,但是
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)这个公式是经常用的
NOIP2017初赛普及组C++试题.doc
NOIP2017初赛普及组C++试题.doc
信息学竞赛真题.pdf
信息学竞赛真题.pdf
位图
法的问题之
求解
磁盘块对应
位图
的位所在之处
问:文件系统用
位图
法表示磁盘空间的分配情况,
位图
存于磁盘的32~127号块中,每个盘块占1024B,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则
位图
中要修改的位所在的盘块号和块内字节序号分别是(C)。 A. 81,1 B. 81,2 C. 82,1 C. 82,2 解:从题可知,
位图
是存于(32~127号磁盘块),...
位图
数
据 BMP图像基础概念
像素位深度是指每个像素所用的
位
数
(bit),像素位深度决定了彩色图像的每个像素可能有的颜色
数
,或者确定灰度图像的每个像素可能有的灰度级
数
。例如,一幅彩色图像的每个像素用R、G、B三个分量来表示,若每个分量用8位,那么一个像素共用24位表示,就说像素的深度为24位,每个像素可以是224,即16777216〔千万级〕种颜色中的一种。在这个意义上, 往往把像素的位深度说成是图像深度。表示一个像素的位
基本法
求解
位示图编号问题
基本法
求解
位示图编号问题@(OS)文件系统用
位图
法表示磁盘空间的分配情况,
位图
存于磁盘的32~127号块中。每个磁盘块占用1024B,盘块和块字节均从0开始编号。假设要释放的盘块号为409612,则位示图中药修改的位所在的盘号和块内字节分别是:C⎯⎯⎯\underline C A. 81,1 B. 81,2 C. 82,1 D. 82, 2分析:必须要说的是代入法更快。首先看81号,则32~
机器视觉
4,499
社区成员
15,350
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章