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-- バッファプロトコルをサポートする任意のオブジェクト。選択したformatでstride * heightピクセルを保持できる十分な大きさが必要です。width-- フレームバッファの幅(ピクセル単位)。height-- フレームバッファの高さ(ピクセル単位)。format-- ピクセルフォーマット。下記の 定数 に列挙されている定数のいずれかです。フォーマットは、buffer内の各ピクセルのサイズと、任意の描画メソッドに渡されるカラー整数cの解釈方法の両方を決定します。stride-- パディングを含む、水平方向の 1 行あたりのピクセル数。デフォルトはwidthです。より大きなバッファのサブ領域を使用するにはこれを設定します。
小さすぎる
bufferや無効な寸法を渡すと、未定義の結果が生じます。コンストラクターはすべての組み合わせを検証するわけではありません。
描画メソッド¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
(x, y)にwxhの矩形をカラー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)にサイズwxhの矩形をカラーcで描画します。fがTrueの場合は矩形が塗りつぶされ、そうでない場合は太さ 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値ではなくパレット出力に対して行われます。fbufはFrameBufferインスタンス、またはコンストラクターのシグネチャに一致するタプル/リストにできます:(buffer, width, height, format) (buffer, width, height, format, stride)
ソースがタプル/リストの場合、
bufferは読み取り専用にできます。paletteを使用すると、異なるフォーマットのバッファ間で blit できます。たとえば、モノクログリフを RGB565 バッファにレンダリングします。これは、フォーマットがコピー先に一致し、高さが 1、幅がソースカラー数(N ビット/ピクセルのソースの場合は2**N)に等しいFrameBufferです。ソースピクセル値iは、描画前にpalette[i, 0]のカラーに置き換えられます。
定数¶
次の format 値がコンストラクターで受け付けられます。「ピクセルあたりのバイト数」列は、バッキングバッファのサイズを決める際に必要な乗数です。
定数 |
バイト数/ピクセル |
ピクセルレイアウト |
|---|---|---|
|
0.125 |
モノクロ(1 ビット)。各バイトは縦に積み重ねられた 8 ピクセルを保持し、ビット 0 が最上部に最も近くなります。8 ピクセルの行は左から右にバッファを進み、その後次の 8 ピクセルの行に折り返します。 |
|
0.125 |
モノクロ(1 ビット)。各バイトは水平方向の 8 ピクセルを保持し、ビット 7 が最も左になります。行は縦方向に 1 ピクセルずつ進みます。 |
|
0.125 |
モノクロ(1 ビット)。 |
|
0.25 |
2 ビットグレースケール(4 階調)。最上位ビットを先頭にして水平方向にパックされます。 |
|
0.5 |
4 ビットグレースケール(16 階調)。最上位ニブルを先頭にして水平方向にパックされます。 |
|
1 |
8 ビットグレースケール(256 階調)。 |
|
2 |
16 ビット RGB。赤 5 ビット、緑 6 ビット、青 5 ビットです。 |
framebuf.MVLSB は framebuf.MONO_VLSB の非推奨のエイリアスです。新しいコードでは後者を使用してください。
レガシーコンストラクター¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride)の非推奨のショートカットです。後方互換性のために残されています。代わりに完全なFrameBufferコンストラクターを使用してください。