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

  • buffer – bármilyen objektum, amely támogatja a pufferprotokollt; elég nagynak kell lennie ahhoz, hogy a választott format mellett stride * height ké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 a buffer-ben, mind azt, hogy egy rajzolási metódusnak átadott c szí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értelmezetten width. Állítsd be, ha egy nagyobb puffer egy részterületét szeretnéd használni.

Túl kicsi buffer vagy é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(c: int) None

Kitölti a teljes képkocka-puffert a c színnel.

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

Kitölt egy w x h méretű téglalapot az (x, y) pontnál a c színnel. Egyenértékű a rect() metódussal f=True esetén.

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

c argumentum nélkül visszaadja az (x, y) pontnál lévő képpont színértékét. A c megadásával az adott képpontot a c szí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 c színnel. A hline() és a vline() egy adott hosszúságú vízszintes/függőleges vonalat rajzol; a line() 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 w x h méretű téglalapot rajzol az (x, y) pontnál a c színnel. Ha az f értéke True, 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, xr x-sugárral és yr y-sugárral a c színnel. Egyenlő sugarak kört eredményeznek. Az f=True kitölti az alakzatot, ahelyett, hogy csak körvonalazná.

Az m egy 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=0 mind 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 a c színnel. A coords egy előjeles 16 bites egész számokból álló array kell legyen, array('h', [x0, y0, x1, y1, ..., xn, yn]) formában elrendezve. Az f=True kitölti a sokszöget, ahelyett, hogy csak körvonalazná.

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

Megrajzolja az s karakterláncot úgy, hogy a bal felső sarka az (x, y) pontnál legyen, a c színnel. A beépített betűkészlet rögzített 8x8 képpont méretű, és nem módosítható. A c alapértelmezett értéke 1.

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 key meg 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 egy palette is meg van adva, az összehasonlítás a paletta kimenetével történik, nem a nyers fbuf értékkel.

Az fbuf lehet egy FrameBuffer pé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 buffer lehet csak olvasható.

A palette lehető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 egy FrameBuffer, amelynek formátuma megegyezik a céléval, magassága 1, szélessége pedig megegyezik a forrásszínek számával (2**N egy N-bit-per-képpont forrás esetén). Az i forrásképpont-érték rajzolás előtt a palette[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

MONO_VLSB

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.

MONO_HLSB

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.

MONO_HMSB

0.125

Monokróm (1 bites). Mint a MONO_HLSB, de a 0. bit van legbalra.

GS2_HMSB

0.25

2 bites szürkeárnyalatos (4 szint), vízszintesen csomagolva, a legjelentősebb bittel előre.

GS4_HMSB

0.5

4 bites szürkeárnyalatos (16 szint), vízszintesen csomagolva, a legjelentősebb félbájttal (nibble) előre.

GS8

1

8 bites szürkeárnyalatos (256 szint).

RGB565

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 teljes FrameBuffer konstruktort használd.