Zum Inhalt

Grafikressourcen mit EZIP komprimieren

Verwenden Sie das Dienstprogramm aus dem SDK-Branch Ihres Ziels: $SDK_ROOT/tools/png2ezip/ezip.exe. Es erzeugt EZIP-/PIXEL-Binärdaten oder C-Arrays für LVGL. Prüfen Sie zuerst den Binärheader und das Pixelformat und wählen Sie dann den passenden Konvertierungsbefehl. Soll das Bild von der EZIP-Hardware dekomprimiert werden, folgen Sie dem GZIP-Ablauf und der Integrationscheckliste gegen Ende.

Geltungsbereich nach Familie

Die Leitfäden für die einzelnen Familien sind voneinander unabhängig. Wenn sich die unterstützten Eingabe- oder Ausgabeformate oder das Verhalten des Tools unterscheiden, richten Sie sich nach dem Leitfaden für die Zielfamilie und verwenden Sie das mit Ihrem SDK-Branch ausgelieferte Dienstprogramm. Leiten Sie die Unterstützung oder das Verhalten einer Familie nicht aus dem Leitfaden einer anderen Familie ab.

Dateiformate

Die ersten vier Bytes einer erzeugten Binärdatei bilden einen Little-Endian-Header. Seine Bitfelder sind wie folgt aufgeteilt:

Tabelle: EZIP/PIXEL-Binär-Header-Felder

Bits Bedeutung
[31:21] Bildhöhe
[20:10] Bildbreite
[9:5] Reserviert
[4:0] Format

Die Formatwerte lauten:

Tabelle: EZIP- und PIXEL-Formatwerte

Wert Bedeutung
1 EZIP ohne Alpha
2 EZIP mit Alpha
4 PIXEL ohne Alpha
5 PIXEL mit Alpha

PIXEL ohne Alpha unterstützt RGB565 und RGB888. PIXEL mit Alpha unterstützt ARGB565 und ARGB888. Das Tool wählt die Alpha-/Nicht-Alpha-Variante anhand des Quell-PNG aus: Ein Bild ohne Alpha erzeugt ein Format ohne Alpha.

Tabelle: PIXEL- und ARGB-Farbformat-Bitfelder

Format Bitfelder
RGB565 [15:11] Rot, [10:5] Grün, [4:0] Blau
RGB888 [23:16] Rot, [15:8] Grün, [7:0] Blau
ARGB565 [23:16] Alpha, [15:11] Rot, [10:5] Grün, [4:0] Blau
ARGB888 [31:24] Alpha, [23:16] Rot, [15:8] Grün, [7:0] Blau

Die Bitfelder aller oben aufgeführten Pixelformate werden in Little-Endian-Reihenfolge gespeichert.

PNG-Assets konvertieren

Ersetzen Sie png_filename.png durch den Namen der Quelldatei. Die erzeugte Datei wird im Tool-Verzeichnis abgelegt, sofern der umgebende Build das Arbeitsverzeichnis nicht ändert.

PIXEL-Binärdatei

ezip -convert png_filename.png -rgb565 -binfile 1
ezip -convert png_filename.png -rgb888 -binfile 1

Die Ausgabe heißt png_filename.bin. Verwenden Sie RGB565 für RGB565-/ARGB565-Ausgaben und RGB888 für RGB888-/ARGB888-Ausgaben. Ob Alpha enthalten ist, richtet sich nach dem Eingabe-PNG.

EZIP-Binärdatei

ezip -convert png_filename.png -rgb565 -binfile 2
ezip -convert png_filename.png -rgb888 -binfile 2

Die Ausgabe ist png_filename.bin, wobei der Formatwert im Header auf EZIP gesetzt ist.

PIXEL-LVGL-C-Array

ezip -convert png_filename.png -rgb565 -cfile 1 -section ROM3_IMG
ezip -convert png_filename.png -rgb888 -cfile 1 -section ROM3_IMG

Die Ausgabe ist png_filename.c, abgelegt in der Sektion .ROM3_IMG.png_filename. Ein typisches erzeugtes Array hat diese Form:

#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif

#ifndef LV_ATTRIBUTE_IMG_eZIP_RGBARGB565A
#define LV_ATTRIBUTE_IMG_eZIP_RGBARGB565A
#endif
#define LV_COLOR_DEPTH_RGB565A 3
#define LV_COLOR_16_SWAP_RGB565A 0
SECTION(".ROM3_IMG.png_filename")

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_eZIP_RGBARGB565A uint8_t png_filename_map[] = {
    ...
};

EZIP-LVGL-C-Array

ezip -convert png_filename.png -rgb565 -cfile 2 -section ROM3_IMG
ezip -convert png_filename.png -rgb888 -cfile 2 -section ROM3_IMG

Die Ausgabe ist ebenfalls png_filename.c in der Sektion .ROM3_IMG.png_filename. Das erzeugte EZIP-Array ist für die Hardware-Dekompression ausgerichtet:

#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif

SECTION(".ROM3_IMG.png_filename")

ALIGN(4)
const LV_ATTRIBUTE_MEM_ALIGN uint8_t png_filename_map[] = {
    ...
};

Eine GZIP-Datei für die EZIP-Hardwaredekomprimierung erzeugen

Verwenden Sie zum Komprimieren von file.bin im Tool-Verzeichnis:

-gzip file.bin -length -noheader

Das Tool erzeugt file.bin.gz. Dessen erste vier Bytes enthalten die Länge der Originaldaten. Wenn das Hardware-EZIP-Beispiel diesen Stream dekomprimiert, übergeben Sie diese vier Bytes nicht als komprimierte Eingabe. Reservieren Sie anhand der gespeicherten Länge Speicher für den Ausgabepuffer und übergeben Sie die verbleibenden GZIP-Daten an den Hardware-Dekompressor.

Übergeben Sie dem EZIP-Hardwaredekompressor in einem Aufruf den vollständigen GZIP-Datenstrom hinter dem vier Byte langen Längenpräfix. Würde eine große Eingabe den verfügbaren Eingabe- oder Ausgabepuffer überschreiten, teilen Sie die Originaldatei in Blöcke auf (der Quellleitfaden empfiehlt 10-KB-Blöcke), komprimieren Sie jeden Block einzeln und übergeben Sie die GZIP-Daten der Blöcke der Reihe nach an den Dekompressor.

Integrations-Checkliste

Bewahren Sie für jedes Asset das Original-PNG, die Befehlszeile, das Farb-/Alpha-Format, die erzeugte Datei, den Linker-Abschnitt, die Display-Konfiguration des Zielsystems und einen Darstellungstest auf dem Zielboard auf. Wird das Asset im externen Flash gespeichert, stimmen Sie Abschnitt und Dateisystemplatzierung mit Externen Flash verwenden ab.

Offizielle Quellen

Zuletzt aktualisiert: