是否可以直接在 qml 中从压缩纹理向 QImage 发送数据?
现在我有以下代码:
Image
{
anchors.fill: parent
fillMode : Image.Stretch
source : "Textures/BG_png.png"
}
然后,我创建具有各种格式源的图像,更准确地说:
// uncompressed
source : "Textures/BG_RGB565.dds"
source : "Textures/BG_RGB888.dds"
source : "Textures/BG_RGBA8888.dds"
//compressed
source : "Textures/BG_ETC1.ktx"
source : "Textures/BG_ETC1.pkm"
source : "Textures/BG_ETC1.dds"
source : "Textures/BG_PVR.pvr"
source : "Textures/BG_ASTC.astc"
我收到除BG_RGB565.dds以外的每种源类型的以下错误"QML 图像:无效的图像数据"(并且仅适用于".dds"扩展名)。
我有以下问题:
为什么RGB565.dds可以工作,而RGB888或其他未压缩格式不起作用?
QT QML支持哪些OpenGL图像类型,您如何提示Image类的源代码仅使用QML以某种方式编码/压缩?
你必须使用 QQuickImageProvider 自己实现这一点。
将 QQuickImageProvider 的类型设置为:
QQmlImageProviderBase::Texture
然后从requestTexture(const QString &id, QSize *size, const QSize &requestedSize)
返回QSGTextureProvider
在此处查看更多详细信息:https://doc.qt.io/qt-5/qquickimageprovider.html
目前,Image {} 支持的唯一支持格式是:https://doc.qt.io/qt-5/qtimageformats-index.html
也许可以从Qt3D加载它,但我不确定是否支持这些格式。