RISC-V MCU中文社区

【分享】 【分享】利用C语言union特性来定义RGB565格式

发表于 开源蜂鸟E203 2021-06-10 03:33:13
0
2531
0

  • 参赛队名:红鲤鱼与绿鲤鱼与驴 队伍编号: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
用户评论

未通过实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板