アプリケーションのピクセル・フォーマットの変更
この記事では、プロジェクトの作成後にアプリケーションのピクセル・フォーマットを変更する方法を示します。 この記事では具体的に、TouchGFX Generatorを使用して24bit RGB888アプリケーションを16bit RGB565に変更する例を挙げ、TouchGFXプロジェクト設定への影響についても示します。 ピクセル・フォーマットを変更する理由には、以下のようなことが考えられます。
- ディスプレイ要件が変更された
- アプリケーション要件が変更された
- 初期のプロジェクト作成時にミスがあった
Further reading
一般的に、アプリケーションのピクセル・フォーマットを変更するには、以下の変更が必要になります。
- ボード立ち上げ: LTDCのピクセル・フォーマットの変更
- HALの開発: TouchGFX Generatorの設定を変更し、LTDC設定またはメモリ内のフレームバッファの位置を反映
- TouchGFX Designer: Designerがこの新しい変換後のビット深度と画像アセットに対して正しいフォーマットを使用していることを確認
Designerで操作を開始し、DisplayとImageの現在の設定を調べます。後で検証のためにこれらの画面に戻ることができます。
ボードの立ち上げ
LTDCでよくあるように、STM32CubeMXプロジェクトの特定の設定がアプリケーションの目的のピクセル・フォーマットに影響する可能性がある場合、開発者はここで適切な変更を行い、LTDCによって想定されるフォーマットで、TouchGFXがレンダリングを行うようにする必要があります。
Further reading
HALの開発
フレームバッファのピクセル・フォーマットと一緒に、アプリケーションのビット深度が変更される場合(たとえば、ARGB2222からBRGA2222への変更では8bitアプリケーションのままです)、開発者はフレームバッファのメモリ位置を変更する必要がある可能性があります。 以下に例を示します。
この設定を使用してコードを生成すると、16bitのTouchGFX LCD
クラスを使用するTouchGFXConfiguration
が生成されます。
TouchGFXConfiguration.cpp
static LCD16bpp display;
TouchGFX Designerでプロジェクトを開くと、開発者は、更新を行って新しく生成された設定変更を反映するように求められます。
{
"image_configuration": {
"images": {},
"dither_algorithm": "2",
"alpha_dither": "yes",
"layout_rotation": "0",
"opaque_image_format": "RGB565",
"nonopaque_image_format": "ARGB8888",
"section": "ExtFlashSection",
"extra_section": "ExtFlashSection"
},
次のテーブルは、ピクセル・フォーマットによる不透明 / 透明な画像フォーマットへの影響を示しています。
フレームバッファのピクセル・フォーマット | 不透明なフォーマット | 透明なフォーマット |
---|---|---|
Gray2 | Gray2 | Gray2 |
Gray4 | Gray4 | Gray4 |
ABGR2222 | ABGR2222 | ABGR2222 |
ARGB2222 | ARGB2222 | ARGB2222 |
BGRA2222 | BGRA2222 | BGRA2222 |
RGBA2222 | RGBA2222 | RGBA2222 |
RGB565 | RGB565 | ARGB8888 |
RGB888 | RGB888 | ARGB8888 |
TouchGFX Designer
STM32CubeMXで定義された新しいTouchGFX Generatorの設定に基づいてTouchGFXプロジェクトが更新された後、開発者はTouchGFX Designerの設定が合致するように変更されていることを確認できます。
TouchGFX Designerによってコードが生成されると、画像アセットのコードに更新後のピクセル・フォーマットが反映されます。
TouchGFX\generated\images\src\my_image.png
LOCATION_PRAGMA("ExtFlashSection")
KEEP extern const unsigned char my_image[] LOCATION_ATTRIBUTE("ExtFlashSection") = // 320x240 RGB565 pixels.
まとめ
アプリケーションの現在のフォーマットは、TouchGFX Generatorを使用して簡単に変更できます。 LTDC搭載のマイクロコントローラの場合、TouchGFXを実行するレイヤを、TouchGFX Generatorの設定で定義されたフレームバッファのピクセル・フォーマット(LTDCの場合はRGB565とRGB888に限定される)と一致させて、TouchGFX Coreによるレンダリング・フォーマットに準拠させる必要があります。
STM32CubeMXによってコードが生成された後、TouchGFXプロジェクトが更新されます。TouchGFX Designerでの後続のコード生成時には、画像アセットとフレームバッファ・ドライバの両方が指定されたフォーマットを持つようになります。