喜欢0次
本次分享的内容是利用C语言union特性来定义RGB565格式
1)前言
在做视觉相关的任务时,相机的输入一般会是RGB565(uint16_t)的格式,而我们需要把它显式转换成RGB三通道(uin8_t[3]),在这个时候,我们可以通过一些移位和逻辑操作来完成这个转换过程,类似于
uint8_t b=(rgb565<<3) & 0x00ff;
在这里还有另一种技巧,可以免于复杂的位运算以减小代码bug量。
2)共用体
我们在这里定义了共用体Pixel
typedef union{
uint16_t val;
struct {
unsigned r:5;
unsigned g:6;
unsigned b:5
} rgb;
} Pixel;
Pixel里面16位的val和rgb三通道的分量共享内存,我们通过结构体的比特域来定义rgb每一个分量的位数,然后就可以完成RGB三通道(uin8_t[3])的转换了。
3)例子
使用用例如下
Pixel p;
p.val=rgb565;
uint8_t r=p.rgb.r<<3;
uint8_t g=p.rgb.g<<2;
uint8_t b=p.rgb.b<<3;