メイン・コンテンツまでスキップ

アプリケーションのピクセル・フォーマットの変更

この記事では、プロジェクトの作成後にアプリケーションのピクセル・フォーマットを変更する方法を示します。 この記事では具体的に、TouchGFX Generatorを使用して24bit RGB888アプリケーションを16bit RGB565に変更する例を挙げ、TouchGFXプロジェクト設定への影響についても示します。 ピクセル・フォーマットを変更する理由には、以下のようなことが考えられます。

  1. ディスプレイ要件が変更された
  2. アプリケーション要件が変更された
  3. 初期のプロジェクト作成時にミスがあった
Further reading
カラー・フォーマット」の記事を参照してください。

一般的に、アプリケーションのピクセル・フォーマットを変更するには、以下の変更が必要になります。

  1. ボード立ち上げ: LTDCのピクセル・フォーマットの変更
  2. HALの開発: TouchGFX Generatorの設定を変更し、LTDC設定またはメモリ内のフレームバッファの位置を反映
  3. TouchGFX Designer: Designerがこの新しい変換後のビット深度と画像アセットに対して正しいフォーマットを使用していることを確認

Designerで操作を開始し、DisplayとImageの現在の設定を調べます。後で検証のためにこれらの画面に戻ることができます。

Imageの設定はRGB888

Displayの設定は24bit

ボードの立ち上げ

LTDCでよくあるように、STM32CubeMXプロジェクトの特定の設定がアプリケーションの目的のピクセル・フォーマットに影響する可能性がある場合、開発者はここで適切な変更を行い、LTDCによって想定されるフォーマットで、TouchGFXがレンダリングを行うようにする必要があります。

Further reading
TouchGFXアプリケーションに対して、有効なピクセル・フォーマット設定の詳細については、「LTDC」の記事を参照してください。

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"
},

次のテーブルは、ピクセル・フォーマットによる不透明 / 透明な画像フォーマットへの影響を示しています。

フレームバッファのピクセル・フォーマット不透明なフォーマット透明なフォーマット
Gray2Gray2Gray2
Gray4Gray4Gray4
ABGR2222ABGR2222ABGR2222
ARGB2222ARGB2222ARGB2222
BGRA2222BGRA2222BGRA2222
RGBA2222RGBA2222RGBA2222
RGB565RGB565ARGB8888
RGB888RGB888ARGB8888

TouchGFX Designer

STM32CubeMXで定義された新しいTouchGFX Generatorの設定に基づいてTouchGFXプロジェクトが更新された後、開発者はTouchGFX Designerの設定が合致するように変更されていることを確認できます。

Imageの設定はRGB565

Displayの設定は16bit

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での後続のコード生成時には、画像アセットとフレームバッファ・ドライバの両方が指定されたフォーマットを持つようになります。