EV3 MicroPython 指南

EV3 MicroPython 指南 > PYBRICKS 模块 > 声音和图像

声音和图像

本模块介绍可在项目中使用的媒体,例如声音和图像。媒体分为多个子模块,指示它们在哪个平台上可用。

media.ev3dev – 声音和图像

EV3 MicroPython 建立在 ev3dev 之上,其中包含各种图像和声音文件。您可以使用以下类访问它们。

您还可以通过将自己的声音和图像文件放在项目文件夹中来使用它们。

镜像文件

class ImageFile

标准 EV3 图像的路径。

声音文件

class SoundFile

标准 EV3 声音的路径。

Fonts  字体

class Font(family=Nonesize=12bold=Falsemonospace=Falselang=Nonescript=None)

表示用于写入文本的字体的对象。

字体对象将是根据给定的参数和安装的可用字体“最佳”匹配的字体。

参数:
  • family (str) – 首选字体系列或 None 以使用默认值。
  • size (int) – 首选字体大小。大多数字体的大小在 6 到 24 之间。这是“点”大小,与高度不同。
  • 粗体 bool) – 当 True 时,首选粗体字体。
  • 等宽 bool) – 当 True 时,首选等宽字体。这对于对齐多行文本很有用。
  • lang (str) – 语言代码,例如 “en” 或 “zh-cn” 或 None 以使用默认语言。[1]
  • script (str) – Unicode 脚本标识符,例如 “Runr” 或 None。

DEFAULT= Font('Lucida', 12)

默认字体。

family

获取字体的系列名称。

style

获取描述字体样式的字符串。

可以是“常规”或“粗体”。

width

获取字体最宽字符的宽度。

height

获取字体的高度。

text_width(text)

使用此字体绘制文本时获取文本的宽度。

参数: text (str) – 文本。
返回: 宽度(以像素为单位)。
返回类型: int
text_height(text)

使用此字体绘制文本时获取文本的高度。

参数: text (str) – 文本。
返回: 以像素为单位的高度。
返回类型: int

Exploring more fonts  探索更多字体

在幕后,Pybricks 使用 Fontconfig 来制作字体。Fontconfig 命令行工具可用于更详细地探索可用字体。为此,请转到 ev3dev 设备浏览器,右键单击您的 EV3 积木,然后单击打开 SSH 终端 。然后,您可以输入以下命令之一:

# List available font families.
fc-list :scalable=false family
# Perform lookup similar to Font.DEFAULT
fc-match :scalable=false:dpi=119:family=Lucida:size=12
# Perform lookup similar to Font(size=24,lang=zh-cn)
fc-match :scalable=false:dpi=119:size=24:lang=zh-cn

Pybricks 只允许使用位图字体 (scalable=false),EV3 上的屏幕每英寸有 119 像素 (dpi=119)。

图像处理

你可以使用下面给出的 Image 类制作图像文件并与之交互,而不是直接在 EV3 屏幕上绘制。

class Image(sourcesub=False)

表示图形图像的对象。这可以是图像的内存中副本,也可以是屏幕上显示的图像。

参数:
  • 图像的来源。

    如果 source 是字符串,则图像将从字符串给出的文件路径加载。仅支持 .png 个文件。作为一种特殊情况,如果字符串是 _screen_,则图像将被配置为直接在屏幕上绘制。

    如果给出了 Image,则新对象将包含源图像对象的副本。

  • sub ( 布尔值) –

    如果 sub 为 True,则图像对象将充当源图像的子图像(这仅在源类型为 Image 而不是 str 时才有效)。

    当 sub=True 时,需要额外的关键字参数 x1、y1、x2、y2。这些指定源图像中的左上和右下坐标,这些坐标将用作子图像的边界。

static empty(width=<screen width>height=<screen height>)

创建一个新的空 Image 对象。

参数:
  • width (int) – 图像的宽度(以像素为单位)。
  • height (int) – 图像的高度(以像素为单位)。
返回:

所有像素都设置为 Color.WHITE 的新图像。

返回类型:

Image  图像

异常:
  • TypeError – 宽度或高度不是数字。
  • ValueError – 宽度或高度小于 1。
  • RuntimeError – 分配新映像时出现问题。

绘图文本

有两种方法可以在图像上绘制文本。draw_text() 可以将文本精确地放置在图像上,或者 print() 可用于自动在新行上打印文本。

