单片机/MCU论坛
直播中

张超

7年用户 1301经验值
私信 关注
[问答]

如何把RGBx888换成RGB565?

如何把RGBx888换成RGB565

回帖(3)

杜美娜

2024-1-18 09:49:54
就RGB888->RGB565而言:其转换的具体思路如下:(注:只代表个人的方法)
1.取RGB888中第一个字节的高5位作为转换后的RGB565的第二个字节的高5位
2.取RGB888中第二个字节的高3位作为转换后的RGB565第二个字节的低3位
3.取RGB888中第二个字节的第4--6位,作为转换后的RGB565第一个字节的高3位
4.取RGB888中第二个字节的第三个字节的高5位作为转换后的RGB565第一个字节的低5位
就RGB565->RGB888而言:
RGB565的存储方式为:
R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0
1.取RGB565第一个字节中低5位作为RGB888的高5位
2.取RGB565第二个字节中的低3位,将其左移5位,作为RGB888第二个字节的高5位
3.取RGB565第一个字节的高3位将其右移3位,作为RGB888第二个字节的4--6位
4.取RGB565第二个字节中的高5位作为RGB888第三个字节。
举报

niu!kf

2024-1-18 10:32:32
要将RGBx888转换为RGB565,可以按照以下步骤操作:

1. 取出RGBx888中的红色、绿色和蓝色分量的值。

2. 对于每个分量,将其值除以相应范围的最大值,再乘以目标范围的最大值,然后四舍五入到最接近的整数。

3. 将红色分量的位数减少到5位,绿色分量减少到6位,蓝色分量减少到5位。

4. 将这些减少后的分量组合起来形成RGB565值。

以下是Python代码示例,用于将RGBx888转换为RGB565:

```python
# RGBx888 转 RGB565
def rgbx888_to_rgb565(rgbx):
    # 取出红、绿、蓝分量
    red = (rgbx >> 16) & 0xFF
    green = (rgbx >> 8) & 0xFF
    blue = rgbx & 0xFF

    # 将分量值按比例缩小,并四舍五入到最接近的整数
    red = (red * 31 + 127) // 255
    green = (green * 63 + 127) // 255
    blue = (blue * 31 + 127) // 255

    # 组合分量值形成RGB565值
    rgb565 = (red << 11) | (green << 5) | blue

    return rgb565

# 示例用法
rgbx888 = 0xAABBCC  # 假设一个RGBx888值
rgb565 = rgbx888_to_rgb565(rgbx888)
print(hex(rgb565))  # 打印RGB565值的十六进制表示
```

这样,你就可以将RGBx888值转换为RGB565值了。
举报

jf_20665881

2024-1-19 10:56:31
将RGB888转换为RGB565的方法主要涉及到对每个颜色通道(红、绿、蓝)的特定位进行提取或转换。具体步骤如下:

对于红色通道:取RGB888中的第8、7、6位作为RGB565中的第8、5、2位(即R5、R6、R7)。
对于绿色通道:取RGB888中的第11、10、9位作为RGB565中的第8、5、2位(即G6、G7、G8)。
对于蓝色通道:取RGB888中的第14、13、12位作为RGB565中的第8、5、2位(即B4、B3、B2)。
这样,我们就将RGB888格式的颜色信息转换为了RGB565格式。需要注意的是,这种转换会导致信息的丢失,因为RGB565格式相比RGB888格式只有更少的位数来表示颜色信息。因此,在转换过程中可能会损失一部分颜色精度。
推荐下pcb打样平台:https://air.1688.com/kapp/indust ... p;amp;boardType=fr4
举报

更多回帖

发帖
×
20
完善资料,
赚取积分