framebuf — manipularea tamponului de cadre (frame buffer)¶
Modulul framebuf oferă un tampon de pixeli mic, fără alocare, cu operații primitive de desenare. Este destinat acționării afișajelor externe (OLED-uri, LCD-uri, e-paper etc.).
Notă
Pentru prelucrarea imaginilor pe cadrele capturate, folosiți în schimb clasa mult mai bogată image.Image a OpenMV – aceasta oferă mult mai multe primitive de desenare, conversii de culoare și funcții de analiză decât 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.
Exemplu:
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)
Constructori¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Construiește un obiect
FrameBuffer.buffer– orice obiect care acceptă protocolul de tampon; trebuie să fie suficient de mare pentru a conținestride * heightpixeli în formatulformatales.width– lățimea tamponului de cadre în pixeli.height– înălțimea tamponului de cadre în pixeli.format– formatul pixelilor; una dintre constantele enumerate sub Constante mai jos. Formatul determină atât dimensiunea fiecărui pixel dinbuffer, cât și modul în care un întreg de culoarectransmis oricărei metode de desenare este interpretat.stride– numărul de pixeli pe rând orizontal, inclusiv orice umplutură. Implicit estewidth. Setați acest parametru pentru a utiliza o subregiune a unui tampon mai mare.
Transmiterea unui
buffercare este prea mic sau a unor dimensiuni nevalide va produce rezultate nedefinite – constructorul nu validează fiecare combinație.
Metode de desenare¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Umple un dreptunghi
wxhla(x, y)cu culoareac. Echivalent curect()cuf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Fără argumentul
c, returnează valoarea de culoare a pixelului la(x, y). Cucdat, setează acel pixel la culoareac.
- 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¶
Desenează o linie groasă de 1 pixel în culoarea
c.hline()șivline()desenează o linie orizontală/verticală de lungimea dată;line()desenează o linie între două puncte arbitrare.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Desenează un dreptunghi la
(x, y)de dimensiunewxhîn culoareac. DacăfesteTrue, dreptunghiul este umplut; altfel se desenează doar un contur de 1 pixel.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Desenează o elipsă centrată pe
(x, y)cu raza pe xxrși raza pe yyrîn culoareac. Raze egale produc un cerc.f=Trueumple forma în loc de a-i desena doar conturul.meste o mască de biți care restricționează desenarea la cadrane specifice (numerotate în sens antiorar începând din dreapta-sus):Bit
Cadran
Regiune
bit 0
Q1
Dreapta-sus
bit 1
Q2
Stânga-sus
bit 2
Q3
Stânga-jos
bit 3
Q4
Dreapta-jos
Valoarea implicită
m=0desenează toate cele patru cadrane.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Desenează un poligon închis arbitrar (convex sau concav) la offsetul
(x, y)în culoareac.coordstrebuie să fie unarrayde întregi cu semn pe 16 biți, dispuși caarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Trueumple poligonul în loc de a-i desena doar conturul.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Desenează șirul
scu colțul din stânga-sus la(x, y)în culoareac. Fontul încorporat este fix la 8x8 pixeli și nu poate fi schimbat.ceste implicit1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Deplasează conținutul tamponului cu
(xstep, ystep). Pixelii care intră din afara tamponului nu sunt șterși, așa că o „fantomă” a conținutului anterior poate rămâne la marginea de ieșire.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Desenează un alt tampon de cadre
fbufpeste acesta, cu colțul din stânga-sus la(x, y).Dacă
keyeste dat, orice pixel sursă care corespunde acelei valori de culoare este tratat ca transparent și nu este desenat. Când este furnizată opalette, comparația se face cu ieșirea paletei, nu cu valoarea brutăfbuf.fbufpoate fi o instanțăFrameBuffersau un tuplu/listă care corespunde semnăturii constructorului:(buffer, width, height, format) (buffer, width, height, format, stride)
Când sursa este un tuplu/listă,
bufferpoate fi doar pentru citire.palettepermite blitting între tampoane de formate diferite – de exemplu, randarea unui glif monocrom într-un tampon RGB565. Este unFrameBufferal cărui format corespunde destinației, cu înălțimea 1 și lățimea egală cu numărul de culori sursă (2**Npentru o sursă de N biți pe pixel). Valoarea pixelului sursăieste înlocuită cu culoarea de lapalette[i, 0]înainte de desenare.
Constante¶
Următoarele valori format sunt acceptate de constructor. Coloana „octeți pe pixel” este multiplicatorul necesar la dimensionarea tamponului de stocare.
Constantă |
Octeți/pixel |
Dispunerea pixelilor |
|---|---|---|
|
0.125 |
Monocrom (1 bit). Fiecare octet conține 8 pixeli stivuiți vertical, cu bitul 0 cel mai aproape de partea de sus. Rândurile de 8 pixeli avansează de la stânga la dreapta de-a lungul tamponului, apoi se înfășoară la următorul rând de 8 pixeli. |
|
0.125 |
Monocrom (1 bit). Fiecare octet conține 8 pixeli orizontali, cu bitul 7 cel mai la stânga. Rândurile avansează câte un pixel pe verticală. |
|
0.125 |
Monocrom (1 bit). Asemănător cu |
|
0.25 |
Tonuri de gri pe 2 biți (4 niveluri), împachetate orizontal cu bitul cel mai semnificativ primul. |
|
0.5 |
Tonuri de gri pe 4 biți (16 niveluri), împachetate orizontal cu nibble-ul cel mai semnificativ primul. |
|
1 |
Tonuri de gri pe 8 biți (256 de niveluri). |
|
2 |
RGB pe 16 biți cu 5 biți roșu, 6 biți verde și 5 biți albastru. |
framebuf.MVLSB este un alias depreciat pentru framebuf.MONO_VLSB; preferați-l pe acesta din urmă în codul nou.
Constructor moștenit¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Scurtătură depreciată pentru
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Păstrată pentru compatibilitate retroactivă; folosiți în schimb constructorul completFrameBuffer.