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 FrameBuffer objekt.

  • buffer – bilo koji objekt koji podržava protokol međuspremnika; mora biti dovoljno velik da pohrani stride * height piksela u odabranom format.

  • 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 u buffer i način na koji se tumači cijeli broj boje c proslijeđen bilo kojoj metodi crtanja.

  • stride – broj piksela po vodoravnom retku, uključujući svako popunjavanje. Zadano je width. Postavite ovo za korištenje podregije većeg međuspremnika.

Prosljeđivanje premalog buffer ili nevažećih dimenzija proizvest će nedefinirane rezultate – konstruktor ne provjerava svaku kombinaciju.

Metode crtanja

FrameBuffer.fill(c: int) None

Ispunjava cijeli međuspremnik slike bojom c.

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

Ispunjava pravokutnik w x h na (x, y) bojom c. Ekvivalentno rect() s f=True.

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

Bez argumenta c vraća vrijednost boje piksela na (x, y). Ako je c zadan, postavlja taj piksel na boju 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

Crta liniju debljine 1 piksel u boji c. hline() i vline() 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čine w x h u boji c. Ako je f jednako True, 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-osi xr i polumjerom po y-osi yr u boji c. Jednaki polumjeri proizvode krug. f=True ispunjava oblik umjesto samo crtanja obrisa.

m je 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=0 crta 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 boji c. coords mora biti array predznačenih 16-bitnih cijelih brojeva raspoređen kao array('h', [x0, y0, x1, y1, ..., xn, yn]). f=True ispunjava poligon umjesto samo crtanja obrisa.

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

Crta niz s s gornjim lijevim kutom na (x, y) u boji c. Ugrađeni font fiksiran je na 8x8 piksela i ne može se mijenjati. c je zadano 1.

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 fbuf povrh ovog s njegovim gornjim lijevim kutom na (x, y).

Ako je key zadan, svaki izvorni piksel koji odgovara toj vrijednosti boje tretira se kao proziran i ne crta se. Kada je palette zadana, usporedba se vrši u odnosu na izlaz palete, a ne na sirovu vrijednost fbuf.

fbuf može biti instanca FrameBuffer ili tuple/lista koja odgovara potpisu konstruktora:

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

Kada je izvor tuple/lista, buffer može biti samo za čitanje.

palette omogućuje blitanje između međuspremnika različitih formata – na primjer, iscrtavanje monokromatskog glifa u RGB565 međuspremnik. To je FrameBuffer čiji format odgovara odredištu, s visinom 1 i širinom jednakom broju izvornih boja (2**N za izvor s N bitova po pikselu). Vrijednost izvornog piksela i zamjenjuje se bojom na palette[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

MONO_VLSB

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.

MONO_HLSB

0.125

Monokromatski (1-bitni). Svaki bajt sadrži 8 vodoravnih piksela s bitom 7 krajnje lijevo. Retci napreduju jedan piksel po jedan okomito.

MONO_HMSB

0.125

Monokromatski (1-bitni). Poput MONO_HLSB ali s bitom 0 krajnje lijevo.

GS2_HMSB

0.25

2-bitni sivi tonovi (4 razine), pakirani vodoravno s najznačajnijim bitom prvim.

GS4_HMSB

0.5

4-bitni sivi tonovi (16 razina), pakirani vodoravno s najznačajnijim nibbleom prvim.

GS8

1

8-bitni sivi tonovi (256 razina).

RGB565

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 potpuni FrameBuffer konstruktor.