EZIPを使った画像アセットの圧縮¶
対象SDKブランチに同梱された$SDK_ROOT/tools/png2ezip/ezip.exeを使用します。PNGからEZIP/PIXELのバイナリーデータ、またはLVGL用のC配列を生成できます。まずバイナリーヘッダーとピクセル形式を確認し、対応する変換コマンドを選んでください。EZIPハードウェアで画像を展開する場合は、後半のGZIP手順と組み込みチェックリストに従います。
対象ファミリー
各ファミリー向けのガイドは、それぞれ独立しています。入力・出力の対応状況やツールの動作に違いがある場合は、対象ファミリーのガイドと、そのSDKブランチに同梱されたツールを確認してください。別ファミリーのガイドを根拠に、対象ファミリーの対応状況や動作を推測しないでください。
ファイル形式¶
生成されるバイナリーファイルの先頭4バイトは、リトルエンディアンのヘッダーです。ビットフィールドは次のとおりです。
表: EZIP/PIXELバイナリーヘッダーのフィールド
| ビット | 意味 |
|---|---|
| [31:21] | 画像の高さ |
| [20:10] | 画像の幅 |
| [9:5] | 予約済み |
| [4:0] | 形式 |
形式値は次のとおりです。
表: EZIPおよびPIXELの形式値
| 値 | 意味 |
|---|---|
| 1 | アルファチャンネルなしのEZIP |
| 2 | アルファチャンネルありのEZIP |
| 4 | アルファチャンネルなしのPIXEL |
| 5 | アルファチャンネルありのPIXEL |
アルファチャンネルなしのPIXELはRGB565とRGB888に対応します。アルファチャンネルありのPIXELはARGB565とARGB888に対応します。ツールは入力PNGにアルファチャンネルがあるかどうかで、アルファあり/なしの形式を選択します。アルファチャンネルがない画像からは、アルファなしの形式が生成されます。
表: PIXELおよびARGBの色形式ビットフィールド
| 形式 | ビットフィールド |
|---|---|
| RGB565 | [15:11] 赤、[10:5] 緑、[4:0] 青 |
| RGB888 | [23:16] 赤、[15:8] 緑、[7:0] 青 |
| ARGB565 | [23:16] アルファ、[15:11] 赤、[10:5] 緑、[4:0] 青 |
| ARGB888 | [31:24] アルファ、[23:16] 赤、[15:8] 緑、[7:0] 青 |
上記の各ピクセル形式のビットフィールドは、すべてリトルエンディアンで格納されます。
PNGアセットの変換¶
png_filename.pngを入力ファイル名に置き換えてください。ビルド処理側で作業ディレクトリを変更しない限り、生成ファイルはツールのディレクトリに出力されます。
PIXELバイナリー¶
出力はpng_filename.binです。RGB565/ARGB565を出力する場合はRGB565、RGB888/ARGB888の場合はRGB888を指定します。アルファの有無は入力PNGによって決まります。
EZIPバイナリー¶
出力はpng_filename.binで、ヘッダーの形式値はEZIPに設定されます。
PIXELのLVGL C配列¶
ezip -convert png_filename.png -rgb565 -cfile 1 -section ROM3_IMG
ezip -convert png_filename.png -rgb888 -cfile 1 -section ROM3_IMG
出力はpng_filename.cで、.ROM3_IMG.png_filenameセクションに配置されます。生成される配列の例を示します。
#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配列¶
ezip -convert png_filename.png -rgb565 -cfile 2 -section ROM3_IMG
ezip -convert png_filename.png -rgb888 -cfile 2 -section ROM3_IMG
こちらも出力は.ROM3_IMG.png_filenameに配置されるpng_filename.cです。生成されるEZIP配列は、ハードウェア展開向けにアラインメントされています。
#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[] = {
...
};
ハードウェアEZIP展開用GZIPバイナリーの生成¶
ツールのディレクトリにあるfile.binを圧縮するには、次のコマンドを使います。
ツールはfile.bin.gzを生成します。先頭4バイトには、圧縮前のデータ長が格納されます。ハードウェアEZIPのサンプルでこのストリームを展開する際は、その4バイトを圧縮入力として渡さないでください。格納された長さを使って出力バッファーを確保し、残りのGZIPデータをハードウェアデコンプレッサーに渡します。
4バイトの長さフィールドに続くGZIPペイロード全体を、1回の操作でハードウェアEZIPデコンプレッサーに渡してください。入力または出力バッファーに収まらない大きな入力は、元ファイルをブロック(SiFliのガイドでは10 KB単位が提案されています)に分割して各ブロックを個別に圧縮し、各ブロックのペイロードを順番にデコンプレッサーへ渡します。
組み込み時の確認項目¶
各アセットについて、元のPNG、実行したコマンド、色/アルファ形式、生成ファイル、リンカーセクション、対象ディスプレイの設定、実機での描画確認を記録してください。アセットを外部Flashに格納する場合は、セクションとファイルシステム上の配置を外付けFlashメモリーの使い方の内容と整合させてください。
公式資料¶
最終更新: