framebuf — kehyspuskurin käsittely

framebuf -moduuli tarjoaa pienen, allokointivapaan pikselipuskurin alkeellisilla piirto-operaatioilla. Se on tarkoitettu ulkoisten näyttöjen (OLED, LCD, e-paper jne.) ohjaamiseen.

Muista

Kaapattujen kehysten kuvankäsittelytyöhön kannattaa käyttää OpenMV:n paljon monipuolisempaa image.Image -luokkaa – se tarjoaa huomattavasti enemmän piirto-primitiivejä, värimuunnoksia ja analyysiominaisuuksia kuin 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.

Esimerkki:

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)

Muodostimet

class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)

Muodostaa FrameBuffer -olion.

  • buffer – mikä tahansa buffer-protokollaa tukeva olio; sen on oltava riittävän suuri pitämään stride * height pikseliä valitussa format -muodossa.

  • width – kehyspuskurin leveys pikseleinä.

  • height – kehyspuskurin korkeus pikseleinä.

  • format – pikselimuoto; yksi alla kohdassa Vakiot luetelluista vakioista. Muoto määrittää sekä kunkin pikselin koon buffer -puskurissa että sen, miten mihin tahansa piirtometodiin välitetty väri-kokonaisluku c tulkitaan.

  • stride – pikselien määrä vaakarivillä, mukaan lukien mahdollinen täyte. Oletuksena width. Aseta tämä käyttääksesi suuremman puskurin osa-aluetta.

Liian pienen buffer -puskurin tai virheellisten mittojen välittäminen tuottaa määrittelemättömiä tuloksia – muodostin ei validoi jokaista yhdistelmää.

Piirtometodit

FrameBuffer.fill(c: int) None

Täyttää koko kehyspuskurin värillä c.

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

Täyttää w x h -kokoisen suorakulmion kohdassa (x, y) värillä c. Vastaa rect() -metodia argumentilla f=True.

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

Ilman c -argumenttia palauttaa pikselin väriarvon kohdassa (x, y). Kun c on annettu, asettaa kyseisen pikselin väriin c.

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

Piirtää 1 pikselin paksuisen viivan värillä c. hline() ja vline() piirtävät annetun pituisen vaaka-/pystyviivan; line() piirtää viivan kahden mielivaltaisen pisteen välille.

FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None

Piirtää suorakulmion kohtaan (x, y) kokoa w x h värillä c. Jos f on True, suorakulmio täytetään; muuten piirretään vain 1 pikselin ääriviiva.

FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None

Piirtää ellipsin, jonka keskipiste on (x, y), x-säteellä xr ja y-säteellä yr värillä c. Yhtä suuret säteet tuottavat ympyrän. f=True täyttää muodon pelkän ääriviivan piirtämisen sijaan.

m on bittimaski, joka rajoittaa piirtämisen tiettyihin neljänneksiin (numeroitu vastapäivään oikeasta yläkulmasta):

Bitti

Neljännes

Alue

bitti 0

Q1

Oikea yläkulma

bitti 1

Q2

Vasen yläkulma

bitti 2

Q3

Vasen alakulma

bitti 3

Q4

Oikea alakulma

Oletusarvo m=0 piirtää kaikki neljä neljännestä.

FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None

Piirtää mielivaltaisen suljetun monikulmion (kupera tai kovera) siirtymässä (x, y) värillä c. coords on oltava array etumerkillisiä 16-bittisiä kokonaislukuja muodossa array('h', [x0, y0, x1, y1, ..., xn, yn]). f=True täyttää monikulmion pelkän ääriviivan piirtämisen sijaan.

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

Piirtää merkkijonon s siten, että sen vasen yläkulma on kohdassa (x, y) värillä c. Sisäänrakennettu fontti on kiinteästi 8x8 pikseliä eikä sitä voi muuttaa. c on oletuksena 1.

FrameBuffer.scroll(xstep: int, ystep: int) None

Siirtää puskurin sisältöä määrällä (xstep, ystep). Puskurin ulkopuolelta sisään siirtyviä pikseleitä ei tyhjennetä, joten edellisen sisällön ”haamukuva” voi jäädä jälkireunaan.

FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None

Piirtää toisen kehyspuskurin fbuf tämän päälle siten, että sen vasen yläkulma on kohdassa (x, y).

Jos key on annettu, jokainen kyseistä väriarvoa vastaava lähdepikseli käsitellään läpinäkyvänä eikä sitä piirretä. Kun palette on annettu, vertailu tehdään palettilähtöä eikä raakaa fbuf -arvoa vastaan.

fbuf voi olla FrameBuffer -ilmentymä tai muodostimen allekirjoitusta vastaava monikko/lista:

(buffer, width, height, format)
(buffer, width, height, format, stride)

Kun lähde on monikko/lista, buffer voi olla vain luku -muotoinen.

palette mahdollistaa blittauksen eri muotoisten puskureiden välillä – esimerkiksi yksivärisen glyfin renderöinnin RGB565-puskuriin. Se on FrameBuffer, jonka muoto vastaa kohdetta, korkeus on 1 ja leveys yhtä suuri kuin lähdevärien määrä (2**N N-bittiä-per-pikseli -lähteelle). Lähdepikselin arvo i korvataan värillä kohdassa palette[i, 0] ennen piirtämistä.

Vakiot

Muodostin hyväksyy seuraavat format -arvot. ”Tavua per pikseli” -sarake on kerroin, joka tarvitaan taustapuskurin kokoa määritettäessä.

Vakio

Tavua/pikseli

Pikseliasettelu

MONO_VLSB

0.125

Yksivärinen (1-bittinen). Kukin tavu pitää 8 pystysuunnassa pinottua pikseliä siten, että bitti 0 on lähimpänä yläreunaa. 8 pikselin rivit etenevät vasemmalta oikealle puskurin yli ja kiertyvät sitten seuraavalle 8 pikselin riville.

MONO_HLSB

0.125

Yksivärinen (1-bittinen). Kukin tavu pitää 8 vaakapikseliä siten, että bitti 7 on vasemmalla. Rivit etenevät pystysuunnassa yksi pikseli kerrallaan.

MONO_HMSB

0.125

Yksivärinen (1-bittinen). Kuten MONO_HLSB mutta bitti 0 on vasemmalla.

GS2_HMSB

0.25

2-bittinen harmaasävy (4 tasoa), pakattu vaakasuunnassa merkitsevin bitti ensin.

GS4_HMSB

0.5

4-bittinen harmaasävy (16 tasoa), pakattu vaakasuunnassa merkitsevin nibble ensin.

GS8

1

8-bittinen harmaasävy (256 tasoa).

RGB565

2

16-bittinen RGB, jossa 5 punaista, 6 vihreää ja 5 sinistä bittiä.

framebuf.MVLSB on vanhentunut alias arvolle framebuf.MONO_VLSB; suosi jälkimmäistä uudessa koodissa.

Vanha muodostin

framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer

Vanhentunut pikakomento muodolle FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Säilytetty taaksepäin yhteensopivuuden vuoksi; käytä sen sijaan täyttä FrameBuffer -muodostinta.