Advertisement

RGB888转换为RGB565格式

阅读量:

RGB888转换为RGB565格式

RGB888用unsigned int 32位字节存储

0 0 0 0 0 0 0 0 R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R:255 0xFF G:0 0x00 B:0 0x00

RGB565用unsigned short 16位字节存储

r7 r6 r5 r4 r3 g7 g6 g5 g4 g3 g2 b7 b6 b5 b4 b3
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
R: (0xFF &0x1F)<<11 G:(0x00 & 0x3F)<<5 B:(0x00 & 0x1F)
F 8 0 0

主要思路:

在处理该图像数据时:

  • 处理每个像素的 RGB 颜色通道时:
    • 对于 R 颜色通道:将 RGB 值中高位(第 R7 至 R3 位置)提取出来,并将其高位(第 R7 至 R3 位置)取出后进行相应的计算操作。
    • 对于 G 颜色通道:提取 RGB 值中高位(第 G7 至 G2 位置),并将其高位(第 G7 至 G2 位置)取出后进行相应的计算操作。
    • 对于 B 颜色通道:提取 RGB 值中高位(第 B7 至 B3 位置),并将其高位(第 B7 至 B3 位置)取出后进行相应的计算操作。

举例:红色 RGB888格式为(R:255,G:0,B:0 0xFF0000) ——> RGB565格式为(0xF800)

代码实现:

复制代码
 //运用宏封装起来:

    
 #define RGB888_To_RGB565(R,G,B)  (uint16_t)((R & 0x1f)<<11|(G & 0x3f)<<5|(B & 0x1f))
    
  
    
 //调用时:
    
 RGB888_To_RGB565(255,0,0)  //显示红色
    
 RGB888_To_RGB565(0,255,0)  //显示绿色
    
 RGB888_To_RGB565(0,0,255)  //显示蓝色

在使用STM32驱动LCD液晶显示器时,请注意以下要点:通常情况下,默认采用RGB565格式(以压缩数据节省空间为特点)。然而,在实际应用中发现颜色数值常以RGB888格式呈现(因其对亮度敏感的特点),因此必须进行相应的转换以便顺利显示。

这种方法并非完美无缺但也存在一定的局限性它会导致一部分色彩信息的缺失从而影响精度同时无法复原原始数据因此需要考虑其他方案例如量化补偿这里不做深入探讨

全部评论 (0)

还没有任何评论哟~