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

framebuf モジュールは、プリミティブな描画操作を備えた、小さくアロケーション不要のピクセルバッファを提供します。これは外部ディスプレイ(OLED、LCD、電子ペーパーなど)を駆動することを目的としています。

注釈

キャプチャしたフレームに対する画像処理作業には、代わりに OpenMV のはるかに高機能な image.Image クラスを使用してください。framebuf よりもはるかに多くの描画プリミティブ、カラー変換、解析機能を提供します。

class FrameBuffer

A FrameBuffer wraps a user-supplied buffer-protocol object (typically a bytearray) and exposes methods to draw pixels, lines, rectangles, ellipses, polygons, text and other FrameBuffers into it.

例:

import framebuf

# FrameBuffer needs 2 bytes for every RGB565 pixel.
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: Any, width: int, height: int, format: int, stride: int | None = None, /)

FrameBuffer オブジェクトを構築します。

  • buffer -- バッファプロトコルをサポートする任意のオブジェクト。選択した formatstride * height ピクセルを保持できる十分な大きさが必要です。

  • width -- フレームバッファの幅(ピクセル単位)。

  • height -- フレームバッファの高さ(ピクセル単位)。

  • format -- ピクセルフォーマット。下記の 定数 に列挙されている定数のいずれかです。フォーマットは、buffer 内の各ピクセルのサイズと、任意の描画メソッドに渡されるカラー整数 c の解釈方法の両方を決定します。

  • stride -- パディングを含む、水平方向の 1 行あたりのピクセル数。デフォルトは width です。より大きなバッファのサブ領域を使用するにはこれを設定します。

小さすぎる buffer や無効な寸法を渡すと、未定義の結果が生じます。コンストラクターはすべての組み合わせを検証するわけではありません。

描画メソッド

FrameBuffer.fill(c: int) None

フレームバッファ全体をカラー c で塗りつぶします。

FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None

(x, y)w x h の矩形をカラー c で塗りつぶします。f=True を指定した rect() と同等です。

FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None

c 引数なしの場合、(x, y) のピクセルのカラー値を返します。c を指定した場合、そのピクセルをカラー c に設定します。

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

カラー c で太さ 1 ピクセルの線を描画します。hline()vline() は指定された長さの水平/垂直線を描画し、line() は任意の 2 点間に線を描画します。

FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None

(x, y) にサイズ w x h の矩形をカラー c で描画します。fTrue の場合は矩形が塗りつぶされ、そうでない場合は太さ 1 ピクセルの輪郭のみが描画されます。

FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None

(x, y) を中心とし、x 方向の半径 xr と y 方向の半径 yr の楕円をカラー c で描画します。半径が等しい場合は円になります。f=True は輪郭だけでなく図形を塗りつぶします。

m は、描画を特定の象限(右上から反時計回りに番号付け)に制限するビットマスクです:

ビット

象限

領域

ビット 0

Q1

右上

ビット 1

Q2

左上

ビット 2

Q3

左下

ビット 3

Q4

右下

デフォルトの m=0 は 4 つの象限すべてを描画します。

FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None

オフセット (x, y) に任意の閉じた多角形(凸または凹)をカラー c で描画します。coords は、array('h', [x0, y0, x1, y1, ..., xn, yn]) としてレイアウトされた符号付き 16 ビット整数の array でなければなりません。f=True は輪郭だけでなく多角形を塗りつぶします。

FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None

文字列 s を、その左上隅を (x, y) に置いてカラー c で描画します。組み込みフォントは 8x8 ピクセルに固定されており、変更できません。c のデフォルトは 1 です。

FrameBuffer.scroll(xstep: int, ystep: int) None

バッファの内容を (xstep, ystep) だけシフトします。バッファの外側からシフトインされるピクセルはクリアされないため、前の内容の「ゴースト」が末尾側に残ることがあります。

FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None

別のフレームバッファ fbuf を、その左上隅を (x, y) に置いてこのバッファの上に描画します。

key が指定されている場合、そのカラー値に一致するソースピクセルは透明として扱われ、描画されません。palette が指定されている場合、比較は生の fbuf 値ではなくパレット出力に対して行われます。

fbufFrameBuffer インスタンス、またはコンストラクターのシグネチャに一致するタプル/リストにできます:

(buffer, width, height, format)
(buffer, width, height, format, stride)

ソースがタプル/リストの場合、buffer は読み取り専用にできます。

palette を使用すると、異なるフォーマットのバッファ間で blit できます。たとえば、モノクログリフを RGB565 バッファにレンダリングします。これは、フォーマットがコピー先に一致し、高さが 1、幅がソースカラー数(N ビット/ピクセルのソースの場合は 2**N)に等しい FrameBuffer です。ソースピクセル値 i は、描画前に palette[i, 0] のカラーに置き換えられます。

定数

次の format 値がコンストラクターで受け付けられます。「ピクセルあたりのバイト数」列は、バッキングバッファのサイズを決める際に必要な乗数です。

定数

バイト数/ピクセル

ピクセルレイアウト

MONO_VLSB

0.125

モノクロ(1 ビット)。各バイトは縦に積み重ねられた 8 ピクセルを保持し、ビット 0 が最上部に最も近くなります。8 ピクセルの行は左から右にバッファを進み、その後次の 8 ピクセルの行に折り返します。

MONO_HLSB

0.125

モノクロ(1 ビット)。各バイトは水平方向の 8 ピクセルを保持し、ビット 7 が最も左になります。行は縦方向に 1 ピクセルずつ進みます。

MONO_HMSB

0.125

モノクロ(1 ビット)。MONO_HLSB と同様ですが、ビット 0 が最も左になります。

GS2_HMSB

0.25

2 ビットグレースケール(4 階調)。最上位ビットを先頭にして水平方向にパックされます。

GS4_HMSB

0.5

4 ビットグレースケール(16 階調)。最上位ニブルを先頭にして水平方向にパックされます。

GS8

1

8 ビットグレースケール(256 階調)。

RGB565

2

16 ビット RGB。赤 5 ビット、緑 6 ビット、青 5 ビットです。

framebuf.MVLSBframebuf.MONO_VLSB の非推奨のエイリアスです。新しいコードでは後者を使用してください。

レガシーコンストラクター

framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer

FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride) の非推奨のショートカットです。後方互換性のために残されています。代わりに完全な FrameBuffer コンストラクターを使用してください。