VC++ RGB数据处理

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值