Stap 7: Software - schilderij op het display
Scherm bestaat uit een paar LED-Modules, maar formulier API perspectief zijn
met elkaar verbonden tot één continu doek. U kunt plaatsen op dit doek bitmap op elke positie gegeven door (x, y) coördinaten van de foto hierboven.
De verf-methode heeft de volgende syntaxis: verf (pixel_t x pixel_t y pixel_t breedte, hoogte van de pixel_t, uint8_t gegevens).
Hiermee kunt u een bitmap Tekenoppervlakken gezien coördinaten met beperkte breedte en hoogte. Zo kunt u bijvoorbeeld het schilderen van een bitmap op (3,4) met 25 x 3 pixels. Het is wellicht groter is dan een werkelijke weergavegrootte - in dit geval het zal krijgen bijgesneden.
Dit is duidelijk en eenvoudig, maar er is één vangst - hebt u juiste gegevens te verstrekken. Dit is een 2D-matrix, waar de eerste dimensie geeft aan verticale en tweede horizontale positie op het scherm. Technisch gegevens is plat matrix van aanwijzers en elke aanwijzer verwijst naar matrix die vertegenwoordigt één horizontale lijn op het scherm.
Overgang van de eerste dimensie vangegevens doorloopt over lijnen van het scherm. De tweede dimensie van gegevens vertegenwoordigt horizontale pixels binnen één lijn, waarbij elke byte 8 pixels vertegenwoordigt. Aangezien onze schermen bestaan uit eenvoudige LEDs kunnen zij hetzij in op off staat, dus elke pixel is niet wordt vertegenwoordigd door één byte, maar door een beetje. Ter dekking van 16 pixels in horizontale positie moeten we twee bytes, 24 pixels 3 bytes nodig, enzovoort.
Bijvoorbeeld om volledig coverscherm bestaande uit 8 x 3 LED-kits (één gebruikt in onze voorbeelden) zouden we moeten gegevens [3] [8]. Meestal vindt u de matrix klein genoeg om uw bitmap en niet een die hele display zal bedekken.
De paint(...)-methode werkt interne buffer, om de inhoud van deze buffer verzenden MAX chips hebt Bel flush(). Het idee achter is u mogelijkheid paar bitmaps weergeven op het display en na die verf het resultaat geven. U kunt enkele onafhankelijke routines, die zal bijwerken verschillend deel van het scherm en spoelen van alle wijzigingen in één keer programmeren.
Communicatie met MAX chips is niet erg snel en verzenden van de inhoud van het hele scherm met elke flush() is tijdrovend. U zou kunnen dit proces versnellen doordat dubbele buffering (set DEOUBLE_BUFFER in Display.h op true). In dit geval stuurt de methode flush() alleen de bytes die zijn gewijzigd, zodat u flush() met elke lus bellen kunt en niet hoeft te zorgen over het losmaken van de prestaties. Het enige nadeel is het verhoogde gebruik van RAM: we creëren 2D matrix die worden toegewezen 8 bytes per elke LED Kit plus paar wijzers die meestal nodig zijn voor het handhaven van matrices.
2D-arrays in dit project hebben verminderd geheugen footprint, omdat om de dynamische 2D array maken, we eigenlijk 2 arrays met de verschuiving van de berekende maken zijn (zie: alloc2DArray8(...) in Util.h).