framebuf --- manipulasi buffer bingkai#

Modul framebuf menyediakan buffer piksel kecil bebas-alokasi dengan operasi gambar primitif. Modul ini ditujukan untuk mengendalikan tampilan eksternal (OLED, LCD, e-paper, dll.).

Catatan

Untuk pekerjaan pemrosesan citra pada bingkai yang ditangkap, gunakan kelas image.Image OpenMV yang jauh lebih kaya -- kelas ini menawarkan jauh lebih banyak primitif gambar, konversi warna, dan fitur analisis dibandingkan framebuf.

class FrameBuffer#

Sebuah FrameBuffer membungkus objek protokol buffer yang disediakan pengguna (biasanya bytearray) dan mengekspos metode untuk menggambar piksel, garis, persegi panjang, elips, poligon, teks, dan FrameBufferlainnya ke dalamnya.

Contoh:

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)

Konstruktor#

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

Membuat objek FrameBuffer.

  • buffer -- objek apa pun yang mendukung protokol buffer; harus cukup besar untuk menampung piksel stride * height pada format yang dipilih.

  • width -- lebar buffer bingkai dalam piksel.

  • height -- tinggi buffer bingkai dalam piksel.

  • format -- format piksel; salah satu konstanta yang tercantum di Konstanta di bawah. Format menentukan ukuran setiap piksel dalam buffer dan bagaimana bilangan bulat warna c yang diteruskan ke metode gambar apa pun diinterpretasikan.

  • stride -- jumlah piksel per baris horizontal, termasuk padding apa pun. Defaultnya adalah width. Setel ini untuk menggunakan sub-wilayah buffer yang lebih besar.

Meneruskan buffer yang terlalu kecil, atau dimensi yang tidak valid, akan menghasilkan hasil yang tidak terdefinisi -- konstruktor tidak memvalidasi setiap kombinasi.

Metode gambar#

FrameBuffer.fill(c: int) None#

Isi seluruh buffer bingkai dengan warna c.

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

Isi persegi panjang w x h pada (x, y) dengan warna c. Setara dengan rect() dengan f=True.

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

Tanpa argumen c, kembalikan nilai warna piksel pada (x, y). Dengan c diberikan, setel piksel tersebut ke warna 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#

Gambar garis setebal 1 piksel dalam warna c. hline() dan vline() menggambar garis horizontal/vertikal dengan panjang yang diberikan; line() menggambar garis antara dua titik sembarang.

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

Gambar persegi panjang pada (x, y) berukuran w x h dalam warna c. Jika f adalah True persegi panjang diisi; jika tidak hanya garis luar 1 piksel yang digambar.

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

Gambar elips yang berpusat pada (x, y) dengan jari-jari x xr dan jari-jari y yr dalam warna c. Jari-jari yang sama menghasilkan lingkaran. f=True mengisi bentuk alih-alih hanya menggariskannya.

m adalah bitmask yang membatasi gambar ke kuadran tertentu (diberi nomor berlawanan arah jarum jam dari kanan atas):

Bit

Kuadran

Wilayah

bit 0

Q1

Kanan atas

bit 1

Q2

Kiri atas

bit 2

Q3

Kiri bawah

bit 3

Q4

Kanan bawah

Default m=0 menggambar semua empat kuadran.

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

Gambar poligon tertutup sembarang (cembung atau cekung) pada offset (x, y) dalam warna c. coords harus berupa array dari bilangan bulat 16-bit bertanda yang ditata sebagai array('h', [x0, y0, x1, y1, ..., xn, yn]). f=True mengisi poligon alih-alih hanya menggariskannya.

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

Gambar string s dengan pojok kiri atasnya pada (x, y) dalam warna c. Font bawaan ditetapkan pada 8x8 piksel dan tidak dapat diubah. c defaultnya adalah 1.

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

Geser isi buffer sebesar (xstep, ystep). Piksel yang digeser dari luar buffer tidak dibersihkan, sehingga "bayangan" dari isi sebelumnya mungkin tetap ada di tepi belakang.

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

Gambar buffer bingkai lain fbuf di atas yang ini dengan pojok kiri atasnya pada (x, y).

Jika key diberikan, piksel sumber mana pun yang cocok dengan nilai warna tersebut diperlakukan sebagai transparan dan tidak digambar. Ketika palette disediakan, perbandingan dibuat terhadap output palette, bukan nilai fbuf mentah.

fbuf dapat berupa instans FrameBuffer atau tuple/list yang cocok dengan tanda tangan konstruktor:

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

Ketika sumbernya adalah tuple/list, buffer dapat bersifat read-only.

palette memungkinkan blitting antara buffer dengan format berbeda -- misalnya, merender glyph monokrom ke dalam buffer RGB565. Ini adalah FrameBuffer yang formatnya cocok dengan tujuan, dengan tinggi 1 dan lebar sama dengan jumlah warna sumber (2**N untuk sumber N-bit-per-piksel). Nilai piksel sumber i digantikan dengan warna pada palette[i, 0] sebelum digambar.

Konstanta#

Nilai format berikut diterima oleh konstruktor. Kolom "byte per piksel" adalah pengali yang dibutuhkan saat menentukan ukuran buffer backing.

Konstanta

Byte/piksel

Tata letak piksel

MONO_VLSB

0.125

Monokrom (1-bit). Setiap byte menampung 8 piksel yang ditumpuk secara vertikal dengan bit 0 paling dekat dengan atas. Baris dari 8 piksel melanjutkan kiri-ke-kanan melintasi buffer, kemudian membungkus ke baris 8 piksel berikutnya.

MONO_HLSB

0.125

Monokrom (1-bit). Setiap byte menampung 8 piksel horizontal dengan bit 7 paling kiri. Baris melanjutkan satu piksel sekaligus secara vertikal.

MONO_HMSB

0.125

Monokrom (1-bit). Seperti MONO_HLSB tetapi dengan bit 0 paling kiri.

GS2_HMSB

0.25

Skala abu-abu 2-bit (4 level), dikemas secara horizontal dengan bit paling signifikan terlebih dahulu.

GS4_HMSB

0.5

Skala abu-abu 4-bit (16 level), dikemas secara horizontal dengan nibble paling signifikan terlebih dahulu.

GS8

1

Skala abu-abu 8-bit (256 level).

RGB565

2

RGB 16-bit dengan 5 bit merah, 6 bit hijau, dan 5 bit biru.

framebuf.MVLSB adalah alias yang sudah usang untuk framebuf.MONO_VLSB; lebih suka gunakan yang terakhir dalam kode baru.

Konstruktor lama#

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

Pintasan yang sudah usang untuk FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Dipertahankan untuk kompatibilitas mundur; gunakan konstruktor FrameBuffer lengkap sebagai gantinya.