framebuf — képkocka-puffer kezelés¶
A framebuf modul egy kicsi, allokációmentes képpontpuffert biztosít alapvető rajzolási műveletekkel. Külső kijelzők (OLED-ek, LCD-k, e-papír stb.) meghajtására szolgál.
Megjegyzés
A rögzített képkockákon végzett képfeldolgozási munkához használd inkább az OpenMV sokkal gazdagabb image.Image osztályát – ez sokkal több rajzolási primitívet, színkonverziót és elemzési funkciót kínál, mint 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.
Példa:
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)
Konstruktorok¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Létrehoz egy
FrameBufferobjektumot.buffer– bármilyen objektum, amely támogatja a pufferprotokollt; elég nagynak kell lennie ahhoz, hogy a választottformatmellettstride * heightképpontot tudjon tárolni.width– a képkocka-puffer szélessége képpontban.height– a képkocka-puffer magassága képpontban.format– képpontformátum; az alábbi Konstansok alatt felsorolt konstansok egyike. A formátum meghatározza mind az egyes képpontok méretét abuffer-ben, mind azt, hogy egy rajzolási metódusnak átadottcszín-egész szám hogyan értelmezendő.stride– a vízszintes soronkénti képpontok száma, beleértve az esetleges kitöltést. Alapértelmezettenwidth. Állítsd be, ha egy nagyobb puffer egy részterületét szeretnéd használni.
Túl kicsi
buffervagy érvénytelen méretek megadása nem definiált eredményt produkál – a konstruktor nem ellenőriz minden kombinációt.
Rajzolási metódusok¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Kitölt egy
wxhméretű téglalapot az(x, y)pontnál acszínnel. Egyenértékű arect()metódussalf=Trueesetén.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
cargumentum nélkül visszaadja az(x, y)pontnál lévő képpont színértékét. Acmegadásával az adott képpontot acszínre állítja.
- 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¶
Egy 1 képpont vastagságú vonalat rajzol a
cszínnel. Ahline()és avline()egy adott hosszúságú vízszintes/függőleges vonalat rajzol; aline()két tetszőleges pont közötti vonalat rajzol.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Egy
wxhméretű téglalapot rajzol az(x, y)pontnál acszínnel. Ha azfértékeTrue, a téglalap kitöltött lesz; egyébként csak egy 1 képpont vastagságú körvonal kerül megrajzolásra.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Egy ellipszist rajzol az
(x, y)pontra központosítva,xrx-sugárral ésyry-sugárral acszínnel. Egyenlő sugarak kört eredményeznek. Azf=Truekitölti az alakzatot, ahelyett, hogy csak körvonalazná.Az
megy bitmaszk, amely meghatározott síknegyedekre korlátozza a rajzolást (a jobb felsőtől az óramutató járásával ellentétesen számozva):Bit
Síknegyed
Terület
bit 0
Q1
Jobb felső
bit 1
Q2
Bal felső
bit 2
Q3
Bal alsó
bit 3
Q4
Jobb alsó
Az alapértelmezett
m=0mind a négy síknegyedet megrajzolja.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Egy tetszőleges zárt sokszöget (konvex vagy konkáv) rajzol az
(x, y)eltolásnál acszínnel. Acoordsegy előjeles 16 bites egész számokból állóarraykell legyen,array('h', [x0, y0, x1, y1, ..., xn, yn])formában elrendezve. Azf=Truekitölti a sokszöget, ahelyett, hogy csak körvonalazná.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Megrajzolja az
skarakterláncot úgy, hogy a bal felső sarka az(x, y)pontnál legyen, acszínnel. A beépített betűkészlet rögzített 8x8 képpont méretű, és nem módosítható. Acalapértelmezett értéke1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Eltolja a puffer tartalmát
(xstep, ystep)mértékben. A pufferen kívülről bejövő képpontok nem törlődnek, így a korábbi tartalom egy „szellemképe” megmaradhat a hátsó élen.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Egy másik képkocka-puffert (
fbuf) rajzol ennek a tetejére úgy, hogy a bal felső sarka az(x, y)pontnál legyen.Ha a
keymeg van adva, minden olyan forrásképpont, amely megegyezik az adott színértékkel, átlátszónak tekintendő, és nem kerül megrajzolásra. Ha egypaletteis meg van adva, az összehasonlítás a paletta kimenetével történik, nem a nyersfbufértékkel.Az
fbuflehet egyFrameBufferpéldány, vagy egy, a konstruktor szignatúrájával egyező tuple/lista:(buffer, width, height, format) (buffer, width, height, format, stride)
Ha a forrás egy tuple/lista, a
bufferlehet csak olvasható.A
palettelehetővé teszi a blitting műveletet különböző formátumú pufferek között – például egy monokróm glyph megjelenítését egy RGB565 pufferben. Ez egyFrameBuffer, amelynek formátuma megegyezik a céléval, magassága 1, szélessége pedig megegyezik a forrásszínek számával (2**Negy N-bit-per-képpont forrás esetén). Aziforrásképpont-érték rajzolás előtt apalette[i, 0]-nál lévő színre cserélődik.
Konstansok¶
A következő format értékeket fogadja el a konstruktor. A „bájt/képpont” oszlop a háttérpuffer méretezéséhez szükséges szorzó.
Konstans |
Bájt/képpont |
Képpont-elrendezés |
|---|---|---|
|
0.125 |
Monokróm (1 bites). Minden bájt 8 függőlegesen egymásra helyezett képpontot tárol, ahol a 0. bit van legfelül. A 8 képpontból álló sorok balról jobbra haladnak a pufferen, majd a következő 8 képpontos sorra ugranak. |
|
0.125 |
Monokróm (1 bites). Minden bájt 8 vízszintes képpontot tárol, ahol a 7. bit van legbalra. A sorok képpontonként haladnak függőlegesen. |
|
0.125 |
Monokróm (1 bites). Mint a |
|
0.25 |
2 bites szürkeárnyalatos (4 szint), vízszintesen csomagolva, a legjelentősebb bittel előre. |
|
0.5 |
4 bites szürkeárnyalatos (16 szint), vízszintesen csomagolva, a legjelentősebb félbájttal (nibble) előre. |
|
1 |
8 bites szürkeárnyalatos (256 szint). |
|
2 |
16 bites RGB, 5 piros, 6 zöld és 5 kék bittel. |
A framebuf.MVLSB egy elavult alias a framebuf.MONO_VLSB helyett; új kódban inkább az utóbbit használd.
Régi (legacy) konstruktor¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Elavult rövidítés a
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride)helyett. Visszafelé kompatibilitás céljából megtartva; inkább a teljesFrameBufferkonstruktort használd.