C语言中如何从整型像素值中分离R、G、B颜色分量
像素值RGB分量拆分方案
核心逻辑
24位RGB像素值的位布局(从高位到低位)为:8位R分量 → 8位G分量 → 8位B分量,拆分只需要通过「位右移」+「按位与」两个基础位运算实现,其中0xFF是8位全1的掩码,作用是只保留数值最右侧8位的有效内容。
拆分步骤
- B分量(最右侧8位):直接将原像素值和
0xFF做按位与运算 - G分量(中间8位):先将原像素值右移8位,让G分量落到最右侧8位区间,再和
0xFF做按位与 - R分量(高8位):先将原像素值右移16位,让R分量落到最右侧8位区间,再和
0xFF做按位与
示例验证
我们用具体数值测试:假设输入像素值为十六进制0xFFAABB(对应十进制16755387)
R = (0xFFAABB >> 16) & 0xFF = 0xFF = 255 G = (0xFFAABB >> 8) & 0xFF = 0xAA = 170 B = 0xFFAABB & 0xFF = 0xBB = 187
常见语言实现示例
Python
pixel = 0xFFAABB r = (pixel >> 16) & 0xFF g = (pixel >> 8) & 0xFF b = pixel & 0xFF
JavaScript
注意JS默认数值是有符号的,需要先转无符号整数避免右移异常
const pixel = 0xFFAABB const r = (pixel >>> 16) & 0xFF const g = (pixel >>> 8) & 0xFF const b = pixel & 0xFF
C/C++
uint32_t pixel = 0xFFAABB; uint8_t r = (pixel >> 16) & 0xFF; uint8_t g = (pixel >> 8) & 0xFF; uint8_t b = pixel & 0xFF;
内容的提问来源于stack exchange,提问作者nanu
相关产品推荐
相关产品推荐

