Paso 7: Software - pintura en la pantalla
Pantalla consta de unos módulos de LED, pero forma perspectiva API son
conectados juntos en un lienzo continuo. Se puede colocar en este mapa de bits de la lona en cualquier posición dada por (x, y) coordenadas de la imagen de arriba.
El método de pintura tiene la sintaxis: pintura (pixel_t x pixel_t y, pixel_t ancho, altura pixel_t, uint8_t datos).
Le permite pintar un mapa de bits dado coordenadas con la limitada anchura y altura. Así por ejemplo usted puede pintar un mapa de bits en (3,4) que tiene 25 x 3 píxeles. Podría ser más grande que un tamaño de pantalla real - en este caso obtener recortará.
Esto es obvio y simple, pero hay una pega - tiene que proporcionar datos correctos. Se trata de matriz 2D, donde la primera dimensión indica posición horizontal vertical y segundo en la pantalla. Técnicamente los datos es plano matriz de indicadores y cada indicador apunte a la matriz que representa una línea horizontal en la pantalla.
Mover sobre la primera dimensión de datos atraviesa sobre líneas de la pantalla. La segunda dimensión de los datos representa píxeles horizontales en línea, donde cada byte representa 8 píxeles. Puesto que nuestra exhibición consisten en simples LEDs pueden ser o en el estado, así que cada píxel no representado por un byte, pero por poco. Para cubrir 16 píxeles en horizontal, tenemos dos bytes, 24 píxeles requieren 3 bytes y así sucesivamente.
Por ejemplo a completamente cubierta pantalla consisten en kits de LED de 8 x 3 (uno utilizado en nuestros ejemplos) necesitamos datos [3] [8]. Generalmente llevas matriz suficientemente pequeña para caber su mapa de bits y no uno que cubrirá a toda pantalla.
El método de paint(...) actualizaciones de búfer interno, para enviar contenido de esta memoria intermedia a chips MAX que tienes que llamar flush(). La idea es darle la posibilidad de mostrar algunos mapas de bits en la pantalla y después de que el resultado de la pintura. Usted puede programar algunas rutinas independientes, que actualizar diferentes partes de la pantalla y descarga todos los cambios a la vez.
Comunicación con las virutas de MAX no es muy rápido y enviar contenido de la exhibición del conjunto con cada flush() es desperdiciador de tiempo. Puede acelerar este proceso al permitir doble almacenamiento en búfer (set DEOUBLE_BUFFER en Display.h en true). En este caso el método flush() enviará sólo los bytes que han cambiado, así que usted puede llamar a flush() con cada lazo y no tienen que preocuparse de perder rendimiento. El único inconveniente es el mayor uso de RAM: estamos creando matriz 2D que asigna 8 bytes por cada LED Kit además de algunas sugerencias que generalmente están obligados a mantener los arreglos de discos.
Matrices 2D en este proyecto han reducido el consumo de memoria, porque para crear matriz dinámica 2D, estamos creando realmente 2 matrices con offset calculado (ver: alloc2DArray8(...) en Util.h).