图片数据随笔

google下位图数据

CImage:
GetBits()返回的是图像数据buffer指针,如果是8位灰度图,每一字节(byte)是一个像素灰度级(调色板索引);如果是24位彩色,每三字节是一个像素RGB(存储顺序是BGR),另外注意位图数据从下到上存放,每行是按4字节的倍数分配空间。

指针指向的是 一维数组(c++只有一维数组,多维的存储也是一维)
定位需要你知道图像的信息才行:
比如标准24位真彩色bmp文件,位图数据存储在一维数组lpBits[]中,图像大小height*width
你要定位(x,y):
1 此坐标应为以图像左下角为原点的坐标系,如果不是则需要坐标变换下(位图数据从下到上存储)
确定每行的存储宽度(位图每行按4字节的倍数存储)
if(width*3%4 == 0) savewidth = width*3;
else savewidth = ((int)(width*3/4)+1)*4;
3 lpBits[y*savewidth+x*3]即为(x,y)像素RGB数据,注意是按照BGR顺序存储的,因此
b = lpBits[y*savewidth+x*3];
g = lpBits[y*savewidth+x*3+1];
r = lpBits[y*savewidth+x*3+2];

 

posted @ 2017-09-30 18:22  ostartech  阅读(138)  评论(0编辑  收藏  举报