framebuf — manipulation de tampon d’image¶
Le module framebuf fournit un petit tampon de pixels sans allocation, accompagné d’opérations de dessin primitives. Il est destiné à piloter des afficheurs externes (OLED, LCD, papier électronique, etc.).
Note
Pour le traitement d’images sur des trames capturées, utilisez plutôt la classe image.Image d’OpenMV, bien plus riche – elle offre nettement plus de primitives de dessin, de conversions de couleur et de fonctions d’analyse que 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.
Exemple:
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)
Constructeurs¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Construit un objet
FrameBuffer.buffer– tout objet prenant en charge le protocole tampon ; il doit être suffisamment grand pour contenirstride * heightpixels au formatformatchoisi.width– largeur du tampon d’image en pixels.height– hauteur du tampon d’image en pixels.format– format de pixel ; l’une des constantes énumérées sous Constantes ci-dessous. Le format détermine à la fois la taille de chaque pixel dansbufferet la façon dont un entier de couleurcpassé à toute méthode de dessin est interprété.stride– nombre de pixels par rangée horizontale, y compris tout remplissage. Vautwidthpar défaut. Définissez-le pour utiliser une sous-région d’un tampon plus grand.
Passer un
buffertrop petit, ou des dimensions invalides, produira des résultats indéfinis – le constructeur ne valide pas toutes les combinaisons.
Méthodes de dessin¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Remplit un rectangle
wxhà(x, y)avec la couleurc. Équivaut àrect()avecf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Sans argument
c, renvoie la valeur de couleur du pixel à(x, y). Aveccfourni, fixe ce pixel à la couleurc.
- 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¶
Dessine une ligne d’un pixel d’épaisseur dans la couleur
c.hline()etvline()dessinent une ligne horizontale/verticale de la longueur donnée ;line()dessine une ligne entre deux points arbitraires.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Dessine un rectangle à
(x, y)de taillewxhdans la couleurc. SifvautTrue, le rectangle est rempli ; sinon, seul un contour d’un pixel est dessiné.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Dessine une ellipse centrée sur
(x, y)avec un rayon en x dexret un rayon en y deyrdans la couleurc. Des rayons égaux produisent un cercle.f=Trueremplit la forme au lieu de seulement en tracer le contour.mest un masque de bits qui restreint le dessin à des quadrants spécifiques (numérotés dans le sens antihoraire à partir du coin supérieur droit) :Bit
Quadrant
Région
bit 0
Q1
Haut-droit
bit 1
Q2
Haut-gauche
bit 2
Q3
Bas-gauche
bit 3
Q4
Bas-droit
La valeur par défaut
m=0dessine les quatre quadrants.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Dessine un polygone fermé arbitraire (convexe ou concave) à l’offset
(x, y)dans la couleurc.coordsdoit être unarrayd’entiers signés sur 16 bits disposés commearray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Trueremplit le polygone au lieu de seulement en tracer le contour.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Dessine la chaîne
savec son coin supérieur gauche à(x, y)dans la couleurc. La police intégrée est fixée à 8x8 pixels et ne peut pas être changée.cvaut1par défaut.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Décale le contenu du tampon de
(xstep, ystep). Les pixels introduits depuis l’extérieur du tampon ne sont pas effacés, de sorte qu’un « fantôme » du contenu précédent peut subsister sur le bord de fuite.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Dessine un autre tampon d’image
fbufpar-dessus celui-ci, avec son coin supérieur gauche à(x, y).Si
keyest fourni, tout pixel source correspondant à cette valeur de couleur est traité comme transparent et n’est pas dessiné. Lorsqu’unepaletteest fournie, la comparaison se fait par rapport à la sortie de la palette, et non par rapport à la valeur brute defbuf.fbufpeut être une instance deFrameBufferou un tuple/une liste correspondant à la signature du constructeur:(buffer, width, height, format) (buffer, width, height, format, stride)
Lorsque la source est un tuple/une liste,
bufferpeut être en lecture seule.palettepermet le blit entre des tampons de formats différents – par exemple, le rendu d’un glyphe monochrome dans un tampon RGB565. Il s’agit d’unFrameBufferdont le format correspond à la destination, avec une hauteur de 1 et une largeur égale au nombre de couleurs sources (2**Npour une source de N bits par pixel). La valeur de pixel sourceiest remplacée par la couleur située àpalette[i, 0]avant le dessin.
Constantes¶
Les valeurs format suivantes sont acceptées par le constructeur. La colonne « octets par pixel » est le multiplicateur nécessaire pour dimensionner le tampon de stockage.
Constante |
Octets/pixel |
Disposition des pixels |
|---|---|---|
|
0.125 |
Monochrome (1 bit). Chaque octet contient 8 pixels empilés verticalement, le bit 0 étant le plus proche du haut. Les rangées de 8 pixels progressent de gauche à droite à travers le tampon, puis passent à la rangée de 8 pixels suivante. |
|
0.125 |
Monochrome (1 bit). Chaque octet contient 8 pixels horizontaux, le bit 7 étant le plus à gauche. Les rangées progressent d’un pixel à la fois verticalement. |
|
0.125 |
Monochrome (1 bit). Comme |
|
0.25 |
Niveaux de gris sur 2 bits (4 niveaux), empaquetés horizontalement, bit le plus significatif en premier. |
|
0.5 |
Niveaux de gris sur 4 bits (16 niveaux), empaquetés horizontalement, quartet le plus significatif en premier. |
|
1 |
Niveaux de gris sur 8 bits (256 niveaux). |
|
2 |
RVB sur 16 bits avec 5 bits de rouge, 6 bits de vert et 5 bits de bleu. |
framebuf.MVLSB est un alias obsolète de framebuf.MONO_VLSB ; privilégiez ce dernier dans le nouveau code.
Constructeur historique¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Raccourci obsolète pour
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Conservé à des fins de rétrocompatibilité ; utilisez plutôt le constructeurFrameBuffercomplet.