Images(图像)

Microbit配备5*5格红色LED灯,使用micropython,让你领略艺术图案。

Micropython拥有许多内置图片用于显示。

例如:开发板显示图片HAPPY

from microbit import *
display.show(Image.HAPPY)

相信你能记住第一行的内容。第二行使用displayshow()方法显示一个内置图像。想要显示HAPPY这个图片,要调用Image类的HAPPY方法。我们使用show()来显示它,并且要将使用的内容放到()括号中间。

Classes(类)

class microbit.Image(string)
class microbit.Image(width=None,height=None,buffer=None)
width()

返回图像的列数

height()

返回图像的行数

set_pixel(x,y,value)

设置x列y行的像素亮度为value,在0(暗)和图9(亮)之间。

这种方法不能改变任何内置的图像,否则会异常,因为内置图像是只读的,例如Image.HEART

get_pixel(x,y)

返回x列y行的像素亮度值,范围在0(暗)到9(亮)之间。

shift_left(n)

返回通过将图片左移n位而得到的新图像 。

shift_right(n)

返回通过将图片右移n位而得到的新图像 。

shift_up(n)

返回通过将图片上移n位而得到的新图像 。

shift_down(n)

返回通过将图片下移n位而得到的新图像 。

crop(x,y,w,h)

从x列y行将图像裁剪为宽度w,高度h的新图像。

copy()

返回该图像复制的新图像。

invert()

通过反转图像中像素的亮度来返回新图像。

fill(value)

将图像中所有像素的亮度设置为 value,必须在0(暗)和9(亮)之间。

这种方法会在任何内置的只读图像调用时发生异常,例如Image.HEART。

blit(src,x,y,w,h,xdest=0,ydest=0)

将图像src 中的xywh指定的矩形图像复制到这个图像中,xdestydest为目标图像中的坐标。

shift_left()shift_right()shift_up()shift_down()crop() 可以通过使用blit()全部实现。例,img.crop(x,y,w,h)可以实现为:

def crop(self, x, y, w, h):
    res = Image(w, h)
    res.blit(self, x, y, w, h)
    return res

以下是内置Image图片:

这里有很多图片,你可以使用这些图片来代替HAPPY,只需要将Image.HAPPY替换成你想要显示的图片即可。

Operations(操作)

repr(image)

获取图像的字符串表示。

str(image)

将图像转化为字符串。

image1+image2

将两个图像对应的像素相加,得到新图像。

image*n

通过乘以每个像素的亮度创建一个新的图像。

DIY Images(自己手动制作图片)

如果你想在microbit开发板上显示你自己设计的图片,很简单。

每一个LED灯都有十种模式可以设置。如果设置为0,则关闭该LED灯;如果设置为9则LED灯亮度最大;1-8可设置LED灯不同的亮度,值越大,亮度越大。

所以,你可以创建一个新图像,如下所示:

from microbit import *

boat=Image("05050:" #第一行的五个灯,每个值对应每个灯的亮度(0为关闭LED灯)
"05050:"
"05050:"
"99999:"
"09990")
display.show(boat)

你也可以写成这样:

boat=Image("05050:05050:05050:99999:09990")

Animation(动态图)

显示动态图片,只需要使用图像列表即可。

列表的写法如下:

shopping=["Eggs","Bacon","Tomatoes"]

shopping列表,包含三个项。由于shopping内容在” [ ”和” ] ”之间,python解释器会将shopping识别成一个列表。列表中每个项,以”,”区分。可以看出shopping列表中包含三个项,分别为:“Eggs”,”Bacon”,”Tomatoes”。而这三个项都以引号引起来,所以三个项都是字符串。

你也可以在列表中储存其他类型的数据,例如数字,写法如下:

primes=[2,3,5,7,11,13,17,19]

列表中也可以包含不同的数据类型,如下,包含字符串,浮点数,内置图片:

mixed_up_list=["hello!",1.234,Image.HAPPY]

我们可以使用图片动画,例如Image.ALL_CLOCKSImage.ALL_ARROWS:

from microbit import *
display.show(Image.ALL_CLOCKS,loop=True,delay=100)

使用display.show来显示这个动画,Image.ALL_CLOCKS中包含一个图片列表,loop表示循环显示,delay=100表示每隔100毫秒改变一次。

最后,介绍如何创建自己的动画,如下:

from microbit import *

boat1=Image("05050:05050:99999:09990:00900")
boat2=Image("00000:05050:05050:99999:09990")
boat3=Image("00000:00000:05050:05050:99999")
boat4=Image("00000:00000:00000:05050:05050")
boat5=Image("00000:00000:00000:00000:05050")
boat6=Image("00000:00000:00000:00000:00000")
while True:
  all_boats=[boat1,boat2,boat3,boat4,boat5,boat6]
  display.show(all_boats,delay=200)

上述动画生效步骤: