一个关于数据对齐的问题,请高手指教!!!

yanglight 2005-12-04 06:42:34
在图像处理中,图像处理的数据矩阵是按行存储的,如一个八位图(每个像素点用8位表示),111*100的图像,按行排成一维数组但存储的数组大小不是111*100字节而是112*100因为他要使每行是4的倍数,现在要问为什么要以4对齐。
...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2006-01-02
  • 打赏
  • 举报
回复
这是Windows规定的bmp图像格式.
你自己存放图像不一定要这样,为了节省,可以任意宽度.
一次读写4字节,比4次读写1字节要快,
但4字节对齐,仅仅是为了最后几个字节的读写而已,因为,
如果不对齐,前面的象素也可以用4字节读写,甚至一次读
写一行或整个一页(多到65536个象素)!
固定用4字节读写也不一定方便,因为需要单个象素读写时,
就要和其余3个象素进行拼接,很麻烦.
bmp图像格式并不一定合理,例如它的写入次序和屏幕写入
次序向反,不是从上到下,而是从下到上,这就不合理.
huanyun 2005-12-27
  • 打赏
  • 举报
回复
写错了 是宽301
另外 有些算法会要求图像数据指针的起始地址4,8,16字节对齐,也是因为效率关系。
huanyun 2005-12-27
  • 打赏
  • 举报
回复
因为MMX是64位SSE,SSE2是128位
在处理数据时需要使用单指令多数据的MMX,SSE,SSE2高效的处理图像
那么使用4字节,16字节对齐的数据处理没有边界问题
比如一张长301象素的图像
一字节字节的处理 一行处理301次
MMX可以4字节4字节的处理 可最后到第301象素 无法用mmx指令处理,
sse,sse2类似

弟十六 2005-12-14
  • 打赏
  • 举报
回复
32位CPU当然以4字节对齐运行效率最高了,一个时钟周期正好处理4个字节,低于32位的话浪费,高于的话处理时间成倍的增长。
寻开心 2005-12-14
  • 打赏
  • 举报
回复
这个是bmp格式的要求吧,不是所有的图形格式的要求
快乐鹦鹉 2005-12-14
  • 打赏
  • 举报
回复
显然是方便处理了。固定长度后,就不用费劲去判断,固定程式处理,速度自然好一点。
zcz0918 2005-12-13
  • 打赏
  • 举报
回复
补齐成sizeof int的倍数可以处理的快些
GoogleGeek 2005-12-05
  • 打赏
  • 举报
回复
便于处理,有些机器(比如ARM,SPARC)不像x86那样对char和 int变量的处理速度一样!
在这些机器上32Bit或者64bit的访问速度最快!
至于为什么会这样,你找本计算机原理的书看看吧

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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