颜色

颜色模块处理所有与颜色相关的功能,例如更改颜色深度、从十六进制代码创建颜色、在颜色深度之间转换、混合颜色等。

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_RED

  • LV_PALETTE_PINK

  • LV_PALETTE_PURPLE

  • LV_PALETTE_DEEP_PURPLE

  • LV_PALETTE_INDIGO

  • LV_PALETTE_BLUE

  • LV_PALETTE_LIGHT_BLUE

  • LV_PALETTE_CYAN

  • LV_PALETTE_TEAL

  • LV_PALETTE_GREEN

  • LV_PALETTE_LIGHT_GREEN

  • LV_PALETTE_LIME

  • LV_PALETTE_YELLOW

  • LV_PALETTE_AMBER

  • LV_PALETTE_ORANGE

  • LV_PALETTE_DEEP_ORANGE

  • LV_PALETTE_BROWN

  • LV_PALETTE_BLUE_GREY

  • LV_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() 分别返回 0xFFFFFF0x000000

不透明度

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_tuint16_tuint32_t。用于从普通数字构建颜色数组。

  • lv_opa_t 简单的 uint8_t 类型,用于描述不透明度。

lv_color_tlv_color1_tlv_color8_tlv_color16_tlv_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
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

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

Public Members

uint8_t full
uint8_t blue
uint8_t green
uint8_t red
union lv_color1_t ch
union lv_color8_t

Public Members

uint8_t blue
uint8_t green
uint8_t red
struct lv_color8_t ch
uint8_t full
union lv_color16_t

Public Members

uint16_t blue
uint16_t green
uint16_t red
uint16_t green_h
uint16_t green_l
struct lv_color16_t ch
uint16_t full
union lv_color32_t

Public Members

uint8_t blue
uint8_t green
uint8_t red
uint8_t alpha
struct lv_color32_t ch
uint32_t full
struct lv_color_hsv_t

Public Members

uint16_t h
uint8_t s
uint8_t v
struct _lv_color_filter_dsc_t

Public Members

lv_color_filter_cb_t filter_cb
void *user_data