LVGL8 显示图像

预览

图像是从flash(作为数组)或文件中显示图像的基本对象。图像也可以显示符号(LV_SYMBOL_.…)。
使用图像解码器接口也可以支持自定义图像格式。

组件和样式

LV_PART_MAIN一种使用典型背景样式属性的背景矩形和使用图像样式属性的图像本身的背景矩形。

用法

图片源文件

为了提供最大的灵活性,图像的来源可以是:

  • 代码中的一个变量(带有像素的C数组)。
  • 一个外部存储的文件(例如在SD卡上)。
  • 是一个带有符号的文本。

要设置图像的源,请使用lv_img_set_src(img, src)。要从PNG、JPG或BMP图像生成像素数组,请使用Online图像转换器工具及其指针设置转换图像:lv_img_set_src(img1, &converted_img_var);要使变量在C文件中可见,需要使用LV_IMG_DECLARE(converted_img_var)声明它。
要使用外部文件,您还需要使用在线转换器工具转换图像文件,但现在您应该选择二进制输出格式。您还需要使用LVGL的文件系统模块,并为基本文件操作的一些函数注册一个驱动程序。进入文件系统以了解更多信息。要设置来自文件的图像,请使用
lv_img_set_src(img, "S:folder1/my_img.bin")
您还可以设置一个类似于标签的符号。在这种情况下,图像将根据样式中指定的字体被渲染为文本。它允许使用轻量级的单色“字母”,而不是真实的图像。您可以设置lv_img_set_src(img1, LV_SYMBOL_OK)

标签作为图像

图像和标签有时也被用来传达同样的东西。例如,来描述一个按钮的作用。因此,图像和标签多少是可互换的,即图像可以通过使用LV_SYMBOL_DUMMY作为文本的前缀来显示文本。例如,lv_img_set_src(img,LV_SYMBOL_DUMMY“一些文本”)。

透明度

内部(变量)和外部图像支持2种透明度处理方法:

  • 具有LV_COLOR_CHROMA_KEY(lv_conf.h)颜色的彩色键控像素将是透明的。
  • Alpha字节-向包含像素不透明度的每个像素添加一个alpha字节

调色板与透明度索引

除了True颜色(RGB)颜色格式外,还支持以下格式:

  • 索引图像有一个调色板。
  • Alpha索引-仅存储alpha值。

可以在图像转换器中选择这些选项。要了解关于颜色格式的更多信息,请阅读图像部分。

颜色重绘

一种颜色可以与具有给定强度的图像的每个像素混合。这可用于显示不同的状态(已检查、不活动、按下等)。而不存储同一图像的更多版本。可以通过在LV_OPA_TRANSP(无重新着色器,值:0)和LV_OPA_COVER(全重新着色器,值:255)之间设置img_recolor_opa来在样式中启用此功能。默认值为LV_OPA_TRANSP,因此将禁用此功能。
要混合的颜色由img_recolor设置。

自适应尺寸

如果将图像对象的宽度或高度设置为LV_SIZE_CONTENT,则将根据图像源的大小在相应的方向上设置对象的大小。

马赛克

如果对象的大小在任何方向上都大于图像的大小,那么图像将像马赛克一样重复。这允许只从一个非常窄的源代码创建一个大的图像。例如,您可以拥有一个具有特殊渐变的300x5图像,并使用马赛克特征将其设置为壁纸。

偏移

使用lv_img_set_offset_x(img、x_ofs)和lv_img_set_offset_y(img、y_ofs),您可以向显示的图像添加一些偏移量。如果对象大小小于图像源大小时非常有用。使用偏移参数,可以通过设置x或y偏移的动画来创建纹理图集或“运行图像”效果。

转换

