C
Qt Quick ウルトラライトイメージングコーダーの例
カスタム画像フォーマットを読み込む方法を示します。
概要
この例では、カスタム画像デコーダを実装し、QMLエンジンに登録する方法を示します。

この例では、様々な画像を表示する簡単な画面(imagedecoder.qml)を用意しました。これらの画像はQt Quick Ultralite Resource Compiler では処理されず、そのまま保存されます。2つの画像はそのままリソースシステムにコピーされ、残りの2つはファイルシステムから読み込まれます。
対象プラットフォーム
注: STM32H750B Discovery kit、RH850/D1M1A 評価ボード、Infineon TRAVEO T2G CYT4DN には SD カードスロットがありません。ファイルシステム上のイメージの使用を除外するために、サンプルを修正しました。example/imagedecoder/rootqml/+noFilesystemSupport/imagedecoder.qmlと example/imagedecoder/qmlproject_stm32h750b.qmlproject、example/imagedecoder/imagedecoder_traveo_t2g.qmlprojectをそれぞれ参照してください。
注意: グラフィックス・ドライバの制限により、現在、ソースJPEG画像のサブサンプリング・モードとしてサポートされているのはYUV420のみです。詳細については、JPEGデコードドライバTRAVEO T2Gクラスタシリーズ ユーザーマニュアルのサンプルアプリケーションユーザーガイドを参照してください。ソース画像をYUV420サブサンプリング形式に変換するには、ImageMagick Convertツールを使用できます:convert input.jpg -sampling-factor 4:2:0 output.jpg.
注意: Infineon TRAVEO T2G CYT4DNの場合、必須のCMake変数TVII_JPEG_DRIVER_DIR を設定してください。これは、JPEGデコードドライバSDKのルートフォルダを指す必要があります。
RH850 プラットフォームでは、以下のコンパイル定義を追加して JPEG ドライバを構成します:
USE_OUTPUT_SPLIT_MODEデコードがチャンク単位で実行される分割モードで、Renesas JCUA ハードウェアを構成します。完全な画像が一度にデコードされるノーマルモードを使用する場合は、この定義をスキップできます。
DECODE_BUFFER_PIXEL_LINESUSE_OUTPUT_SPLIT_MODEが有効な場合、DECODE_BUFFER_PIXEL_LINESは、1回の繰り返しで処理される出力バッファー画素行数を設定する。この値は16の倍数でなければならない。DECODE_BUFFER_PIXEL_LINESのデフォルト値は16である。CHROMA_SUBSAMPLING使用する画像のクロマサブサンプリング形式を設定する。設定可能な値は以下のとおり:
R_JCUA_JPEG_FORMAT_YCBCR420R_JCUA_JPEG_FORMAT_YCBCR411R_JCUA_JPEG_FORMAT_YCBCR422R_JCUA_JPEG_FORMAT_YCBCR444
CHROMA_SUBSAMPLINGのデフォルト値は R_JCUA_JPEG_FORMAT_YCBCR420 である。注意: 現在、クロマサブサンプリングは実行時に決定できないため、コンパイル時に指定する必要があります。アプリケーションで使用するすべてのJPEG画像は、同じクロマ・サブサンプリングで保存する必要があります。
デバイス上でサンプルを実行する
サンプルをビルドした後、ファイルシステムから読み込んだ画像を、FAT32でフォーマットしたSDカードのルートフォルダにコピーする必要があります:
- basse-terre-guadeloupe.jpg
- ヨセミテ国立公園.jpg
これは STM32F769I にのみ適用される。このボードには SD カード・スロットが付属しているからである。STM32 プラットフォームでは、画像デコーダは JPEG 画像用のアクセラレーテッド・ハードウェア・デコーダを使用します。
デスクトップでサンプルを実行する
デスクトップ実装では、Qt を使用して画像をデコードします。したがって、このプロジェクトでは、ヘッダーを提供するために、ビルド用の開発用Qtが必要です。
cmake examples/imagedecoder -DCMAKE_PREFIX_PATH=$HOME/Qt/6.2.4/gcc_64 -DQUL_PLATFORM=Qt -DQul_ROOT=${QUL_ROOT}cmake examples\imagedecoder -DCMAKE_PREFIX_PATH=C:\Qt\6.2.4\msvc2022_64 -DQUL_COMPILER_NAME=msvc -DQUL_PLATFORM=Qt -DQul_ROOT=%QUL_ROOT%
プラットフォームのバックエンドがリンクされている Qt のバージョンとのリンクの問題を避けるために、同じバージョンでなければなりません。カスタムビルドプラットフォームの場合は、デスクトッププラットフォームバックエンドをビルドする際に使用したものと同じ Qt を使用してください。ビルド済みのプラットフォーム・ライブラリの場合は、Qt 6.2.4でなければなりません。
注: MinGWを使用する場合、コンパイラ名としてgnu 、CMAKE_PREFIX_PATH としてC:˶Qt6.2.4˶を使用します。
注意 : Linux では、Qt は OpenGL に依存しています。サンプルの設定中にOpenGLが見つからないというエラーが発生した場合は、次のコマンドを使用してインストールできます。
sudo apt install libgl1-mesa-dev
プロジェクトの構成
SDカード・スロットを持つプラットフォームでは、サンプルはFatFSファイル・システムAPIの実装を含み、WindowsとLinuxホスト用のデスクトップ・フォルダにはPosixの実装があります。このようなプラットフォームでは、ファイル・セレクタが適用されていない場合、ルートqmlファイルimagedecoder.qml 。
SDカードスロットを持たないプラットフォームでは、例を少し変更します。ルート qml ファイルimagedecoder.qml は、CMakeLists.txt でnoFilesystemSupport セレクタを適用するか、qmlprojectexporter でプロジェクトをエクスポートする際に--selectorコマンドライン引数を使用することで選択されます。
os/baremetalと os/freertosの main 関数は、ボード用に実装されなければならないConfigureBoard() 関数を呼び出します。この関数は、SDカードハードウェアのセットアップ、ファイルシステムの登録、Qt Quick Ultraliteへのイメージデコーダーの登録を行う必要があります。
これらの関数の実装は、board_config.cppのプラットフォーム名(desktop、stm、traveo_t2g)にちなんだサブフォルダーにあります。
画像のデコード
Qt Quick Ultraliteでは、さらなる画像フォーマット用の画像デコーダを登録することができます。Qt Quick Ultraliteがビルトインアセットフォーマットを持たない画像に遭遇した場合、登録されたすべてのデコーダが、その画像をデコードできるかどうかをチェックします。このための特別な構文はありません。画像ソースは通常通りフラッシュまたはファイルシステムからです。
Column { Text { anchors.horizontalCenter: parent.horizontalCenter font.pixelSize: 12 text: " Jpeg Images from flash" } Image { width: 240 height: 144 fillMode: Image.PreserveAspectFit //Below images are stored as assets in flash memory source: leftImageToggle? "grand-canyon-arizona.jpg" : "sequoia-national-park.jpg" } } Column { Text { anchors.horizontalCenter: parent.horizontalCenter font.pixelSize: 12 text: "Jpeg images from filesystem" } Image { width: 240 height: 144 fillMode: Image.PreserveAspectFit //Below images must be present on SD Card root folder for embedded platforms. source: rightImageToggle?"file://basse-terre-guadeloupe.jpg" : "file://yosemite-national-park.jpg" } }
リソースとして宣言することで、変更されていない画像データをアプリケーションのバイナリに含めることができます。file://」プロトコルを使ってファイルシステムから画像データをロードする場合、事前に宣言する必要はありません。
ImageFiles {
files: [
"grand-canyon-arizona.jpg",
"sequoia-national-park.jpg"
]
MCU.resourceKeepRawData: true
}生の画像データをリソースとして含めるには、MCU.resourceKeepRawDataプロパティを有効にする必要があります。
ファイル
- imagedecoder/3rdparty/stm/Utilities/JPEG/jpeg_utils.c
- imagedecoder/CMakeLists.txt
- imagedecoder/board_config.h
- imagedecoder/common/jpeg.cpp
- imagedecoder/desktop/board_config.cpp
- imagedecoder/desktop/desktopimagedecoder.cpp
- imagedecoder/desktop/desktopimagedecoder.h
- imagedecoder/mcu_imagedecoder.qmlproject
- imagedecoder/mcu_imagedecoder_rh850.qmlproject
- imagedecoder/mcu_imagedecoder_stm32h750b.qmlproject
- imagedecoder/mcu_imagedecoder_traveo_t2g.qmlproject
- imagedecoder/os/baremetal/main.cpp
- imagedecoder/renesas-rh850/board_config.cpp
- imagedecoder/renesas-rh850/rh850_jpeg.cpp
- imagedecoder/renesas-rh850/rh850_jpeg.h
- imagedecoder/renesas-rh850/rh850imagedecoder.cpp
- imagedecoder/renesas-rh850/rh850imagedecoder.h
- imagedecoder/rootqml/+noFilesystemSupport/imagedecoder.qml
- imagedecoder/rootqml/imagedecoder.qml
- imagedecoder/stm/jpeg_utils_conf.h
- imagedecoder/stm/stm32f7/board_config.cpp
- imagedecoder/stm/stm32f7/buffer_config.cpp
- imagedecoder/stm/stm32f7/buffer_config.h
- imagedecoder/stm/stm32f7/stm32_mcu_specific.h
- imagedecoder/stm/stm32f7/stm32f7xx_hal_msp.c
- imagedecoder/stm/stm32h7/board_config.cpp
- imagedecoder/stm/stm32h7/buffer_config.cpp
- imagedecoder/stm/stm32h7/buffer_config.h
- imagedecoder/stm/stm32h7/stm32_mcu_specific.h
- imagedecoder/stm/stm32h7/stm32h7xx_hal_msp.c
- imagedecoder/stm/stm32u5/board_config.cpp
- imagedecoder/stm/stm32u5/buffer_config.cpp
- imagedecoder/stm/stm32u5/buffer_config.h
- imagedecoder/stm/stm32u5/stm32_mcu_specific.h
- imagedecoder/stm/stm32u5/stm32u5xx_hal_msp.c
- imagedecoder/stm/stmimagedecoder.cpp
- imagedecoder/stm/stmimagedecoder.h
- imagedecoder/traveo-t2g/board_config.cpp
- imagedecoder/traveo-t2g/traveot2gimagedecoder.cpp
- imagedecoder/traveo-t2g/traveot2gimagedecoder.h
- imagedecoder/traveo-t2g/tvii_jpeg.c
画像
Qul::PlatformInterface::ImageDecoderも参照の こと。
特定の Qt ライセンスの下で利用可能です。
詳細を参照してください。