framebuf — manipulatie van framebuffer

De framebuf-module biedt een kleine, allocatievrije pixelbuffer met primitieve tekenbewerkingen. Ze is bedoeld voor het aansturen van externe displays (OLED’s, LCD’s, e-paper, enz.).

Notitie

Voor beeldverwerkingswerk op vastgelegde frames kunt u beter de veel rijkere image.Image-klasse van OpenMV gebruiken – die biedt veel meer tekenprimitieven, kleurconversies en analysefuncties dan 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.

Voorbeeld:

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)

Constructors

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

Construeer een FrameBuffer-object.

  • buffer – elk object dat het buffer-protocol ondersteunt; moet groot genoeg zijn om stride * height pixels in het gekozen format te bevatten.

  • width – breedte van de framebuffer in pixels.

  • height – hoogte van de framebuffer in pixels.

  • format – pixelformaat; een van de constanten die hieronder onder Constanten worden opgesomd. Het formaat bepaalt zowel de grootte van elke pixel in buffer als hoe een kleurgetal c dat aan een tekenmethode wordt doorgegeven, wordt geïnterpreteerd.

  • stride – aantal pixels per horizontale rij, inclusief eventuele opvulling. Standaard width. Stel dit in om een subregio van een grotere buffer te gebruiken.

Het doorgeven van een buffer die te klein is, of van ongeldige afmetingen, levert ongedefinieerde resultaten op – de constructor valideert niet elke combinatie.

Tekenmethoden

FrameBuffer.fill(c: int) None

Vul de hele framebuffer met kleur c.

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

Vul een rechthoek van w x h op (x, y) met kleur c. Gelijkwaardig aan rect() met f=True.

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

Zonder c-argument wordt de kleurwaarde van de pixel op (x, y) teruggegeven. Met c opgegeven wordt die pixel op kleur c ingesteld.

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

Teken een 1 pixel dikke lijn in kleur c. hline() en vline() tekenen een horizontale/verticale lijn van de opgegeven lengte; line() tekent een lijn tussen twee willekeurige punten.

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

Teken een rechthoek op (x, y) met afmeting w x h in kleur c. Als f True is, wordt de rechthoek gevuld; anders wordt alleen een omtrek van 1 pixel getekend.

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

Teken een ellips gecentreerd op (x, y) met x-straal xr en y-straal yr in kleur c. Gelijke stralen leveren een cirkel op. f=True vult de vorm in plaats van alleen de omtrek te tekenen.

m is een bitmasker dat het tekenen beperkt tot specifieke kwadranten (tegen de klok in genummerd vanaf rechtsboven):

Bit

Kwadrant

Regio

bit 0

Q1

Rechtsboven

bit 1

Q2

Linksboven

bit 2

Q3

Linksonder

bit 3

Q4

Rechtsonder

De standaard m=0 tekent alle vier de kwadranten.

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

Teken een willekeurige gesloten polygoon (convex of concaaf) op offset (x, y) in kleur c. coords moet een array van 16-bits gehele getallen met teken zijn, opgemaakt als array('h', [x0, y0, x1, y1, ..., xn, yn]). f=True vult de polygoon in plaats van alleen de omtrek te tekenen.

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

Teken de string s met de linkerbovenhoek op (x, y) in kleur c. Het ingebouwde lettertype is vast ingesteld op 8x8 pixels en kan niet worden gewijzigd. c is standaard 1.

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

Verschuif de bufferinhoud met (xstep, ystep). Pixels die van buiten de buffer naar binnen worden geschoven, worden niet gewist, dus aan de achterrand kan een “spook” van de vorige inhoud achterblijven.

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

Teken een andere framebuffer fbuf boven op deze, met de linkerbovenhoek op (x, y).

Als key is opgegeven, wordt elke bronpixel die overeenkomt met die kleurwaarde als transparant behandeld en niet getekend. Wanneer een palette wordt aangeleverd, wordt de vergelijking gemaakt tegen de palette-uitvoer, niet tegen de ruwe fbuf-waarde.

fbuf kan een FrameBuffer-instantie zijn of een tuple/lijst die overeenkomt met de constructor-signatuur:

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

Wanneer de bron een tuple/lijst is, mag buffer alleen-lezen zijn.

palette maakt blitting tussen buffers van verschillende formaten mogelijk – bijvoorbeeld het renderen van een monochrome glyph naar een RGB565-buffer. Het is een FrameBuffer waarvan het formaat overeenkomt met de bestemming, met hoogte 1 en breedte gelijk aan het aantal bronkleuren (2**N voor een bron met N bits per pixel). Bronpixelwaarde i wordt vóór het tekenen vervangen door de kleur op palette[i, 0].

Constanten

De volgende format-waarden worden door de constructor geaccepteerd. De kolom “bytes per pixel” is de vermenigvuldigingsfactor die nodig is bij het bepalen van de grootte van de onderliggende buffer.

Constante

Bytes/pixel

Pixelindeling

MONO_VLSB

0.125

Monochroom (1-bit). Elke byte bevat 8 verticaal gestapelde pixels met bit 0 het dichtst bij de bovenkant. Rijen van 8 pixels lopen van links naar rechts door de buffer en gaan dan over naar de volgende rij van 8 pixels.

MONO_HLSB

0.125

Monochroom (1-bit). Elke byte bevat 8 horizontale pixels met bit 7 helemaal links. Rijen lopen verticaal één pixel tegelijk verder.

MONO_HMSB

0.125

Monochroom (1-bit). Zoals MONO_HLSB maar met bit 0 helemaal links.

GS2_HMSB

0.25

2-bits grijswaarden (4 niveaus), horizontaal gepakt met meest significante bit eerst.

GS4_HMSB

0.5

4-bits grijswaarden (16 niveaus), horizontaal gepakt met meest significante nibble eerst.

GS8

1

8-bits grijswaarden (256 niveaus).

RGB565

2

16-bits RGB met 5 rode, 6 groene en 5 blauwe bits.

framebuf.MVLSB is een verouderde alias voor framebuf.MONO_VLSB; geef in nieuwe code de voorkeur aan de laatste.

Verouderde constructor

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

Verouderde snelkoppeling voor FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Behouden voor achterwaartse compatibiliteit; gebruik in plaats daarvan de volledige FrameBuffer-constructor.