Bitmap RGB24 4字节对齐

本文中说的图片都是无压缩的彩色Bitmap图片。

最近在一个项目中有一个场景是需要将RGB32或RGB24的Bitmap转换成为RGB565的Bitmap,在RGB32转RGB565的过程中没有遇到什么问题:

    pixel565[] = color[] >> ;// R
pixel565[] = color[] >> ;// G
pixel565[] = color[] >> ;// B

但是在将RGB565转换成为RGB24的时候却出现问题了,高宽均100p的图片,用绘图程序绘制出来的大小是374,而我的却是300(图片数据)+54(头部信息)的大小。不明白为何多了20个字节的数据。后来查阅资料后发现是Bitmap的特性。

BMP图像数据,每一行的大小必须是4的倍数,如果不是用0填充,即4字节对齐

所以加入了行对齐的操作:

    int count = ;
int alignNum = - (pixelMat.cols % );
int alignData = ;
MatConstIterator_<Vec3b> pixel, colorend;
for(pixel = pixelMat.begin<Vec3b>(), colorend = pixelMat.end<Vec3b>();pixel != colorend;++pixel)
{
outFile.write((char*) &(*pixel)[], );
outFile.write((char*) &(*pixel)[], );
outFile.write((char*) &(*pixel)[], );
if(++count % pixelMat.cols == )
{
// 4 bytes align
outFile.write((char *) &alignData, alignNum);
}
}

由此联想,在读取或存储Bitmap图片时需要关注图片一行数据的像素值所占的空间是否进行4字节对齐!

目前项目中处理的流程需要考虑对齐的有:

RGB888->RGB565 读与写

RGB565->RGB888 读与写

04-16 10:46
查看更多