如何在 QML 中使用压缩/编码纹理



是否可以直接在 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"扩展名)。

我有以下问题:

  1. 为什么RGB565.dds可以工作,而RGB888或其他未压缩格式不起作用?

  2. QT QML
  3. 支持哪些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加载它,但我不确定是否支持这些格式。

最新更新