framebuf — manipulace se snímkovým bufferem (frame buffer)¶
Modul framebuf poskytuje malý pixelový buffer bez alokace s primitivními kreslicími operacemi. Je určen pro řízení externích displejů (OLED, LCD, e-paper atd.).
Poznámka
Pro zpracování obrazu na zachycených snímcích použijte raději mnohem bohatší třídu image.Image od OpenMV – nabízí mnohem více kreslicích primitiv, převodů barev a analytických funkcí než 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.
Příklad:
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)
Konstruktory¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Vytvoří objekt
FrameBuffer.buffer– jakýkoli objekt podporující protokol buffer; musí být dostatečně velký, aby pojalstride * heightpixelů ve zvoleném formátuformat.width– šířka snímkového bufferu v pixelech.height– výška snímkového bufferu v pixelech.format– pixelový formát; jedna z konstant uvedených v sekci Konstanty níže. Formát určuje jak velikost každého pixelu vbuffer, tak způsob interpretace celočíselné hodnoty barvycpředané kterékoli kreslicí metodě.stride– počet pixelů na vodorovný řádek, včetně případné výplně. Výchozí hodnotou jewidth. Nastavte tuto hodnotu pro použití podoblasti většího bufferu.
Předání
buffer, který je příliš malý, nebo neplatných rozměrů povede k nedefinovaným výsledkům – konstruktor neověřuje každou kombinaci.
Kreslicí metody¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Vyplní obdélník
wxhna pozici(x, y)barvouc. Ekvivalent metodyrect()sf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Bez argumentu
cvrátí hodnotu barvy pixelu na pozici(x, y). Pokud jeczadáno, nastaví tento pixel na barvuc.
- 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¶
Nakreslí čáru o tloušťce 1 pixelu v barvě
c. Metodyhline()avline()kreslí vodorovnou/svislou čáru dané délky; metodaline()kreslí čáru mezi dvěma libovolnými body.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Nakreslí obdélník na pozici
(x, y)o velikostiwxhv barvěc. Pokud jefTrue, je obdélník vyplněn; jinak je nakreslen pouze obrys o tloušťce 1 pixelu.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Nakreslí elipsu se středem v
(x, y)s poloměremxrve směru osy x a poloměremyrve směru osy y v barvěc. Stejné poloměry vytvoří kruh.f=Truetvar vyplní místo pouhého nakreslení obrysu.mje bitová maska, která omezuje kreslení na konkrétní kvadranty (číslované proti směru hodinových ručiček od pravého horního):Bit
Kvadrant
Oblast
bit 0
Q1
Vpravo nahoře
bit 1
Q2
Vlevo nahoře
bit 2
Q3
Vlevo dole
bit 3
Q4
Vpravo dole
Výchozí hodnota
m=0nakreslí všechny čtyři kvadranty.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Nakreslí libovolný uzavřený polygon (konvexní nebo konkávní) na offsetu
(x, y)v barvěc.coordsmusí býtarrayznaménkových 16bitových celých čísel uspořádané jakoarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truepolygon vyplní místo pouhého nakreslení obrysu.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Nakreslí řetězec
ss jeho levým horním rohem na pozici(x, y)v barvěc. Vestavěný font má pevnou velikost 8x8 pixelů a nelze jej změnit. Výchozí hodnotacje1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Posune obsah bufferu o
(xstep, ystep). Pixely vstupující zvenčí bufferu se nevymažou, takže na koncové hraně může zůstat „duch“ předchozího obsahu.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Nakreslí další snímkový buffer
fbufpřes tento s jeho levým horním rohem na pozici(x, y).Pokud je zadáno
key, je jakýkoli zdrojový pixel odpovídající této hodnotě barvy považován za průhledný a nenakreslí se. Pokud je poskytnutpalette, provádí se porovnání proti výstupu palety, nikoli proti surové hodnotěfbuf.fbufmůže být instanceFrameBuffernebo n-tice/seznam odpovídající signatuře konstruktoru:(buffer, width, height, format) (buffer, width, height, format, stride)
Pokud je zdrojem n-tice/seznam, může být
bufferjen pro čtení.paletteumožňuje blitting mezi buffery různých formátů – například vykreslení monochromatického glyfu do bufferu RGB565. Jedná se oFrameBuffer, jehož formát odpovídá cíli, s výškou 1 a šířkou rovnou počtu zdrojových barev (2**Npro zdroj s N bity na pixel). Hodnota zdrojového pixeluije před nakreslením nahrazena barvou na pozicipalette[i, 0].
Konstanty¶
Konstruktor přijímá následující hodnoty format. Sloupec „bajtů na pixel“ je násobitel potřebný při dimenzování podkladového bufferu.
Konstanta |
Bajtů/pixel |
Rozložení pixelů |
|---|---|---|
|
0.125 |
Monochromatický (1bitový). Každý bajt obsahuje 8 svisle naskládaných pixelů s bitem 0 nejblíže k vrchu. Řádky po 8 pixelech postupují zleva doprava napříč bufferem a poté se zalomí na další 8pixelový řádek. |
|
0.125 |
Monochromatický (1bitový). Každý bajt obsahuje 8 vodorovných pixelů s bitem 7 nejvíce vlevo. Řádky postupují svisle po jednom pixelu. |
|
0.125 |
Monochromatický (1bitový). Jako |
|
0.25 |
2bitové stupně šedi (4 úrovně), zabalené vodorovně s nejvýznamnějším bitem napřed. |
|
0.5 |
4bitové stupně šedi (16 úrovní), zabalené vodorovně s nejvýznamnějším nibblem napřed. |
|
1 |
8bitové stupně šedi (256 úrovní). |
|
2 |
16bitové RGB s 5 bity pro červenou, 6 bity pro zelenou a 5 bity pro modrou. |
framebuf.MVLSB je zastaralý alias pro framebuf.MONO_VLSB; v novém kódu preferujte ten druhý.
Zastaralý konstruktor¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Zastaralá zkratka pro
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Zachována kvůli zpětné kompatibilitě; použijte raději úplný konstruktorFrameBuffer.