将十六进制数转换为颜色值
Converting a hex number to a color value
我有一个 LCD 固件,我想通过添加更多颜色来修改它。我发现颜色定义如下,
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40
#define BRRED 0XFC07
#define GRAY 0X8430
这些值如何转换为实际的十六进制颜色值?例如,青色列为 0x7FFF
但青色的十六进制颜色值为 #00FFFF
这是RGB565颜色格式。红色 5 位,绿色 6 位,蓝色 5 位。
WORD red_mask = 0xF800;
WORD green_mask = 0x7E0;
WORD blue_mask = 0x1F;
BYTE red_value = (pixel & red_mask) >> 11;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);
反之:
// Assuming the color values have been truncated to the correct number of bits:
WORD pixel565 = (red_value << 11) | (green_value << 5) | blue_value;
参考:
https://docs.microsoft.com/en-us/windows/win32/directshow/working-with-16-bit-rgb
我有一个 LCD 固件,我想通过添加更多颜色来修改它。我发现颜色定义如下,
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40
#define BRRED 0XFC07
#define GRAY 0X8430
这些值如何转换为实际的十六进制颜色值?例如,青色列为 0x7FFF
但青色的十六进制颜色值为 #00FFFF
这是RGB565颜色格式。红色 5 位,绿色 6 位,蓝色 5 位。
WORD red_mask = 0xF800;
WORD green_mask = 0x7E0;
WORD blue_mask = 0x1F;
BYTE red_value = (pixel & red_mask) >> 11;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);
反之:
// Assuming the color values have been truncated to the correct number of bits:
WORD pixel565 = (red_value << 11) | (green_value << 5) | blue_value;
参考: https://docs.microsoft.com/en-us/windows/win32/directshow/working-with-16-bit-rgb