颜色¶
颜色模块处理所有与颜色相关的功能,例如更改颜色深度、从十六进制代码创建颜色、在颜色深度之间转换、混合颜色等。
lv_color_t 类型用于存储颜色。其字段根据 lv_conf.h 中的 LV_COLOR_DEPTH 设置。(见下文)
您可以在 lv_conf.h 中设置 LV_COLOR_16_SWAP 来交换 RGB565 颜色的字节。当通过字节为单位的接口(如 SPI)发送 16 位颜色时,可能需要这样做。由于 16 位数字以小端格式存储(低字节在低地址),接口将首先发送低字节。然而,显示器通常需要先接收高字节。字节顺序不匹配会导致颜色严重失真。
创建颜色¶
RGB¶
通过红、绿和蓝通道值创建颜色:
//所有通道值范围为 0-255
lv_color_t c = lv_color_make(red, green, blue);
//从十六进制代码 0x000000..0xFFFFFF 创建,解释为 RED + GREEN + BLUE
lv_color_t c = lv_color_hex(0x123456);
//从 3 位十六进制代码创建。等同于 lv_color_hex(0x112233)
lv_color_t c = lv_color_hex3(0x123);
HSV¶
通过色调、饱和度和亮度值创建颜色:
//h = 0..359, s = 0..100, v = 0..100
lv_color_t c = lv_color_hsv_to_rgb(h, s, v);
//所有通道值范围为 0-255
lv_color_hsv_t c_hsv = lv_color_rgb_to_hsv(r, g, b);
//从 lv_color_t 变量转换
lv_color_hsv_t c_hsv = lv_color_to_hsv(color);
调色板¶
LVGL 包含 Material Design 的调色板。在此系统中,所有命名颜色都有一个主色以及四种较暗和五种较亮的变体。
颜色名称如下:
LV_PALETTE_REDLV_PALETTE_PINKLV_PALETTE_PURPLELV_PALETTE_DEEP_PURPLELV_PALETTE_INDIGOLV_PALETTE_BLUELV_PALETTE_LIGHT_BLUELV_PALETTE_CYANLV_PALETTE_TEALLV_PALETTE_GREENLV_PALETTE_LIGHT_GREENLV_PALETTE_LIMELV_PALETTE_YELLOWLV_PALETTE_AMBERLV_PALETTE_ORANGELV_PALETTE_DEEP_ORANGELV_PALETTE_BROWNLV_PALETTE_BLUE_GREYLV_PALETTE_GREY
获取主色使用 lv_color_t c = lv_palette_main(LV_PALETTE_...)。
获取调色板颜色的较亮变体使用 lv_color_t c = lv_palette_lighten(LV_PALETTE_..., v)。v 的取值范围为 1..5。
获取调色板颜色的较暗变体使用 lv_color_t c = lv_palette_darken(LV_PALETTE_..., v)。v 的取值范围为 1..4。
修改和混合颜色¶
以下函数可以修改颜色:
// 使颜色变亮。0: 无变化,255: 白色
lv_color_t c = lv_color_lighten(c, lvl);
// 使颜色变暗。0: 无变化,255: 黑色
lv_color_t c = lv_color_darken(lv_color_t c, lv_opa_t lvl);
// 变亮或变暗颜色。0: 黑色,128: 无变化,255: 白色
lv_color_t c = lv_color_change_lightness(lv_color_t c, lv_opa_t lvl);
// 按给定比例混合两种颜色。0: 完全 c2,255: 完全 c1,128: 各一半
lv_color_t c = lv_color_mix(c1, c2, ratio);
内置颜色¶
lv_color_white() 和 lv_color_black() 分别返回 0xFFFFFF 和 0x000000。
不透明度¶
lv_opa_t 类型由 uint8_t 创建,用于描述不透明度。还引入了一些特殊用途的定义:
LV_OPA_TRANSP值:0,表示完全透明LV_OPA_10值:25,表示颜色覆盖很少LV_OPA_20 ... OPA_80按逻辑递增LV_OPA_90值:229,表示颜色几乎完全覆盖LV_OPA_COVER值:255,表示颜色完全覆盖(完全不透明)
您还可以在 lv_color_mix() 中将 LV_OPA_* 定义用作混合比例。
颜色类型¶
颜色模块定义了以下变量类型:
lv_color1_t单色。也有 R、G、B 字段以保持兼容性,但它们始终具有相同的值(1 字节)。lv_color8_t用于存储 8 位颜色的结构,包含 R (3 位)、G (3 位)、B (2 位) 组件(1 字节)。lv_color16_t用于存储 16 位颜色的结构,包含 R (5 位)、G (6 位)、B (5 位) 组件(2 字节)。lv_color32_t用于存储 24 位颜色的结构,包含 R (8 位)、G (8 位)、B (8 位) 组件(4 字节)。lv_color_t根据配置的颜色深度设置等同于lv_color1/8/16/24_t。lv_color_int_t根据颜色深度设置为uint8_t、uint16_t或uint32_t。用于从普通数字构建颜色数组。lv_opa_t简单的uint8_t类型,用于描述不透明度。
lv_color_t、lv_color1_t、lv_color8_t、lv_color16_t 和 lv_color32_t 类型具有以下四个字段:
ch.red红色通道ch.green绿色通道ch.blue蓝色通道full*红 + 绿 + 蓝作为一个数字
您可以在 lv_conf.h 中通过设置 LV_COLOR_DEPTH 定义当前颜色深度为 1(单色)、8、16 或 32。
转换颜色¶
您可以将颜色从当前颜色深度转换为另一种颜色深度。转换器函数返回一个数字,因此您需要使用 full 字段将转换后的颜色映射回结构:
lv_color_t c;
c.red = 0x38;
c.green = 0x70;
c.blue = 0xCC;
lv_color1_t c1;
c1.full = lv_color_to1(c); /*对于浅色返回 1,对于深色返回 0*/
lv_color8_t c8;
c8.full = lv_color_to8(c); /*返回转换后的 8 位颜色数字*/
lv_color16_t c16;
c16.full = lv_color_to16(c); /*返回转换后的 16 位颜色数字*/
lv_color32_t c24;
c32.full = lv_color_to32(c); /*返回转换后的 32 位颜色数字*/
API¶
Typedefs
-
typedef lv_color_t (*
lv_color_filter_cb_t)(const struct _lv_color_filter_dsc_t*, lv_color_t, lv_opa_t)¶
-
typedef struct _lv_color_filter_dsc_t
lv_color_filter_dsc_t¶
Enums
-
Opacity percentages.
Values:
-
enumerator
LV_OPA_TRANSP¶
-
enumerator
LV_OPA_0¶
-
enumerator
LV_OPA_10¶
-
enumerator
LV_OPA_20¶
-
enumerator
LV_OPA_30¶
-
enumerator
LV_OPA_40¶
-
enumerator
LV_OPA_50¶
-
enumerator
LV_OPA_60¶
-
enumerator
LV_OPA_70¶
-
enumerator
LV_OPA_80¶
-
enumerator
LV_OPA_90¶
-
enumerator
LV_OPA_100¶
-
enumerator
LV_OPA_COVER¶
-
enumerator
-
enum
lv_palette_t¶ Values:
-
enumerator
LV_PALETTE_RED¶
-
enumerator
LV_PALETTE_PINK¶
-
enumerator
LV_PALETTE_PURPLE¶
-
enumerator
LV_PALETTE_DEEP_PURPLE¶
-
enumerator
LV_PALETTE_INDIGO¶
-
enumerator
LV_PALETTE_BLUE¶
-
enumerator
LV_PALETTE_LIGHT_BLUE¶
-
enumerator
LV_PALETTE_CYAN¶
-
enumerator
LV_PALETTE_TEAL¶
-
enumerator
LV_PALETTE_GREEN¶
-
enumerator
LV_PALETTE_LIGHT_GREEN¶
-
enumerator
LV_PALETTE_LIME¶
-
enumerator
LV_PALETTE_YELLOW¶
-
enumerator
LV_PALETTE_AMBER¶
-
enumerator
LV_PALETTE_ORANGE¶
-
enumerator
LV_PALETTE_DEEP_ORANGE¶
-
enumerator
LV_PALETTE_BROWN¶
-
enumerator
LV_PALETTE_BLUE_GREY¶
-
enumerator
LV_PALETTE_GREY¶
-
enumerator
_LV_PALETTE_LAST¶
-
enumerator
LV_PALETTE_NONE¶
-
enumerator
Functions
-
LV_EXPORT_CONST_INT(LV_COLOR_DEPTH)¶
-
LV_EXPORT_CONST_INT(LV_COLOR_16_SWAP)¶
-
typedef LV_CONCAT3 (uint, LV_COLOR_SIZE, _t) lv_color_int_t
-
typedef LV_CONCAT3 (lv_color, LV_COLOR_DEPTH, _t) lv_color_t
-
static inline uint8_t
lv_color_to1(lv_color_t color)¶
-
static inline uint8_t
lv_color_to8(lv_color_t color)¶
-
static inline uint16_t
lv_color_to16(lv_color_t color)¶
-
static inline uint32_t
lv_color_to32(lv_color_t color)¶
-
static inline uint8_t
lv_color_brightness(lv_color_t color)¶ Get the brightness of a color
- Parameters
color -- a color
- Returns
the brightness [0..255]
-
static inline lv_color_t
lv_color_make(uint8_t r, uint8_t g, uint8_t b)¶
-
static inline lv_color_t
lv_color_hex(uint32_t c)¶
-
static inline lv_color_t
lv_color_hex3(uint32_t c)¶
-
static inline void
lv_color_filter_dsc_init(lv_color_filter_dsc_t *dsc, lv_color_filter_cb_t cb)¶
-
lv_color_t
lv_color_lighten(lv_color_t c, lv_opa_t lvl)¶
-
lv_color_t
lv_color_darken(lv_color_t c, lv_opa_t lvl)¶
-
lv_color_t
lv_color_change_lightness(lv_color_t c, lv_opa_t lvl)¶
-
lv_color_t
lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)¶ Convert a HSV color to RGB
- Parameters
h -- hue [0..359]
s -- saturation [0..100]
v -- value [0..100]
- Returns
the given RGB color in RGB (with LV_COLOR_DEPTH depth)
-
lv_color_hsv_t
lv_color_rgb_to_hsv(uint8_t r8, uint8_t g8, uint8_t b8)¶ Convert a 32-bit RGB color to HSV
- Parameters
r8 -- 8-bit red
g8 -- 8-bit green
b8 -- 8-bit blue
- Returns
the given RGB color in HSV
-
lv_color_hsv_t
lv_color_to_hsv(lv_color_t color)¶ Convert a color to HSV
- Parameters
color -- color
- Returns
the given color in HSV
-
static inline lv_color_t
lv_color_chroma_key(void)¶ Just a wrapper around LV_COLOR_CHROMA_KEY because it might be more convenient to use a function in some cases
- Returns
LV_COLOR_CHROMA_KEY
-
lv_color_t
lv_palette_main(lv_palette_t p)¶
-
static inline lv_color_t
lv_color_white(void)¶
-
static inline lv_color_t
lv_color_black(void)¶
-
lv_color_t
lv_palette_lighten(lv_palette_t p, uint8_t lvl)¶
-
lv_color_t
lv_palette_darken(lv_palette_t p, uint8_t lvl)¶
-
union
lv_color1_t¶
-
union
lv_color8_t¶
-
union
lv_color16_t¶
-
union
lv_color32_t¶
-
struct
lv_color_hsv_t¶
-
struct
_lv_color_filter_dsc_t¶