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ライセンスの下で利用可能です。
詳細はこちら。