C
Qt Quick Ultralite 图像解码示例
演示如何加载自定义图像格式。
概述
此示例展示了如何实现和注册一个自定义图像解码器到 QML 引擎。
该示例包含一个简单的屏幕(imagedecoder.qml),它显示了不同的图像。这些图像没有通过 Qt Quick Ultralite 资源编译器处理,而是保持原样。其中两个图像被无损地复制到资源系统中,而其他两个是从文件系统中读取,无需声明。
目标平台
注意:STM32H750B 开发套件和 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 input.jpg -sampling-factor 4:2:0 output.jpg
。
注意:对于 Infineon TRAVEO™ T2G CYT4DN,请设置必需的 CMake 变量 TVII_JPEG_DRIVER_DIR
。它应指向 JPEG 解码驱动程序 SDK 的根文件夹。
在设备上运行示例
在构建示例后,必须将来自文件系统的图像复制到 FAT32 格式化 SD 卡的根文件夹
- basse-terre-guadeloupe.jpg
- yosemite-national-park.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\msvc_2019 -DQUL_COMPILER_NAME=msvc -DQUL_PLATFORM=Qt -DQul_ROOT=%QUL_ROOT%
为了避免与平台后端链接的Qt版本链接问题,必须是同一版本。对于自定义构建的平台,使用与构建桌面平台后端相同的Qt版本。对于预构建的平台库,必须是Qt 6.2.4。
注意:当使用MinGW时,使用gnu
作为编译器名称,并使用C:\Qt\6.2.4\mingw_64作为CMAKE_PREFIX_PATH
。
项目结构
在具有SD卡插槽的平台上的示例包括FatFS文件系统API实现,以及Windows和Linux主机在desktop文件夹中的Posix实现。针对此类平台的根qml文件imagedecoder.qml
通过在CMakeLists.txt中应用filesystemSupport
选择器来选择。
对于没有SD卡插槽的平台,示例略有修改。根qml文件imagedecoder.qml
通过在CMakeLists.txt中应用noFilesystemSupport
选择器来选择。
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_stm32h750b.qmlproject
- imagedecoder/mcu_imagedecoder_traveo_t2g.qmlproject
- imagedecoder/os/baremetal/main.cpp
- imagedecoder/rootqml/+filesystemSupport/imagedecoder.qml
- imagedecoder/rootqml/+noFilesystemSupport/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/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许可证的许可下可用。
了解更多信息。