アプリケーションのピクセル・フォーマットの変更
この記事では、プロジェクトの作成後にアプリケーションのピクセル・フォーマットを変更する方法を示します。 この記事では具体的に、TouchGFX Generatorを使用して24bit RGB888アプリケーションを16bit RGB565に変更する例を挙げ、TouchGFXプロジェクト設定への影響についても示します。 ピクセル・フォーマットを変更する理由には、以下のようなことが考えられます。
- ディスプレイ要件が変更された
- アプリケーション要件が変更された
- 初期のプロジェクト作成時にミスがあった
Further reading
一般的に、アプリケーションのピクセル・フォーマットを変更するには、以下の変更が必要になります。
- ボード立ち上げ: LTDCのピクセル・フォーマットの変更
- HALの開発: TouchGFX Generatorの設定を変更し、LTDC設定またはメモリ内のフレームバッファの位置を反映
- TouchGFX Designer: Ensure that TouchGFX Designer is using this new converted bit depth and correct format for image assets.
Starting from TouchGFX Designer we can inspect the current configuration for Display and Image and return to these screens later to validate.
ボードの立ち上げ
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
Once the TouchGFX project has been updated based on the new TouchGFX Generator settings defined in STM32CubeMX, developers will find that TouchGFX Designer configuration has changed to match.
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での後続のコード生成時には、画像アセットとフレームバッファ・ドライバの両方が指定されたフォーマットを持つようになります。