framebuf — manipulacija međuspremnikom slike¶
Modul framebuf pruža mali međuspremnik piksela bez alokacije s primitivnim operacijama crtanja. Namijenjen je upravljanju vanjskim zaslonima (OLED, LCD, e-papir itd.).
Napomena
Za obradu slika na snimljenim sličicama umjesto toga koristite OpenMV-ovu mnogo bogatiju klasu image.Image – ona nudi daleko više primitiva za crtanje, pretvorbi boja i značajki analize od 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.
Primjer:
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)
Konstruktori¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Konstruira
FrameBufferobjekt.buffer– bilo koji objekt koji podržava protokol međuspremnika; mora biti dovoljno velik da pohranistride * heightpiksela u odabranomformat.width– širina međuspremnika slike u pikselima.height– visina međuspremnika slike u pikselima.format– format piksela; jedan od konstanti navedenih pod Konstante u nastavku. Format određuje i veličinu svakog piksela ubufferi način na koji se tumači cijeli broj bojecproslijeđen bilo kojoj metodi crtanja.stride– broj piksela po vodoravnom retku, uključujući svako popunjavanje. Zadano jewidth. Postavite ovo za korištenje podregije većeg međuspremnika.
Prosljeđivanje premalog
bufferili nevažećih dimenzija proizvest će nedefinirane rezultate – konstruktor ne provjerava svaku kombinaciju.
Metode crtanja¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Ispunjava pravokutnik
wxhna(x, y)bojomc. Ekvivalentnorect()sf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Bez argumenta
cvraća vrijednost boje piksela na(x, y). Ako jeczadan, postavlja taj piksel na bojuc.
- 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¶
Crta liniju debljine 1 piksel u boji
c.hline()ivline()crtaju vodoravnu/okomitu liniju zadane duljine;line()crta liniju između dviju proizvoljnih točaka.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Crta pravokutnik na
(x, y)veličinewxhu bojic. Ako jefjednakoTrue, pravokutnik je ispunjen; inače se crta samo obris debljine 1 piksel.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Crta elipsu centriranu na
(x, y)s polumjerom po x-osixri polumjerom po y-osiyru bojic. Jednaki polumjeri proizvode krug.f=Trueispunjava oblik umjesto samo crtanja obrisa.mje bitna maska koja ograničava crtanje na određene kvadrante (numerirane suprotno od kazaljke na satu počevši od gornjeg desnog):Bit
Kvadrant
Područje
bit 0
Q1
Gore desno
bit 1
Q2
Gore lijevo
bit 2
Q3
Dolje lijevo
bit 3
Q4
Dolje desno
Zadano
m=0crta sva četiri kvadranta.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Crta proizvoljan zatvoreni poligon (konveksan ili konkavan) na pomaku
(x, y)u bojic.coordsmora bitiarraypredznačenih 16-bitnih cijelih brojeva raspoređen kaoarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Trueispunjava poligon umjesto samo crtanja obrisa.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Crta niz
ss gornjim lijevim kutom na(x, y)u bojic. Ugrađeni font fiksiran je na 8x8 piksela i ne može se mijenjati.cje zadano1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Pomiče sadržaj međuspremnika za
(xstep, ystep). Pikseli koji se uvuku izvana izvan međuspremnika ne brišu se, pa „duh” prethodnog sadržaja može ostati na izlaznom rubu.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Crta drugi međuspremnik slike
fbufpovrh ovog s njegovim gornjim lijevim kutom na(x, y).Ako je
keyzadan, svaki izvorni piksel koji odgovara toj vrijednosti boje tretira se kao proziran i ne crta se. Kada jepalettezadana, usporedba se vrši u odnosu na izlaz palete, a ne na sirovu vrijednostfbuf.fbufmože biti instancaFrameBufferili tuple/lista koja odgovara potpisu konstruktora:(buffer, width, height, format) (buffer, width, height, format, stride)
Kada je izvor tuple/lista,
buffermože biti samo za čitanje.paletteomogućuje blitanje između međuspremnika različitih formata – na primjer, iscrtavanje monokromatskog glifa u RGB565 međuspremnik. To jeFrameBufferčiji format odgovara odredištu, s visinom 1 i širinom jednakom broju izvornih boja (2**Nza izvor s N bitova po pikselu). Vrijednost izvornog pikselaizamjenjuje se bojom napalette[i, 0]prije crtanja.
Konstante¶
Konstruktor prihvaća sljedeće vrijednosti format. Stupac „bajtova po pikselu” je množitelj potreban pri dimenzioniranju pozadinskog međuspremnika.
Konstanta |
Bajtova/piksel |
Raspored piksela |
|---|---|---|
|
0.125 |
Monokromatski (1-bitni). Svaki bajt sadrži 8 okomito naslaganih piksela s bitom 0 najbliže vrhu. Retci od 8 piksela napreduju slijeva nadesno kroz međuspremnik, zatim se prelamaju u sljedeći redak od 8 piksela. |
|
0.125 |
Monokromatski (1-bitni). Svaki bajt sadrži 8 vodoravnih piksela s bitom 7 krajnje lijevo. Retci napreduju jedan piksel po jedan okomito. |
|
0.125 |
Monokromatski (1-bitni). Poput |
|
0.25 |
2-bitni sivi tonovi (4 razine), pakirani vodoravno s najznačajnijim bitom prvim. |
|
0.5 |
4-bitni sivi tonovi (16 razina), pakirani vodoravno s najznačajnijim nibbleom prvim. |
|
1 |
8-bitni sivi tonovi (256 razina). |
|
2 |
16-bitni RGB s 5 crvenih, 6 zelenih i 5 plavih bitova. |
framebuf.MVLSB je zastarjeli alias za framebuf.MONO_VLSB; u novom kodu preferirajte potonji.
Naslijeđeni konstruktor¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Zastarjela prečica za
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Zadržano radi povratne kompatibilnosti; umjesto toga koristite potpuniFrameBufferkonstruktor.