🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/开源蜂鸟E203/【分享】利用C语言union特性来定义RGB565格式
【分享】利用C语言union特性来定义RGB565格式
开源蜂鸟E203 作者 发布于 2021-06-10 03:33(1948 天前) 5165 浏览

  • 参赛队名:红鲤鱼与绿鲤鱼与驴 队伍编号:CICC4179

 本次分享的内容是利用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;


全部回复 0
暂无回复,抢个沙发~
💡 请 登录 后参与讨论(微信扫码即登录/注册)