framebuf — manipulación del búfer de fotogramas (frame buffer)¶
El módulo framebuf proporciona un pequeño búfer de píxeles sin asignación de memoria con operaciones primitivas de dibujo. Está pensado para controlar pantallas externas (OLED, LCD, papel electrónico, etc.).
Nota
Para el procesamiento de imágenes sobre fotogramas capturados, utilice en su lugar la clase image.Image de OpenMV, mucho más completa, que ofrece muchas más primitivas de dibujo, conversiones de color y funciones de análisis 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.
Ejemplo:
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)
Constructores¶
- class framebuf.FrameBuffer(buffer: Any, width: int, height: int, format: int, stride: int | None = None, /)¶
Construye un objeto
FrameBuffer.buffer– cualquier objeto que admita el protocolo de búfer; debe ser lo bastante grande como para contenerstride * heightpíxeles en elformatelegido.width– ancho del búfer de fotogramas en píxeles.height– alto del búfer de fotogramas en píxeles.format– formato de píxel; uno de los constantes enumeradas en Constantes más abajo. El formato determina tanto el tamaño de cada píxel enbuffercomo la forma en que se interpreta un entero de colorcpasado a cualquier método de dibujo.stride– número de píxeles por fila horizontal, incluido cualquier relleno. Su valor predeterminado eswidth. Establézcalo para usar una subregión de un búfer mayor.
Pasar un
bufferdemasiado pequeño, o dimensiones no válidas, producirá resultados indefinidos: el constructor no valida todas las combinaciones.
Métodos de dibujo¶
- FrameBuffer.fill_rect(x: int, y: int, w: int, h: int, c: int) None¶
Rellena un rectángulo de
wxhen(x, y)con el colorc. Equivale arect()conf=True.
- FrameBuffer.pixel(x: int, y: int, c: int | None = None) int | None¶
Sin el argumento
c, devuelve el valor de color del píxel en(x, y). Si se proporcionac, establece ese píxel al colorc.
- 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¶
Dibuja una línea de 1 píxel de grosor en el color
c.hline()yvline()dibujan una línea horizontal/vertical de la longitud indicada;line()dibuja una línea entre dos puntos arbitrarios.
- FrameBuffer.rect(x: int, y: int, w: int, h: int, c: int, f: bool = False) None¶
Dibuja un rectángulo en
(x, y)de tamañowxhen el colorc. SifesTrueel rectángulo se rellena; de lo contrario solo se dibuja un contorno de 1 píxel.
- FrameBuffer.ellipse(x: int, y: int, xr: int, yr: int, c: int, f: bool = False, m: int = 0) None¶
Dibuja una elipse centrada en
(x, y)con radio en xxry radio en yyren el colorc. Radios iguales producen un círculo.f=Truerellena la forma en lugar de solo dibujar su contorno.mes una máscara de bits que restringe el dibujo a cuadrantes específicos (numerados en sentido antihorario desde la parte superior derecha):Bit
Cuadrante
Región
bit 0
Q1
Superior derecho
bit 1
Q2
Superior izquierdo
bit 2
Q3
Inferior izquierdo
bit 3
Q4
Inferior derecho
El valor predeterminado
m=0dibuja los cuatro cuadrantes.
- FrameBuffer.poly(x: int, y: int, coords: Any, c: int, f: bool = False) None¶
Dibuja un polígono cerrado arbitrario (convexo o cóncavo) en el desplazamiento
(x, y)en el colorc.coordsdebe ser unarrayde enteros con signo de 16 bits dispuestos comoarray('h', [x0, y0, x1, y1, ..., xn, yn]).f=Truerellena el polígono en lugar de solo dibujar su contorno.
- FrameBuffer.text(s: str, x: int, y: int, c: int = 1) None¶
Dibuja la cadena
scon su esquina superior izquierda en(x, y)en el colorc. La fuente integrada es fija de 8x8 píxeles y no se puede cambiar. El valor predeterminado deces1.
- FrameBuffer.scroll(xstep: int, ystep: int) None¶
Desplaza el contenido del búfer en
(xstep, ystep). Los píxeles que entran desde fuera del búfer no se borran, por lo que puede quedar un «fantasma» del contenido anterior en el borde de salida.
- FrameBuffer.blit(fbuf: FrameBuffer | Tuple, x: int, y: int, key: int = -1, palette: FrameBuffer | None = None) None¶
Dibuja otro búfer de fotogramas
fbufencima de este, con su esquina superior izquierda en(x, y).Si se proporciona
key, cualquier píxel de origen que coincida con ese valor de color se trata como transparente y no se dibuja. Cuando se proporciona unapalette, la comparación se realiza con la salida de la paleta, no con el valorfbufsin procesar.fbufpuede ser una instancia deFrameBuffero una tupla/lista que coincida con la firma del constructor:(buffer, width, height, format) (buffer, width, height, format, stride)
Cuando el origen es una tupla/lista,
bufferpuede ser de solo lectura.palettepermite hacer blitting entre búferes de distintos formatos; por ejemplo, renderizar un glifo monocromo en un búfer RGB565. Es unFrameBuffercuyo formato coincide con el de destino, con altura 1 y anchura igual al número de colores de origen (2**Npara un origen de N bits por píxel). El valor de píxel de origenise reemplaza por el color situado enpalette[i, 0]antes de dibujar.
Constantes¶
El constructor acepta los siguientes valores de format. La columna «bytes por píxel» es el multiplicador necesario al dimensionar el búfer de respaldo.
Constante |
Bytes/píxel |
Disposición de píxeles |
|---|---|---|
|
0.125 |
Monocromo (1 bit). Cada byte contiene 8 píxeles apilados verticalmente, con el bit 0 más cercano a la parte superior. Las filas de 8 píxeles avanzan de izquierda a derecha por el búfer y luego pasan a la siguiente fila de 8 píxeles. |
|
0.125 |
Monocromo (1 bit). Cada byte contiene 8 píxeles horizontales, con el bit 7 a la izquierda. Las filas avanzan un píxel cada vez verticalmente. |
|
0.125 |
Monocromo (1 bit). Como |
|
0.25 |
Escala de grises de 2 bits (4 niveles), empaquetada horizontalmente con el bit más significativo primero. |
|
0.5 |
Escala de grises de 4 bits (16 niveles), empaquetada horizontalmente con el nibble más significativo primero. |
|
1 |
Escala de grises de 8 bits (256 niveles). |
|
2 |
RGB de 16 bits con 5 bits de rojo, 6 de verde y 5 de azul. |
framebuf.MVLSB es un alias obsoleto de framebuf.MONO_VLSB; prefiera este último en código nuevo.
Constructor heredado¶
- framebuf.FrameBuffer1(buffer: Any, width: int, height: int, stride: int | None = None, /) FrameBuffer¶
Atajo obsoleto para
FrameBuffer(buffer, width, height, framebuf.MONO_VLSB, stride). Se conserva por compatibilidad con versiones anteriores; utilice en su lugar el constructor completoFrameBuffer.