稼働中

マイクロビット(m_02)microbit.Image

Image

「microbit」モジュールには「display, Image, button_a, button_b, accelerometer, compass,pin0, pin1, pin2, pin3, pin4 pin5, pin6, pin7, pin8, pin9, pin10, pin11, pin12,pin13, pin14, pin15, pin16, pin19, pin20,i2c, spi, uart, panic, reset, running_time, sleep, temperature」の関数などがあります。

※「microbit」モジュールを「from microbit import *」でインポートした前提で記載しています。

(02)microbit.Image

microbitモジュールにあるImageについて分かる範囲で記載します。
Image を使うと5x5LEDディスプレイに表示するイメージを簡単に作成できます。

Imageには「width()、height()、set_pixel(x, y, value)、get_pixel(x, y)、shift_left(n)
shift_right(n)、shift_up(n)、shift_down(n)、crop(x, y, w, h)、copy()、invert()、fill(value)、blit(src, x, y, w, h, xdest=0, ydest=0)」の関数があります。

(02-1)Image()

Imageを作成します。方法は4つあるようです。
①Image() – 空の 5×5 イメージを作成
②Image(string) – 文字を解析してイメージを作成
③Image(width, height) – 与えたサイズの空のイメージを作成
④Image(width, height, buffer) – 与えたバッファからイメージを作成


>>> from microbit import *
# 5x5 空のイメージを作成
>>> img=Image()
>>> img
Image('00000:00000:00000:00000:00000:')

※写真は「display.show(img)」で表示した状態。以降も同様です。

display.show(img)


## イメージ文字「A」を作成
>>> img=Image('A')
>>> img
Image('09900:90090:99990:90090:90090:')

Image('A')


# 2x3 空のイメージを作成(2列3行)
>>> img=Image(2,3)
>>> img
Image('00:00:00:')


# 2x3イメージのバッファーに明るさ値を追加
>>> img=Image(2,3,bytearray([0,1,2,3,4,5]))
>>> img
Image('01:23:45:')
>>> 

Image('01:23:45:')

Image(string)
Image(width=None, height=None, buffer=None)
オプションの buffer は0-9 の明るさの整数値を width × height 個並べた配列を指定します。


>>> img=Image(2, 2, bytearray([1,3,5,9]))       # 2x2 4コのデータ
>>> display.show(img)
>>> 
>>> img=Image(2, 3, bytearray([0,1,3,5,7,9]))   # 2x3 6コのデータ
>>> display.show(img)
>>> 
>>> img=Image(3, 2, bytearray([0,1,3,5,7,9]))   # 3x2 6コのデータ
>>> display.show(img)
>>> 

Image(3, 2 bytearray([0, 1, 3 ,5, 7, 9]))の写真

3,2の写真

(02-2)width()

イメージの列数を返します。

(02-3)height()

イメージの行数を返します。


>>> from microbit import *
>>> img=Image(3,2,bytearray([0,1,3,5,7,9]))

Image(3,2,bytearray([0,1,3,5,7,9]))


設定した3列2行LEDの幅(列数)と高(行数)を調べる
>>> img.width()
3
>>> img.height()
2

(02-4)set_pixel(x, y, value)

x 列 y 行のピクセルの明るさを value に設定します。


>>> from microbit import *
#iは5x5LEDの空イメージ
>>> i=Image()
>>> i
Image('00000:00000:00000:00000:00000:')

#1列4行LEDの明るさを9にする
>>> i.set_pixel(1,4,9)
>>> i
Image('00000:00000:00000:00000:09000:')

#2列4行LEDの明るさを8にする、追加される
>>> s=i.set_pixel
>>> s(2,4,8)
>>> i
Image('00000:00000:00000:00000:09800:')

Image('00000:00000:00000:00000:09800:')

(02-5)get_pixel(x, y)

x 列 y 行のピクセルの明るさを 0-9 の整数値で得ます。


>>> from microbit import *
#iは5x5LEDの空イメージ
>>> img=Image()

#0列0行のLEDの明るさを9にする
>>> img.set_pixel(0,0,9)
>>> img
Image('90000:00000:00000:00000:00000:')

Image('90000:00000:00000:00000:00000:')


#0列0行のLEDの明るさを調べる
>>> img.get_pixel(0,0)
9