draw_text(xytexttext_color=Color.BLACKbackground_color=None)

在此图像上绘制文本。

将使用使用 set_font() 的最新字体集或 Font.DEFAULT,如果尚未设置字体。

参数:
  • x (int) – 文本左侧开始的 x 轴值。
  • y (int) – 文本顶部开始的 y 轴值。
  • text (str) – 要绘制的文本。
  • text_color 颜色 )——用于绘制文本的颜色。
  • background_color 颜色 )——用于填充文本后面的矩形或无的颜色 用于透明背景。

print(*argssep=' 'end='\n')

在此图像上打印一行文本。

此方法的工作原理类似于内置的 print() 函数,但它写入此图像。

您可以使用 set_font() 设置字体。如果未设置字体, Font.DEFAULT 将被使用。文本始终使用白色背景的黑色文本打印。

与内置的 print() 不同,如果文本太宽而无法容纳此图像,则不会换行。它只是被切断了。但是,如果文本会从此图像的底部消失,则整个图像将向上滚动,并将文本打印在此图像底部的新空白区域中。

参数:
  • * ( 对象 ) – 要打印的零个或多个对象。
  • sep (str) – 将放置在每个打印对象之间的分隔符。
  • end (str) – 将在最后一个对象之后打印的行尾。

set_font(font)

设置用于在此图像上书写的字体。

该字体用于 draw_text() 和 print()。

参数: font ( 字体 ) – 要使用的字体。

绘图图像

可以在图像上绘制另一个图像的副本。还可以考虑使用子图像来复制图像的一部分。

draw_image(xysourcetransparent=None)

在此图像上绘制源图像。

参数:
  • x (int) – 图像左侧将开始的 x 轴值。
  • y (int) – 图像顶部将开始的 y 轴值。
  • source (Image 或 str) – 源 Image。如果参数是字符串,则从文件加载源图像。
  • 透明  颜色 ) – 要被视为透明的图像颜色,或无表示不透明的图像颜色。

绘制形状

这些是绘制基本形状的方法,包括点、线、矩形和圆形。

draw_pixel(xycolor=Color.BLACK)

在此图像上绘制单个像素。

参数:
  • x (int) – 像素的 x 坐标。
  • y (int) – 像素的 y 坐标。
  • color (Color) – 像素的颜色。

draw_line(x1y1x2y2width=1color=Color.BLACK)

在此图像上画一条线。

参数:
  • x1 (int) – 线起点的 x 坐标。
  • y1 (int) – 直线起点的 y 坐标。
  • x2 (int) – 线终点的 x 坐标。
  • y2 (int) – 线终点的 y 坐标。
  • width (int) – 线条的宽度,以像素为单位。
  • color (Color) – 线条的颜色。

draw_box(x1y1x2y2r=0fill=Falsecolor=Color.BLACK)

在此图像上绘制一个框。

参数:
  • x1 (int) – 框左侧的 x 坐标。
  • y1 (int) – 框顶部的 y 坐标。
  • x2 (int) – 框右侧的 x 坐标。
  • y2 (int) – 框底部的 y 坐标。
  • r (int) – 盒子角的半径。
  • fill (bool) – 如果为 True,则框将填充颜色 ,否则仅绘制框的轮廓。
  • color (Color) – 盒子的颜色。

draw_circle(xyrfill=Falsecolor=Color.BLACK)

在此图像上画一个圆圈。

参数:
  • x (int) – 圆心的 x 坐标。
  • y (int) – 圆心的 y 坐标。
  • r (int) – 圆的半径。
  • fill (bool) – 如果为 True,则圆圈将填充 颜色 ,否则只画周长。
  • color (Color) – 圆圈的颜色。

图像属性

width

获取此图像的宽度(以像素为单位)。

height

获取此图像的高度(以像素为单位)。

替换整个图像

clear()

清除此图像。此图像上的所有像素将设置为 颜色.白色 。

load_image(source)

清除此图像,然后在此图像的中心绘制源图像。

参数: source (Image 或 str) – 源 Image。如果参数是字符串,则从文件加载源图像。

保存图像

save(filename)

将此图像另存为 .png 文件。

参数:

filename (str) – 要保存的文件的路径。

异常:
  • TypeError – 文件名不是字符串。
  • OSError – 保存文件时出现问题。