framebuf — manipolazione del frame buffer¶
Il modulo framebuf fornisce un piccolo buffer di pixel privo di allocazioni con operazioni di disegno primitive. È pensato per pilotare display esterni (OLED, LCD, e-paper, ecc.).
Nota
Per il lavoro di elaborazione delle immagini su frame catturati, usa invece la ben più ricca classe image.Image di OpenMV: offre molte più primitive di disegno, conversioni di colore e funzionalità di analisi rispetto a 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.
Esempio:
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)
Costruttori¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Costruisce un oggetto
FrameBuffer.buffer– qualsiasi oggetto che supporti il protocollo buffer; deve essere abbastanza grande da contenerestride * heightpixel nelformatscelto.width– larghezza del frame buffer in pixel.height– altezza del frame buffer in pixel.format– formato dei pixel; uno dei costanti elencati sotto Costanti qui sotto. Il formato determina sia la dimensione di ciascun pixel inbuffersia come viene interpretato un intero di colorecpassato a un qualsiasi metodo di disegno.stride– numero di pixel per riga orizzontale, incluso eventuale padding. Il valore predefinito èwidth. Imposta questo parametro per usare una sotto-regione di un buffer più grande.
Passare un
buffertroppo piccolo, o dimensioni non valide, produrrà risultati indefiniti: il costruttore non valida ogni combinazione.
Metodi di disegno¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Riempie un rettangolo
wxhin(x, y)con il colorec. Equivalente arect()conf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Senza l’argomento
c, restituisce il valore di colore del pixel in(x, y). Secè fornito, imposta quel pixel al colorec.
- 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¶
Disegna una linea spessa 1 pixel nel colore
c.hline()evline()disegnano una linea orizzontale/verticale della lunghezza data;line()disegna una linea tra due punti arbitrari.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Disegna un rettangolo in
(x, y)di dimensionewxhnel colorec. SefèTrueil rettangolo viene riempito; altrimenti viene disegnato solo un contorno di 1 pixel.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Disegna un’ellisse centrata in
(x, y)con raggio xxre raggio yyrnel colorec. Raggi uguali producono un cerchio.f=Trueriempie la forma invece di disegnarne solo il contorno.mè una bitmask che limita il disegno a quadranti specifici (numerati in senso antiorario a partire dall’alto a destra):Bit
Quadrante
Regione
bit 0
Q1
Alto a destra
bit 1
Q2
Alto a sinistra
bit 2
Q3
Basso a sinistra
bit 3
Q4
Basso a destra
Il valore predefinito
m=0disegna tutti e quattro i quadranti.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Disegna un poligono chiuso arbitrario (convesso o concavo) all’offset
(x, y)nel colorec.coordsdeve essere unarraydi interi a 16 bit con segno disposti comearray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Trueriempie il poligono invece di disegnarne solo il contorno.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Disegna la stringa
scon l’angolo in alto a sinistra in(x, y)nel colorec. Il font integrato è fisso a 8x8 pixel e non può essere cambiato.cha valore predefinito1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Sposta il contenuto del buffer di
(xstep, ystep). I pixel che entrano dall’esterno del buffer non vengono cancellati, quindi un «fantasma» del contenuto precedente può rimanere sul bordo finale.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Disegna un altro frame buffer
fbufsopra a questo con l’angolo in alto a sinistra in(x, y).Se
keyè fornito, qualsiasi pixel sorgente che corrisponde a quel valore di colore viene trattato come trasparente e non viene disegnato. Quando è fornita unapalette, il confronto viene effettuato rispetto all’output della palette, non al valore grezzo difbuf.fbufpuò essere un’istanza diFrameBufferoppure una tupla/lista che corrisponde alla firma del costruttore:(buffer, width, height, format) (buffer, width, height, format, stride)
Quando la sorgente è una tupla/lista,
bufferpuò essere di sola lettura.paletteconsente il blitting tra buffer di formati diversi – ad esempio, il rendering di un glifo monocromatico in un buffer RGB565. È unFrameBufferil cui formato corrisponde alla destinazione, con altezza 1 e larghezza pari al numero di colori sorgente (2**Nper una sorgente a N bit per pixel). Il valore di pixel sorgenteiviene sostituito con il colore inpalette[i, 0]prima del disegno.
Costanti¶
I seguenti valori di format sono accettati dal costruttore. La colonna «byte per pixel» è il moltiplicatore necessario per dimensionare il buffer di supporto.
Costante |
Byte/pixel |
Disposizione dei pixel |
|---|---|---|
|
0.125 |
Monocromatico (1 bit). Ogni byte contiene 8 pixel impilati verticalmente con il bit 0 più vicino alla cima. Le righe di 8 pixel avanzano da sinistra a destra attraverso il buffer, poi passano alla successiva riga di 8 pixel. |
|
0.125 |
Monocromatico (1 bit). Ogni byte contiene 8 pixel orizzontali con il bit 7 all’estrema sinistra. Le righe avanzano un pixel alla volta verticalmente. |
|
0.125 |
Monocromatico (1 bit). Come |
|
0.25 |
Scala di grigi a 2 bit (4 livelli), impacchettata orizzontalmente con il bit più significativo per primo. |
|
0.5 |
Scala di grigi a 4 bit (16 livelli), impacchettata orizzontalmente con il nibble più significativo per primo. |
|
1 |
Scala di grigi a 8 bit (256 livelli). |
|
2 |
RGB a 16 bit con 5 bit di rosso, 6 di verde e 5 di blu. |
framebuf.MVLSB è un alias deprecato di framebuf.MONO_VLSB; nel nuovo codice preferisci quest’ultimo.
Costruttore legacy¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Scorciatoia deprecata per
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Mantenuta per retrocompatibilità; usa invece il costruttore completoFrameBuffer.