3.2 Display模块API手册#

前言#

概述#

此文档介绍CanMV Display模块,用以指导开发人员如何调用MicroPython API实现图像显示功能。

读者对象#

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师

  • 软件开发工程师

缩略词定义#

简称

说明

VO

Video Output

DSI

Display Serial Interface

修订记录#

文档版本号

修改说明

修改者

日期

V1.0

初版

王权

2023-09-15

V2.0

重构API

xel

2024-06-11

注意

该模块在固件版本V0.7之后有较大改变,若使用V0.7之前固件请参考旧版本的文档

1. 概述#

此文档介绍CanMV Display模块,用以指导开发人员如何调用Micro Python API实现图像显示功能。

2. API描述#

2.1 init#

【描述】

初始化整个Display通路,包括VO模块、DSI模块、LCD/HDMI

必须在MediaManager.init()之前调用

【语法】

def init(type = None, width = None, height = None, osd_num = 1, to_ide = False, fps = None, quality = 90)

【参数】

参数名称

描述

输入/输出

说明

type

显示设备类型

输入

必选

width

分辨率宽度

输入

默认值根据type决定

height

分辨率高度

输入

默认值根据type决定

osd_num

show_image时可以支持的LAYER数量

输入

越大占用内存越多

to_ide

是否将屏幕显示传输到IDE显示

输入

开启会占用更多内存

fps

显示帧率

输入

仅支持VIRT类型

quality

设置Jpeg压缩质量

输入

to_ideTrue时有效,取值范围[10-100]

【返回值】

返回值

描述

【注意】

【举例】

【相关主题】

2.2 show_image#

【描述】

在屏幕上显示图像

【语法】

def show_image(img, x = 0, y = 0, layer = None, alpha = 255, flag = 0)

【参数】

参数名称

描述

输入/输出

说明

img

显示的图像

输入

x

起始坐标的x值

输入

y

起始坐标的y值

输入

layer

显示到指定层

输入

仅支持OSD
若需要多层请设置init参数中的osd_num

alpha

图层混合alpha

输入

flag

显示标志

输入

【返回值】

返回值

描述

【注意】

【举例】

【相关主题】

2.3 deinit#

【描述】

执行反初始化,deinit方法会关闭整个Display通路,包括VO模块、DSI模块、LCD/HDMI

必须在MediaManager.deinit()之前调用 必须在sensor.stop()之后调用

【语法】

def deinit()

【返回值】

返回值

描述

【注意】

【举例】

【相关主题】

2.4 bind_layer#

【描述】

绑定sensorvdec模块输出到屏幕显示 不需要用户手动参与即可将图像持续显示到屏幕

必须在init之前调用

【语法】

def bind_layer(src=(mod, dev, layer), dstlayer, rect = (x, y, w, h), pix_format, alpha, flag)

【参数】

参数名称

描述

输入/输出

说明

src

sensorvdec 输出信息

输入

可通过sensor.bind_info()获取

dstlayer

绑定到Display的显示层

输入

可绑定到videoosd

rect

显示区域

输入

可通过sensor.bind_info()获取

pix_format

图像像素格式

输入

可通过sensor.bind_info()获取

alpha

图层混合alpha

输入

flag

显示标志

输入

LAYER_VIDEO1不支持

【返回值】

返回值

描述

【注意】

【举例】

【相关主题】

3. 数据结构描述#

3.1 type#

类型

分辨率
(width x height @ fps)

备注

LT9611

1920x1080@30

默认值

1280x720@30

640x480@60

HX8377

1080x1920@30

默认值

ST7701

800x480@30

默认值
可设置为竖屏480x800

854x480@30

可设置为竖屏480x854

VIRT

640x480@90

默认值

IDE调试专用,不显示内容在外接屏幕
用户可自定义设置分辨率(64x64)-(4096x4096)和帧率(1-200)

3.2 layer#

显示层

说明

备注

LAYER_VIDEO1

bind_layer可用

LAYER_VIDEO2

bind_layer可用

LAYER_OSD0

支持show_imagebind_layer使用

LAYER_OSD1

支持show_imagebind_layer使用

LAYER_OSD2

支持show_imagebind_layer使用

LAYER_OSD3

支持show_imagebind_layer使用

3.3 flag#

标志

说明

备注

FLAG_ROTATION_0

旋转0

FLAG_ROTATION_90

旋转90

FLAG_ROTATION_180

旋转180

FLAG_ROTATION_270

旋转270

FLAG_MIRROR_NONE

不镜像

FLAG_MIRROR_HOR

水平镜像

FLAG_MIRROR_VER

垂直镜像

FLAG_MIRROR_BOTH

水平与垂直镜像

4. 示例程序#

例程

from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入display模块,使用display相关接口
import os, time, image #导入image模块,使用image相关接口

# use lcd as display output
Display.init(Display.ST7701, width = 800, height = 480, to_ide = True)
# init media manager
MediaManager.init()

# create image for drawing
img = image.Image(800, 480, image.RGB565)
img.clear()
img.draw_string_advanced(0,0,32, "Hello World!,你好世界!!!", color = (255, 0, 0))

Display.show_image(img)

try:
    while True:
        time.sleep(1)
        os.exitpoint()
except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")

Display.deinit()
MediaManager.deinit()