このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

framebuf --- フレームバッファの操作

このモジュールは、一般的なフレームバッファを提供し、ビットマップイメージを作成してディスプレイに送ることができます。

クラス FrameBuffer

FrameBuffer クラスは、ピクセル、ライン、矩形、楕円、多角形、テキスト、さらには他の FrameBuffer で描画できるピクセルバッファを提供します。ディスプレイの出力を生成するときに便利です。

たとえば次のように使います:

import framebuf

# FrameBuffer は RGB565 ピクセル毎に2バイトを必要とします
fbuf = framebuf.FrameBuffer(bytearray(100 * 10 * 2), 100, 10, framebuf.RGB565)

fbuf.fill(0)
fbuf.text('MicroPython!', 0, 0, 0xffff)
fbuf.hline(0, 9, 96, 0xffff)

コンストラクタ

class framebuf.FrameBuffer(buffer, width, height, format, stride=width, /)

FrameBuffer オブジェクトを構築します。パラメータは次のとおりです:

  • buffer はバッファプロトコルを持つオブジェクトで、FrameBuffer の幅、高さ、フォーマットで定義されたすべてのピクセルを格納するのに十分な大きさでなければなりません。

  • width は FrameBuffer の幅(ピクセル単位)です。

  • height は FrameBuffer の高さ(ピクセル単位)です。

  • format は FrameBuffer で使用されるピクセルのタイプを指定します。指定できる値は後述する定数にリストされているとおりです。これらは、カラー値をエンコードするために使用されるビットの数と、これらのビットのバッファ内のレイアウトを設定します。カラー値 c がメソッドに渡される場合、c は FrameBuffer のフォーマットに依存するエンコーディングを持つ小さな整数です。

  • stride は FrameBuffer 内の水平ラインのピクセル数です。これはデフォルトでは width ですが、別の大きな FrameBuffer や画面内に FrameBuffer を実装する際に調整が必要な場合があります。 buffer のサイズは増えるステップサイズに対応しなければなりません。

コンストラクターでは有効な buffer, width, height, format と、オプションの stride を指定する必要があります。 buffer のサイズや幅が無効な場合、予期しないエラーが発生します。

基本図形の描画

次のメソッドは FrameBuffer に図形を描画します。

FrameBuffer.fill(c)

FrameBuffer 全体を指定された色で塗りつぶします。

FrameBuffer.pixel(x, y[, c])

c を指定しない場合は、指定されたピクセルのカラー値を取得します。c を指定した場合は、指定したピクセルを指定した色に設定します。

FrameBuffer.hline(x, y, w, c)
FrameBuffer.vline(x, y, h, c)
FrameBuffer.line(x1, y1, x2, y2, c)

指定した色と1ピクセルの太さを使って、座標のセットから線を描画します。 line メソッドはラインを第2の座標セットへ描画するのに対し、 hlinevline メソッドはそれぞれ指定された長さまで水平ラインと垂直ラインを描画します。

FrameBuffer.rect(x, y, w, h, c[, f])

指定した位置、サイズ、色で短形を描画します。

オプションの f パラメータに True を指定すると、短形の内側を塗りつぶします。さもなければ1ピクセル幅で輪郭を描画するのみです。

FrameBuffer.ellipse(x, y, xr, yr, c[, f, m])

指定した位置に楕円を描画します。半径 xryr がジオメトリを定義し、同じ値であれば円を描画します。 c パラメータは色を定義します。

オプションの f パラメータに True を指定すると、楕円の内側を塗りつぶします。さもなければ1ピクセル幅で輪郭を描画するのみです。

オプションの m パラメータは、楕円の特定の象限に描画を制限できます。LS 4 ビットで描画する象限を決定します。ビット 0 で Q1、b1 Q2、b2 Q3、b3 Q4 を指定します。象限は反時計回りに番号付けされ、Q1が右上になります。

FrameBuffer.poly(x, y, coords, c[, f])

座標のリストを指定し、その指定した x, y の位置に任意の(凸または凹)閉じた多角形を、指定の色で描画します。

coordsarray を使って整数の配列で指定する必要があります。たとえば、 array('h', [x0, y0, x1, y1, ... xn, yn]) のように指定します。

オプションの f パラメータに True を指定すると、ポリゴンを塗りつぶします。さもなければ1ピクセル幅で輪郭を描画するのみです。

テキストの描画

FrameBuffer.text(s, x, y[, c])

座標をテキストの左上隅として、FrameBuffer にテキストを書き込みます。テキストの色はオプションの引数で定義できますが、それ以外の場合はデフォルト値は 1 です。すべての文字のサイズは8x8ピクセルですが、現在フォントを変更する方法はありません。

その他のメソッド

FrameBuffer.scroll(xstep, ystep)

指定された方向へ FrameBuffer の内容をシフトします。これにより、FrameBuffer に前の色のフットプリントが残る場合があります。

FrameBuffer.blit(fbuf, x, y, key=-1, palette=None)

現在のフレームバッファの上の指定された座標に、別の FrameBuffer を描画します。 key が指定されている場合、それは色を表す整数でなければならず、対応する色は透明であるとみなされます。その色の値を持つすべてのピクセルは描画されません。(palette が指定された場合、 keyfbuf から直接得られる値ではなく、 palette の値と比較されます。)

引数 palette を使うと、異なるフォーマットの FrameBuffer 間で結果の色を調整できます。典型的な利用法は、モノクロまたはグレースケールのグリフ/アイコンをカラーディスプレイにレンダリングすることです。 palette は、現在の FrameBuffer のフォーマットを持つ FrameBuffer インスタンスです。 palette の高さは1ピクセルで、そのピクセル幅はソースとなる FrameBuffer の色数です。Nビットソースの palette には 2**N ピクセルが必要です。モノクロソースの palette には、背景色と前景色を表す2ピクセルが必要です。アプリケーションは palette 内の各ピクセルに色を割り当てます。現在のピクセルの色は、x位置が対応するソースピクセルの色になっている palette ピクセルの色になります。

定数

framebuf.MONO_VLSB

モノクロ(1ビット)カラーフォーマットこれは、バイトのビットが垂直方向にマップされ、ビット0が画面の最上部に最も近いマッピングを定義します。したがって、各バイトは8垂直ピクセルを占有します。後続のバイトは、右端に達するまで連続した水平位置に現れます。さらに後続のバイトは、最左端から8ピクセル下の位置でレンダリングされます。

framebuf.MONO_HLSB

モノクロ(1ビット)カラーフォーマット。これはバイト内のビットが水平方向にマッピングされるよう定義します。各バイトは8ビットの水平ピクセルを占め、ビット7が最も左になります。後続のバイトは右端に達するまで連続した水平位置に現れます。さらに後続のバイトは1ピクセル下の次の行にレンダリングされます。

framebuf.MONO_HMSB

モノクロ(1ビット)カラーフォーマット。これはバイト内のビットが水平方向にマッピングされるよう定義します。各バイトは8ビットの水平ピクセルを占め、ビット0が最も左になります。後続のバイトは右端に達するまで連続した水平位置に現れます。さらに後続のバイトは1ピクセル下の次の行にレンダリングされます。

framebuf.RGB565

レッドグリーンブルー(16ビット、5+6+5)カラーフォーマット

framebuf.GS2_HMSB

グレースケール(2ビット)カラーフォーマット

framebuf.GS4_HMSB

グレースケール(4ビット)カラーフォーマット

framebuf.GS8

グレースケール(8ビット)カラーフォーマット