Images(图像)
Microbit配备5*5格红色LED灯,使用micropython,让你领略艺术图案。
Micropython拥有许多内置图片用于显示。
例如:开发板显示图片HAPPY
from microbit import *
display.show(Image.HAPPY)
相信你能记住第一行的内容。第二行使用display
的show()
方法显示一个内置图像。想要显示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
中的x
,y
,w
,h
指定的矩形图像复制到这个图像中,xdest
,ydest
为目标图像中的坐标。
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图片:
- Image.HEART
- Image.HEART_SMALL
- Image.HAPPY
- Image.SMILE
- Image.SAD
- Image.CONFUSED
- Image.ANGRY
- Image.ASLEEP
- Image.SURPRISED
- Image.SILLY
- Image.FABULOUS
- Image.MEH
- Image.YES
- Image.NO
- Image.CLOCK12,Image.CLOCK11,Image.CLOCK10,Image.CLOCK9,Image.CLOCK8,Image.CLOCK7,Image.CLOCK6,Image.CLOCK5,Image.CLOCK4,Image.CLOCK3,Image.CLOCK2,Image.CLOCK1
- Image.ARROW_N,Image.ARROW_NE,Image.ARROW_E,Image.ARROW_SE,Image.ARROW_S,Image.ARROW_SW,Image.ARROW_W,Image.ARROW_NW
- Image.TRIANGLE
- Image.TRIANGLE_LEFT
- Image.CHESSBOARD
- Image.DIAMOND
- Image.DIAMOND_SMALL
- Image.SQUARE
- Image.SQUARE_SMALL
- Image.RABBIT
- Image.COW
- Image.MUSIC_CROTCHET
- Image.MUSIC_QUAVER
- Image.MUSIC_QUAVERS
- Image.PITCHFORK
- Image.XMAS
- Image.PACMAN
- Image.TARGET
- Image.TSHIRT
- Image.ROLLERSKATE
- Image.DUCK
- Image.HOUSE
- Image.TORTOISE
- Image.BUTTERFLY
- Image.STICKFIGURE
- Image.GHOST
- Image.SWORD
- Image.GIRAFFE
- Image.SKULL
- Image.UMBRELLA
- Image.SNAKE
这里有很多图片,你可以使用这些图片来代替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_CLOCKS
和Image.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)
上述动画生效步骤:
- 以相同的方式,创建了6个图片
- 把这6个图片全部放进
all_boats
- 使用
display.show()
每隔200毫秒刷新一次all_boats
中的图片 - 设置
loop=True
来循环显示该动画