#0列0行のLEDの明るさを調べる
>>> img.get_pixel(1,1)
0

(02-6)shift

shift_left(n)
shift_right(n)
shift_up(n)
shift_down(n)
各々シフトした新しいイメージを返します。


#3列2行のLEDイメージを作成
>>> img=Image(3,2,bytearray([0,1,3,5,7,9]))
>>> display.show(img)
>>> img
Image('013:579:')

#右に1つシフトさせる、領域から出ると消える、空の3行目が追加される
>>> img_r1=img.shift_right(1)
>>> img_r1
Image('001:057:000:')

#左に2つシフトさせる、領域から出ると消える
>>> img_l2=img.shift_left(2)
>>> img_l2
Image('300:900:000:')

>>> display.show(img_l2)
display.show(img.shift_left(2))でも同じ。

#左に2つシフトさせる、領域から出ると消える
(説明上赤で囲っているだけ、全体的にシフトする)


#5シフトで全て消える
>>> img
Image('013:579:')
>>> img_l5=img.shift_left(5)
>>> img_l5
Image('000:000:000:')

#マイナスもOK、逆にシフトする
>>> img
Image('013:579:')

#右に-1シフト
>>> img_rs1=img.shift_right(-1)
>>> img_rs1
Image('130:790:000:') #左にシフトしている

(02-7)crop(x, y, w, h)

切取り・トリミングします。
x 列 y 行のピクセルから始まって w 幅 h 高さ分をトリミングした新しいイメージを返します。


#3x2LEDイメージを作成
>>> img=Image(3,2,bytearray([0,1,3,5,7,9]))
>>> display.show(img)
>>> img
Image('013:579:')

013
579
#1列1行(値7)から2列1行の値(7,9)を切り取ったイメージを作成
>>> img_c=img.crop(1,1,2,1)
>>> img_c
Image('79:')
>>> display.show(img_c)

切取りされた新しいイメージの表示なので左上基準で表示される

Image('79:')


>>> img_c.width()
2
>>> img_c.height()
1

(02-8)copy()

イメージをコピーします。


>>> from microbit import *
#imgイメージを作成
>>> img = Image('90009:09990:09990:09990:90009:')

#imgをcp_imgにコピー
>>> cp_img=img.copy()
>>> cp_img
Image('90009:09990:09990:09990:90009:')

#組込みのイメージもコピーできるようです
>>> Image.HAPPY
Image('00000:09090:00000:90009:09990:')

#Image.HAPPYをcp_imgにコピー
>>> cp_img=Image.HAPPY.copy()
>>> cp_img
Image('00000:09090:00000:90009:09990:')
>>> 

(02-9)invert()

イメージの値を反転します。


#imgの作成
>>> img = Image('00111:22333:44555:66777:88999:')

#imgの反転
>>> img.invert()
Image('99888:77666:55444:33222:11000:')

(02-10)fill(value)

イメージ値をvalueで埋めます


#空のイメージを作成
>>> img=Image() 

#イメージを3で埋める
>>> img.fill(3)
>>> img
Image('33333:33333:33333:33333:33333:')

#3x2の空イメージを作成
>>> img=Image(3,2)

#イメージを5で埋める
>>> img.fill(5)
>>> img
Image('555:555:')

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

イメージ src から x, y, w, h で指定する領域を、このイメージの xdest, ydest の位置にコピーします。元のイメージの外側にあるピクセルは値が0 であるとして扱います。


#1で埋めたimg1
>>> img1.fill(1)
#2で埋めたimg2
>>> img2.fill(2)

img1から(x,y) = 1,1から2つ,2つをコピーしてimg2の0,0に貼る
>>> img2.blit(img1,1,1,2,2,0,0)

>>> img1
Image('11111:11111:11111:11111:11111:')

>>> img2
Image('11222:11222:22222:22222:22222:')
>>> 

img1の赤字の部分をimg2の水色の場所に表示

blit


#img1のコピー部の値を3にして動作の再確認
>>> img1=Image('11111:13311:13311:11111:11111:')
>>> img2.blit(img1,1,1,2,2,0,0)
>>> img2
Image('33222:33222:22222:22222:22222:')

まとめ

microbitモジュールのImageについて記載しました。Imageの続きは次回になります。