RGB888转换为RGB565原理及工具 | 您所在的位置:网站首页 › 色值转换工具在线使用 › RGB888转换为RGB565原理及工具 |
RGB888转换为RGB565原理及工具
1.原理RGB565rgb888
RGB565->RGB8882.工具链接
1.原理
RGB888 转换为 RGB565 的原理是将每个颜色通道的值(红色、绿色和蓝色)从 8 位精度(每个通道 0 到 255)转换为 5 位、6 位和 5 位精度,然后将它们合并成一个 16 位的值。 具体步骤如下: 提取各通道的值:从 RGB888 格式中提取红色(R)、绿色(G)和蓝色(B)通道的值。 减少位数:将每个通道的值从 8 位减少到所需的位数。对于 RGB565 格式,红色通道从 8 位减少到 5 位,绿色通道从 8 位减少到 6 位,蓝色通道从 8 位减少到 5 位。 合并通道值:将减少位数后的各通道值合并成一个 16 位的值。在 RGB565 格式中,红色占据高 5 位,绿色占据中间的 6 位,蓝色占据低 5 位。 生成 RGB565 值:将合并后的 16 位值作为 RGB565 格式的颜色代码。 例如,对于 RGB888 格式的颜色代码 #RRGGBB,其中 RR、GG 和 BB 分别表示红色、绿色和蓝色通道的值,范围从 00 到 FF。要将其转换为 RGB565 格式,首先将 RR、GG 和 BB 分别减少到 5 位、6 位和 5 位精度,然后将它们合并成一个 16 位的值,最终得到 RGB565 格式的颜色代码。 RGB565RGB16数据格式主要有二种:RGB565和RGB555。 每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位。 1 //获取高字节的5个bit 2 R = color & 0xF800; 3 //获取中间6个bit 4 G = color & 0x07E0; 5 //获取低字节5个bit 6 B = color & 0x001F; rgb888RGB24图像每个像素用8比特位表示,占1个字节,注意:在内存中RGB各分量的排列顺序为:BGR BGR BGR ......。 RGB565->RGB888首先RGB的范围是0-255,包括RGB三个值。 第一步将R,G,B三个值分别转化为八位二进制数,这里以GREEN为例子。 GREEN R:0 G:255 B:0二进制:R00000000 11111111 00000000 565的意思就是RGB的位数,R取5位,G取六位,B取5位。其中要求取高位,舍低位。 00000 000 11111111 00000 00 其中非粗体的 0和1 舍去 得到0000011111100000 再转化为十六进制数0x7e0 2.工具程序实现: 基本的tkinter使用,python 3.7 核心程序就是通过位移取得RGB565的R,G,B三色值。简单的使用Label显示色块,三个颜色的滑块可以自由拉动。 #!/usr/bin/env python # -*- coding: UTF-8 -*- from tkinter import * import re window = Tk() window.title("RGB888 转换 RGB565") window.geometry('450x300+300+250') def scalecommand(color): #print(s1.get(),s2.get(),s3.get()) b=s3.get() g=s2.get() r=s1.get() R = r & 0xF8 G = g & 0xFc B = b & 0xF8 rgb565 = (R 3 rgb888_text = 'RGB888: '+ "#%06x"%rgb888 rgb888_Label.configure(text=rgb888_text) rgb565_text = '565: '+ "%d " %R + "%d " %G + "%d" %B rgb565_Label.configure(text=rgb565_text) #print("%#08X"%rgb) info_Label.configure(bg="#%06x" %rgb888) def HexToDec(value): try: return int(value, 16) except ValueError: return "Invalid Hexadecimal Value" def buttonClick1(): # RGB888 转 RGB565 try: c888 = int(rgb1_Entry.get(),16) #字符转16进制整数 except ValueError: print( "Invalid Hexadecimal Value") return rgb2_Entry.delete(0,END) if c888 == None : return else: b = (c888 & 0xFF) #转换RB 取得rgb颜色B g = int((c888 & 0xFF00) >> 8) #转换G 取得rgb颜色G r = int((c888 & 0xFF0000) >>16) #转换R 取得rgb颜色R R = r & 0xF8 #取得RGB565的5位R G = g & 0xFc #取得RGB565的6位G B = b & 0xF8 #取得RGB565的5位B rgb565 = (R 8 G = g >> 3 B = b |
CopyRight 2018-2019 实验室设备网 版权所有 |