是否可以直接在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"
我收到以下错误“QML图片:无效图像数据”,除了BG_RGB565.dds以外的每种来源类型(并且只有“.dds”扩展名)。
我有以下问题:
为什么RGB565.dds可以工作,而RGB888或其他未压缩格式不工作?
QT QML支持哪些OpenGL图像类型,以及如何提示Image类只使用QML以某种方式对其源进行编码/压缩?
答案 0 :(得分:1)
您必须使用QQuickImageProvider自行实现。
将QQuickImageProvider的类型设置为:
QQmlImageProviderBase::Texture
然后从QSGTextureProvider
requestTexture(const QString &id, QSize *size, const QSize &requestedSize)
在此处查看更多详情: https://doc.qt.io/qt-5/qquickimageprovider.html
目前,Image {}支持的唯一支持的格式是: https://doc.qt.io/qt-5/qtimageformats-index.html
可以从Qt3D加载它,但我不确定是否支持这些格式。