framebuf — manipulering av bildbuffert¶
Modulen framebuf tillhandahåller en liten, allokeringsfri pixelbuffert med primitiva ritoperationer. Den är avsedd för att driva externa skärmar (OLED, LCD, e-papper osv.).
Anteckning
För bildbehandlingsarbete på infångade bildrutor, använd istället OpenMV:s mycket rikare klass image.Image – den erbjuder betydligt fler ritprimitiver, färgkonverteringar och analysfunktioner än 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.
Exempel:
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)
Konstruktorer¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Konstruera ett
FrameBuffer-objekt.buffer– valfritt objekt som stöder buffertprotokollet; måste vara tillräckligt stort för att rymmastride * heightpixlar i det valdaformat.width– bildbuffertens bredd i pixlar.height– bildbuffertens höjd i pixlar.format– pixelformat; en av konstanterna som listas under Konstanter nedan. Formatet avgör både storleken på varje pixel ibufferoch hur ett färgheltalcsom skickas till någon ritmetod tolkas.stride– antal pixlar per horisontell rad, inklusive eventuell utfyllnad. Standardvärdet ärwidth. Ange detta för att använda en delregion av en större buffert.
Att skicka en
buffersom är för liten, eller ogiltiga dimensioner, ger odefinierade resultat – konstruktorn validerar inte varje kombination.
Ritmetoder¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Fyll en
wxh-rektangel vid(x, y)med färgenc. Motsvararrect()medf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Utan argumentet
c, returnera färgvärdet för pixeln vid(x, y). Omcanges, sätt den pixeln till färgenc.
- 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¶
Rita en 1 pixel tjock linje i färgen
c.hline()ochvline()ritar en horisontell/vertikal linje av den angivna längden;line()ritar en linje mellan två godtyckliga punkter.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Rita en rektangel vid
(x, y)av storlekenwxhi färgenc. OmfärTruefylls rektangeln; annars ritas endast en 1 pixel tjock kontur.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Rita en ellips centrerad på
(x, y)med x-radienxroch y-radienyri färgenc. Lika radier ger en cirkel.f=Truefyller formen istället för att bara rita konturen.mär en bitmask som begränsar ritandet till specifika kvadranter (numrerade moturs från övre högra):Bit
Kvadrant
Region
bit 0
Q1
Övre höger
bit 1
Q2
Övre vänster
bit 2
Q3
Nedre vänster
bit 3
Q4
Nedre höger
Standardvärdet
m=0ritar alla fyra kvadranterna.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Rita en godtycklig sluten polygon (konvex eller konkav) vid offset
(x, y)i färgenc.coordsmåste vara enarrayav 16-bitars heltal med tecken upplagda somarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truefyller polygonen istället för att bara rita konturen.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Rita strängen
smed dess övre vänstra hörn vid(x, y)i färgenc. Det inbyggda typsnittet är fast på 8x8 pixlar och kan inte ändras.char standardvärdet1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Förskjut buffertens innehåll med
(xstep, ystep). Pixlar som skiftas in utifrån bufferten rensas inte, så ett ”spöke” av det tidigare innehållet kan finnas kvar vid den efterföljande kanten.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Rita en annan bildbuffert
fbufovanpå denna med dess övre vänstra hörn vid(x, y).Om
keyanges behandlas varje källpixel som matchar det färgvärdet som transparent och ritas inte. När enpalettetillhandahålls görs jämförelsen mot palettens utdata, inte mot det råafbuf-värdet.fbufkan vara enFrameBuffer-instans eller en tupel/lista som matchar konstruktorns signatur:(buffer, width, height, format) (buffer, width, height, format, stride)
När källan är en tupel/lista får
buffervara skrivskyddad.palettemöjliggör blitting mellan buffertar av olika format – till exempel rendering av en monokrom glyf i en RGB565-buffert. Det är enFrameBuffervars format matchar destinationen, med höjd 1 och bredd lika med antalet källfärger (2**Nför en källa med N bitar per pixel). Källpixelvärdetiersätts med färgen vidpalette[i, 0]före ritandet.
Konstanter¶
Följande format-värden accepteras av konstruktorn. Kolumnen ”byte per pixel” är multiplikatorn som behövs vid dimensionering av den bakomliggande bufferten.
Konstant |
Byte/pixel |
Pixellayout |
|---|---|---|
|
0.125 |
Monokrom (1-bitars). Varje byte håller 8 vertikalt staplade pixlar med bit 0 närmast toppen. Rader om 8 pixlar fortskrider från vänster till höger genom bufferten och slår sedan om till nästa rad om 8 pixlar. |
|
0.125 |
Monokrom (1-bitars). Varje byte håller 8 horisontella pixlar med bit 7 längst till vänster. Rader fortskrider en pixel åt gången vertikalt. |
|
0.125 |
Monokrom (1-bitars). Som |
|
0.25 |
2-bitars gråskala (4 nivåer), packad horisontellt med mest signifikant bit först. |
|
0.5 |
4-bitars gråskala (16 nivåer), packad horisontellt med mest signifikant nibble först. |
|
1 |
8-bitars gråskala (256 nivåer). |
|
2 |
16-bitars RGB med 5 röda, 6 gröna och 5 blå bitar. |
framebuf.MVLSB är ett föråldrat alias för framebuf.MONO_VLSB; föredra det senare i ny kod.
Äldre konstruktor¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Föråldrad genväg för
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Bibehållen för bakåtkompatibilitet; använd istället den fullständigaFrameBuffer-konstruktorn.