8

我正在尝试使用 RGBA 中的视频在 QML 中获得 alpha 混合效果。

现在的问题是 QtMultimedia 提供的 Video Item 实际上在 QtQuick 场景中打开了一个覆盖窗口,所以我认为不可能将其他 QML 元素与 Video 元素进行 alpha 混合(我当然希望我错了,但是我找不到解决方案)。

因此,另一种方法是在 updatePaintNode 方法中自己在继承自 QQuickItem 的类中渲染视频。

  1. 有没有人见过这样的事情?如果 QtMultimedia 背后的人无法实现它,是否有可能?

  2. 我是否可以更改 MediaPlayer 元素的背景,可能是透明的,或者只是 QML 中的一种颜色?

到目前为止,我一直在考虑 QAbstractVideoSurface 和 QVideoFrame,但我不知道如何将其渲染到 QSG 上,甚至不知道 GeometryNode 应该如何查找视频。

最好的解决方案是与其他 QML 元素进行 alpha 混合,例如:

Rectangle {
  width: 1024
  height: 768
  color: "yellow"

  focus: true

  Video {
    id: video
    anchors.fill: parent
    source: "alpha-video.mov"

    autoPlay: true
  }
}

提前致谢!

4

1 回答 1

2

我尝试了一些东西,但最后我使用了名为 VideoWidget 的 Qt 示例,它使用 QAbstractVideoSurface 和 QVideoFrame,并在 QQuickPaintedItem 中绘制帧,使用 MediaPlayer 从 QML 加载数据。

将 ARGB32 放在描述 QAbstractVideoSurface 中支持的像素格式的 QList 之上很重要,不幸的是,Qt 逻辑是它们采用第一种可用格式,这就是本机 Video 元素不显示 alpha 通道的原因(它播放RGB32 中的视频,或者它是在本机元素中具有覆盖窗口的东西,而不是在 QtQuick 场景图中绘制它)。

于 2013-07-23T05:10:04.720 回答