1、24位位图数据转换成32位位图数据
// 将24位位图转换为32位位图
void RGBData_24to32(unsigned char *image_in, unsigned char *image_out, int w, int h){
for (int i = 0; i < h; i++){
for (int j = 0; j < w; j++){
if (1){ // 默认数据小端对其方式
//小端对齐 (x86): R|G|B --> B|G|R|A
image_out[(i*w + j) * 4 + 0] = image_in[(i*w + j) * 3 + 2];
image_out[(i*w + j) * 4 + 1] = image_in[(i*w + j) * 3 + 1];
image_out[(i*w + j) * 4 + 2] = image_in[(i*w + j) * 3];
image_out[(i*w + j) * 4 + 3] = '0';
}
else{
//大端对齐: R|G|B --> A|R|G|B
image_out[(i*w + j) * 4] = '0';
memcpy(image_out + (i*w + j) * 4 + 1, image_in + (i*w + j) * 3, 3);
}
}
}
}
2、获取位图数据某个像素点位置(x、y)的颜色值
// 获取图像指定点(x,y)的像素值,这里假设数据存储方式是B|G|R|A
bool GetRGBValue(int x, int y, unsigned char *pRgbData, int width, int height, BYTE* rValue, BYTE* gValue, BYTE* bValue, BYTE* bAlpha)
{
if (x > width || y > height)
return false;
// 先计算偏移量,注意这里数据存储方式是大端模式B|G|R|A
unsigned char* pOffsetRgbData = pRgbData + (y * width + x) * 4;
*(BYTE*)bValue = *(BYTE*)(pOffsetRgbData);
*(BYTE*)gValue = *(BYTE*)(pOffsetRgbData + 1);
*(BYTE*)rValue = *(BYTE*)(pOffsetRgbData + 2);
*(BYTE*)bAlpha = *(BYTE*)(pOffsetRgbData + 3);
return true;
}