windows DIB位图的4字节对齐
来源:互联网 发布:兼职数据录入招聘 编辑:程序博客网 时间:2024/06/06 00:17
昨天做一些对位图的处理,需要对像素进行一些复制操作,结果发现在处理部分图像的时候,显示的图像是斜向左错位显示的,如下图所示。经过多次对不同的图像进行显示,发现对于那些图像宽度为单数的图像都出现斜向左错位显示的现象。
原图(295X338): 显示后的图像(错位了):
查了一些资料后才知道,windows DIB位图的每一行都是4字节对齐的,也就是说,图像的像素宽度不一定就是图像实际数据的一行中的字节的数目(对于8位位图而言),因而在复制数据的时候一定要注意,需要使用图像实际数据的一行的字节数,而不是图像的宽度。对于一些图像宽度正好是4的倍数的时候则不会出项这个问题,但是为了处理各种尺寸的图像,都有必要对这个问题进行处理。
一行数据的字节数的计算方法:
int iLineBytes = (pixels_width * biBitCount / 8 +3) / 4 *4
我出问题的代码:
//为分配的内存初始化for(unsigned int i = 0 ; i < m_PtrCoding->ImageRows ; i ++)for(unsigned int j = 0 ; j < m_PtrCoding->ImageWidth ; j ++){m_pImgData[i][j] = (int)m_pImg->imageData[i * m_pImg->width + j];}修改后的代码:
//位图的宽度并不是位图实际存储空间的宽度,位图是4字节对齐的,所以一行数据的宽度不一定等于位图的宽度int iLineByte = (m_pImg->width * m_pImg->depth / 8 + 3) / 4 * 4;//为分配的内存初始化for(unsigned int i = 0 ; i < m_PtrCoding->ImageRows ; i ++)for(unsigned int j = 0 ; j < m_PtrCoding->ImageWidth ; j ++){m_pImgData[i][j] = (int)m_pImg->imageData[i * /*m_pImg->width*/iLineByte + j];}
改后图像正常显示了:
- windows DIB位图的4字节对齐
- GDI位图和DIB位图是两种不同的Windows位图
- 位图4字节对齐问题
- windows 程序设计 DIB(设备无关的位图)
- 位图四字节对齐问题
- HBITMAP对位图数据存储的字节对齐
- 关于位图的dib的一些总结
- 与设备无关的位图(DIB)
- 设备无关位图DIB的显示
- 设备无关的位图DIB简介
- 与设备无关的位图(DIB)
- Windows和Linux下的字节对齐
- Windows和Linux下的字节对齐
- windows、linux 字节对齐
- 位图行四字节对齐算法
- GDI位图和DIB位图
- 设备无关位图(DIB)
- 设备无关位图 DIB
- TCP网络通信实例--消息的发送与接收
- javascript 字符串常用操作(replaceAll,trim)
- PHP+MYSQL乱码问题解决方法三步走
- 验证程序执行时间代码
- NameNode中数据节点的保存(2)——NetworkTopology
- windows DIB位图的4字节对齐
- 分页对象
- svn externals使用
- QT QGraphicsView
- 安装SQL Server 2000出现“以前进行的程序安装创建了挂起的文件操作”的解决办法
- Oracle 11g R2令人赞赏的五大新特性
- 昆山到苏州公交乘坐终极攻略-实践归来
- 虛擬機 centos4.8 oracle9i9204 安裝很順利
- Android--后台处理--AsyncTask类