framebuf — Framebuffer-Manipulation¶
Das Modul framebuf stellt einen kleinen, allokationsfreien Pixelpuffer mit elementaren Zeichenoperationen bereit. Es ist für die Ansteuerung externer Displays gedacht (OLEDs, LCDs, E-Paper usw.).
Bemerkung
Für die Bildverarbeitung an aufgenommenen Einzelbildern verwenden Sie stattdessen OpenMVs deutlich umfangreichere Klasse image.Image – sie bietet weitaus mehr Zeichen-Primitive, Farbkonvertierungen und Analysefunktionen als 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.
Beispiel:
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)
Konstruktoren¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Erzeugt ein
FrameBuffer-Objekt.buffer– ein beliebiges Objekt, das das Puffer-Protokoll unterstützt; muss groß genug sein, umstride * heightPixel im gewähltenformataufzunehmen.width– Breite des Framebuffers in Pixel.height– Höhe des Framebuffers in Pixel.format– Pixelformat; eine der unter Konstanten aufgeführten Konstanten. Das Format bestimmt sowohl die Größe jedes Pixels inbufferals auch, wie ein an eine Zeichenmethode übergebener Farb-Integercinterpretiert wird.stride– Anzahl der Pixel pro horizontaler Zeile, einschließlich etwaiger Auffüllung. Standardwert istwidth. Setzen Sie dies, um einen Teilbereich eines größeren Puffers zu verwenden.
Die Übergabe eines zu kleinen
bufferoder ungültiger Abmessungen führt zu undefinierten Ergebnissen – der Konstruktor validiert nicht jede Kombination.
Zeichenmethoden¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Füllt ein
wxhgroßes Rechteck an(x, y)mit der Farbec. Entsprichtrect()mitf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Ohne
c-Argument wird der Farbwert des Pixels an(x, y)zurückgegeben. Mit angegebenemcwird dieses Pixel auf die Farbecgesetzt.
- 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¶
Zeichnet eine 1 Pixel dicke Linie in der Farbe
c.hline()undvline()zeichnen eine horizontale/vertikale Linie der angegebenen Länge;line()zeichnet eine Linie zwischen zwei beliebigen Punkten.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Zeichnet ein Rechteck an
(x, y)der Größewxhin der Farbec. WennfgleichTrueist, wird das Rechteck gefüllt; andernfalls wird nur eine 1 Pixel breite Umrandung gezeichnet.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Zeichnet eine Ellipse mit Mittelpunkt
(x, y), x-Radiusxrund y-Radiusyrin der Farbec. Gleiche Radien ergeben einen Kreis.f=Truefüllt die Form, anstatt sie nur zu umranden.mist eine Bitmaske, die das Zeichnen auf bestimmte Quadranten beschränkt (gegen den Uhrzeigersinn von oben rechts beginnend nummeriert):Bit
Quadrant
Bereich
Bit 0
Q1
Oben rechts
Bit 1
Q2
Oben links
Bit 2
Q3
Unten links
Bit 3
Q4
Unten rechts
Der Standardwert
m=0zeichnet alle vier Quadranten.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Zeichnet ein beliebiges geschlossenes Polygon (konvex oder konkav) am Offset
(x, y)in der Farbec.coordsmuss einarrayaus vorzeichenbehafteten 16-Bit-Integern sein, angeordnet alsarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truefüllt das Polygon, anstatt es nur zu umranden.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Zeichnet die Zeichenkette
smit ihrer oberen linken Ecke an(x, y)in der Farbec. Die eingebaute Schriftart ist fest auf 8x8 Pixel eingestellt und kann nicht geändert werden.cist standardmäßig1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Verschiebt den Pufferinhalt um
(xstep, ystep). Von außerhalb des Puffers hereingeschobene Pixel werden nicht gelöscht, sodass am nachlaufenden Rand ein „Geisterbild“ des vorherigen Inhalts verbleiben kann.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Zeichnet einen weiteren Framebuffer
fbufüber diesen, mit seiner oberen linken Ecke an(x, y).Wenn
keyangegeben ist, wird jedes Quellpixel, das diesem Farbwert entspricht, als transparent behandelt und nicht gezeichnet. Wenn einepalettebereitgestellt wird, erfolgt der Vergleich gegen die Palettenausgabe, nicht gegen den rohenfbuf-Wert.fbufkann eineFrameBuffer-Instanz oder ein Tupel/eine Liste sein, das/die der Konstruktorsignatur entspricht:(buffer, width, height, format) (buffer, width, height, format, stride)
Wenn die Quelle ein Tupel/eine Liste ist, darf
bufferschreibgeschützt sein.paletteermöglicht das Blitten zwischen Puffern unterschiedlicher Formate – zum Beispiel das Rendern eines monochromen Glyphen in einen RGB565-Puffer. Es ist einFrameBuffer, dessen Format dem Ziel entspricht, mit Höhe 1 und einer Breite gleich der Anzahl der Quellfarben (2**Nfür eine Quelle mit N Bit pro Pixel). Der Quellpixelwertiwird vor dem Zeichnen durch die Farbe anpalette[i, 0]ersetzt.
Konstanten¶
Die folgenden format-Werte werden vom Konstruktor akzeptiert. Die Spalte „Bytes pro Pixel“ ist der Multiplikator, der zum Dimensionieren des Hintergrundpuffers benötigt wird.
Konstante |
Bytes/Pixel |
Pixel-Layout |
|---|---|---|
|
0.125 |
Monochrom (1-Bit). Jedes Byte enthält 8 vertikal gestapelte Pixel, wobei Bit 0 am nächsten an der Oberseite liegt. Zeilen von 8 Pixeln verlaufen von links nach rechts durch den Puffer und springen dann zur nächsten 8-Pixel-Zeile. |
|
0.125 |
Monochrom (1-Bit). Jedes Byte enthält 8 horizontale Pixel, wobei Bit 7 ganz links liegt. Zeilen verlaufen Pixel für Pixel vertikal. |
|
0.125 |
Monochrom (1-Bit). Wie |
|
0.25 |
2-Bit-Graustufen (4 Stufen), horizontal gepackt, höchstwertiges Bit zuerst. |
|
0.5 |
4-Bit-Graustufen (16 Stufen), horizontal gepackt, höchstwertiges Nibble zuerst. |
|
1 |
8-Bit-Graustufen (256 Stufen). |
|
2 |
16-Bit-RGB mit 5 Rot-, 6 Grün- und 5 Blau-Bits. |
framebuf.MVLSB ist ein veralteter Alias für framebuf.MONO_VLSB; bevorzugen Sie in neuem Code Letzteres.
Veralteter Konstruktor¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Veraltete Kurzform für
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Aus Gründen der Abwärtskompatibilität beibehalten; verwenden Sie stattdessen den vollständigenFrameBuffer-Konstruktor.