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¶
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.
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 pikselstride * heightpadaformatyang 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 dalambufferdan bagaimana bilangan bulat warnacyang diteruskan ke metode gambar apa pun diinterpretasikan.stride-- jumlah piksel per baris horizontal, termasuk padding apa pun. Defaultnya adalahwidth. Setel ini untuk menggunakan sub-wilayah buffer yang lebih besar.
Meneruskan
bufferyang terlalu kecil, atau dimensi yang tidak valid, akan menghasilkan hasil yang tidak terdefinisi -- konstruktor tidak memvalidasi setiap kombinasi.
Metode gambar¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Isi persegi panjang
wxhpada(x, y)dengan warnac. Setara denganrect()denganf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Tanpa argumen
c, kembalikan nilai warna piksel pada(x, y). Dengancdiberikan, setel piksel tersebut ke warnac.
- 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()danvline()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)berukuranwxhdalam warnac. JikafadalahTruepersegi 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 xxrdan jari-jari yyrdalam warnac. Jari-jari yang sama menghasilkan lingkaran.f=Truemengisi bentuk alih-alih hanya menggariskannya.madalah 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=0menggambar 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 warnac.coordsharus berupaarraydari bilangan bulat 16-bit bertanda yang ditata sebagaiarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truemengisi poligon alih-alih hanya menggariskannya.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Gambar string
sdengan pojok kiri atasnya pada(x, y)dalam warnac. Font bawaan ditetapkan pada 8x8 piksel dan tidak dapat diubah.cdefaultnya adalah1.
- 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
fbufdi atas yang ini dengan pojok kiri atasnya pada(x, y).Jika
keydiberikan, piksel sumber mana pun yang cocok dengan nilai warna tersebut diperlakukan sebagai transparan dan tidak digambar. Ketikapalettedisediakan, perbandingan dibuat terhadap output palette, bukan nilaifbufmentah.fbufdapat berupa instansFrameBufferatau tuple/list yang cocok dengan tanda tangan konstruktor:(buffer, width, height, format) (buffer, width, height, format, stride)
Ketika sumbernya adalah tuple/list,
bufferdapat bersifat read-only.palettememungkinkan blitting antara buffer dengan format berbeda -- misalnya, merender glyph monokrom ke dalam buffer RGB565. Ini adalahFrameBufferyang formatnya cocok dengan tujuan, dengan tinggi 1 dan lebar sama dengan jumlah warna sumber (2**Nuntuk sumber N-bit-per-piksel). Nilai piksel sumberidigantikan dengan warna padapalette[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 |
|---|---|---|
|
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. |
|
0.125 |
Monokrom (1-bit). Setiap byte menampung 8 piksel horizontal dengan bit 7 paling kiri. Baris melanjutkan satu piksel sekaligus secara vertikal. |
|
0.125 |
Monokrom (1-bit). Seperti |
|
0.25 |
Skala abu-abu 2-bit (4 level), dikemas secara horizontal dengan bit paling signifikan terlebih dahulu. |
|
0.5 |
Skala abu-abu 4-bit (16 level), dikemas secara horizontal dengan nibble paling signifikan terlebih dahulu. |
|
1 |
Skala abu-abu 8-bit (256 level). |
|
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 konstruktorFrameBufferlengkap sebagai gantinya.