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 omstride * heightpixels in het gekozenformatte 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 inbufferals hoe een kleurgetalcdat aan een tekenmethode wordt doorgegeven, wordt geïnterpreteerd.stride– aantal pixels per horizontale rij, inclusief eventuele opvulling. Standaardwidth. Stel dit in om een subregio van een grotere buffer te gebruiken.
Het doorgeven van een
bufferdie te klein is, of van ongeldige afmetingen, levert ongedefinieerde resultaten op – de constructor valideert niet elke combinatie.
Tekenmethoden¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Vul een rechthoek van
wxhop(x, y)met kleurc. Gelijkwaardig aanrect()metf=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. Metcopgegeven wordt die pixel op kleurcingesteld.
- 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()envline()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 afmetingwxhin kleurc. AlsfTrueis, 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-straalxren y-straalyrin kleurc. Gelijke stralen leveren een cirkel op.f=Truevult de vorm in plaats van alleen de omtrek te tekenen.mis 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=0tekent 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 kleurc.coordsmoet eenarrayvan 16-bits gehele getallen met teken zijn, opgemaakt alsarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truevult 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
smet de linkerbovenhoek op(x, y)in kleurc. Het ingebouwde lettertype is vast ingesteld op 8x8 pixels en kan niet worden gewijzigd.cis standaard1.
- 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
fbufboven op deze, met de linkerbovenhoek op(x, y).Als
keyis opgegeven, wordt elke bronpixel die overeenkomt met die kleurwaarde als transparant behandeld en niet getekend. Wanneer eenpalettewordt aangeleverd, wordt de vergelijking gemaakt tegen de palette-uitvoer, niet tegen de ruwefbuf-waarde.fbufkan eenFrameBuffer-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
bufferalleen-lezen zijn.palettemaakt blitting tussen buffers van verschillende formaten mogelijk – bijvoorbeeld het renderen van een monochrome glyph naar een RGB565-buffer. Het is eenFrameBufferwaarvan het formaat overeenkomt met de bestemming, met hoogte 1 en breedte gelijk aan het aantal bronkleuren (2**Nvoor een bron met N bits per pixel). Bronpixelwaardeiwordt vóór het tekenen vervangen door de kleur oppalette[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 |
|---|---|---|
|
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. |
|
0.125 |
Monochroom (1-bit). Elke byte bevat 8 horizontale pixels met bit 7 helemaal links. Rijen lopen verticaal één pixel tegelijk verder. |
|
0.125 |
Monochroom (1-bit). Zoals |
|
0.25 |
2-bits grijswaarden (4 niveaus), horizontaal gepakt met meest significante bit eerst. |
|
0.5 |
4-bits grijswaarden (16 niveaus), horizontaal gepakt met meest significante nibble eerst. |
|
1 |
8-bits grijswaarden (256 niveaus). |
|
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 volledigeFrameBuffer-constructor.