关于LPVOID中RGB数据的提取问题。

来源:百度知道 编辑:UC知道 时间:2024/05/11 16:13:52
LPVOID lpBits;
lpBits=new LPVOID[2500];
int b= pBmp->GetBitmapBits(200,lpBits);
b的值是200的。
然后lpBits是指向一个bitmap数据的缓冲池的一个指针吧?
LPVOID A 32-bit pointer to an unspecified type.
我想一个LPVOID指针指向一个包含RGB和保留的内存吧?
那我怎么提取一个像素的RGB值呢。
最郁闷的是int a=(int)lpBits[1];是不行的,我要郁闷死勒。
我试试看~~

假设你的lpBits中已经包含了数个COLORREF值,然后这样做:
LPCOLORREF pcr = (COLORREF*)lpBits;
COLORREF cr = pcr[i];//第i个RGB值;

你也许能够成功读取,也许不行。
位图的像素格式有好几种,
32位位图才能这么四个字节的去读,
24位位图需要三个字节的去读,
16位位图需要看555 565格式,再按位掩码去读,
8位位图按字节去读,
有调色板的按索引去读

char *p=(char *)(lpBits);//假如说lpBits指向的是位图数据部分

int a=RGB(*(p+2),*(p+1),*p);

原理:没一个分量占1个字节:把缓冲区指针强制转换成char类型

*(p+2)->对应红色分量,依次类堆;

如果你想获取指定坐标的象素值,完全可以获取一个以p开头的偏移量来获取指定坐标的象素值