C
Qt Quick Ultralite image_loading サンプル
実行時に画像をロードする方法を示す。
概要
この例では、Qul::ImageProvider とQul::Image を使って、実行時に画像を作成して表示する方法を示します。

画面中央の縞模様の旗の画像は、Load new! ボタンが押されたときにランダムな色合いで作成される。
対象プラットフォーム
プロジェクト構成
CMake プロジェクト・ファイル
FreeRTOS configTOTAL_HEAP_SIZE 変数に、ヒープ上に画像を保存するのに十分な値を設定します。
if (QUL_OS STREQUAL "FreeRTOS" AND NOT QUL_PLATFORM MATCHES "^mimxrt1170")
qul_override_freertos_heap_size(image_loading "300 * 1024")
endif()アプリケーションは、カスタム画像プロバイダを登録する必要があります。これはmain() 関数で行います。BareMetal と は異なります。 FreeRTOS:
if (QUL_OS STREQUAL "FreeRTOS")
target_sources(image_loading PRIVATE
main_freertos.cpp
)
else()
target_sources(image_loading PRIVATE
main_baremetal.cpp
)
endif()アプリケーションUI
image_loading.qmlファイルはユーザー・インターフェースを定義します。
動的画像は、source プロパティが画像プロバイダ URI に設定されたImage アイテムを使用して表示されます。
Image { anchors.horizontalCenter: parent.horizontalCenter // Trigger a new image to be loaded when root.imageName changes source: "image://myimageprovider/" + root.imageName width: 120 height: 120 }
画像プロバイダ
MyImageProvider 画像プロバイダは、myimageloader.h とmyimageloader.cpp で実装されています。
MyImageProvider::requestImage() メソッドは、まず画像URIを解析し、新しいQul::Image を割り当て、書き込みの準備をします:
Qul::SharedImage MyImageProvider::requestImage(const char *imageName, size_t imageNameLength) { if (imageNameLength < 8) return Qul::SharedImage(); // Parse the image name to determine the colors to use for the image colors[0] = imageName[5] - '0'; colors[1] = imageName[6] - '0'; colors[2] = imageName[7] - '0'; loadSteps = 3; currentLoadStep = 0; // Create the image and mark it as being-written-to Qul::Image img(120, 120, Qul::PixelFormat_RGB16); sharedImage = img; img.beginWrite();
そして、画像を時間経過とともに更新する書き込み操作を開始する。この例では、タイマーを使ってこれを行います。実際には、アプリケーションは非同期プロセスを起動し、画像をフェッチしてデコードしたり、画像に対して描画処理を実行したりします。
書き込み操作が完了すると、Qul::EventQueue にイベントが送信され、画像の準備ができたことが通知されます。
void MyImageProvider::onEvent(MyImageLoadedEvent *const &event) { // Causes the finished image to become visible. event->sharedImage.image()->endWrite(); Qul::PlatformInterface::qul_delete(event); }
画像プロバイダはmain() 関数でアプリケーションに登録されます。
int main() { Qul::initHardware(); MyImageProvider myImageProvider; Qul::Application app; app.addImageProvider("myimageprovider", &myImageProvider); ...
ファイル
Qul::Image 、Qul::SharedImage 、Qul::ImageProviderも参照 。
特定の Qt ライセンスの下で利用可能です。
詳細はこちら。