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