使用lv_img_set_zoom(img,因子),图像将被放大。设置因子为256或LV_IMG_ZOOM_NONE以禁用缩放。较大的值放大图像(例如512双倍尺寸),较小的值会缩小图像(例如128半尺寸)。分数尺度也可以有效。E.g.281,扩大10%。
要旋转图像,请使用lv_img_set_angle(例如,角度)。角度有0.1度的精度,所以对于45.8°设置458。transform_zoom和transform_angle样式属性也用于确定最终的缩放和角度。默认情况下,旋转的枢轴点是图像的中心。它可以用lv_img_set_pivot(img,pivot_x,pivot_y)进行更改。0;0是左上角。
转换的质量可以用lv_img_set_antialias进行调整(例如,真/假)。如果启用了抗混叠,转换的质量更高,但速度更慢。
这些转换要求整个图像可用。因此,索引图像(LV_IMG_CF_INDEXED_……),仅Alpha图像(LV_IMG_CF_ALPHA_…)或文件的图像不能转换。换句话说,转换只用于存储为C数组的真彩色图像,或者如果自定义图像解码器返回整个图像。
请注意,图像对象的真实坐标在转换过程中不会改变。即lv_obj_get_width/high/x/y()将返回原始的、未放大的坐标。

默认情况下,当放大或旋转图像时,不会更改图像对象的真实坐标。较大的内容只会溢出对象的边界。这也意味着布局不受转换的影响。
如果需要将对象大小更新为转换后的大小集lv_img_set_size_mode(img,LV_IMG_SIZE_MODE_REAL)。(前一种模式是默认模式,称为LV_IMG_SIZE_MODE_VIRTUAL)。在这种情况下,如果对象的宽度/高度被设置为LV_SIZE_CONTENT,则对象的大小将被设置为放大和旋转的大小。如果设置了一个显式的大小,那么溢出的内容将被裁剪。

事件

图像对象不发送任何特殊事件。
也请参见基础对象的事件。
了解更多关于事件的信息。

按键

对象类型不处理任何密钥。
了解更多关于关键的信息。

例程

来自变量和符号的图像

#include "../../lv_examples.h"
#if LV_USE_IMG && LV_BUILD_EXAMPLES
void lv_example_img_1(void) {
LV_IMG_DECLARE(img_cogwheel_argb);
lv_obj_t * img1 = lv_img_create(lv_scr_act());
lv_img_set_src(img1, &img_cogwheel_argb);
lv_obj_align(img1, LV_ALIGN_CENTER, 0, -20);
lv_obj_set_size(img1, 200, 200);
lv_obj_t * img2 = lv_img_create(lv_scr_act());
lv_img_set_src(img2, LV_SYMBOL_OK "Accept");
lv_obj_align_to(img2, img1, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
}#endif
#!/opt/bin/lv_micropython -i
import usys as sys
import lvgl as lv
import display_driver
from imagetools import get_png_info, open_png
# Register PNG image decoder
decoder = lv.img.decoder_create()
decoder.info_cb = get_png_info
decoder.open_cb = open_png
# Create an image from the png file
try:
with open('../../assets/img_cogwheel_argb.png','rb') as f:
png_data = f.read()
except:
print("Could not find img_cogwheel_argb.png")
sys.exit()
img_cogwheel_argb = lv.img_dsc_t({
'data_size': len(png_data),
'data': png_data
})
img1 = lv.img(lv.scr_act())
img1.set_src(img_cogwheel_argb)
img1.align(lv.ALIGN.CENTER, 0, -20)

API

类型定义

typedef uint8_t lv_img_size_mode_t

枚举

enum [anonymous]

图像大小模式下,当图像大小和对象大小不同时,值:
枚举器LV_IMG_SIZE_MODE_VIRTUAL缩放不影响对象的坐标,但是,如果在图像中放大,将从其坐标中提取。布局在缩放时不会改变
枚举器LV_IMG_SIZE_MODE_REAL如果对象大小设置为SIZE_CONTENT,则对象大小等于放大的图像大小。它会导致布局重新计算。如果显式地设置了对象大小,如果放大,图像将被裁剪。

你可能感兴趣的:(笔记,html,html5)