我正在尝试使用RGBA中的视频在QML中获得alpha混合效果。
现在问题是QtMultimedia提供的视频项实际上在QtQuick场景中打开了一个重叠的窗口,所以我认为不可能将其他QML元素与视频元素进行alpha混合(我当然希望我是错了,但我找不到解决办法。)
另一种方法是在updatePaintNode方法中自己在一个继承自QQuickItem的类中呈现视频。
以前有人见过这样的事吗?如果QtMultimedia背后的人无法实现它,甚至可能吗?
我可以更改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
}
}
提前致谢!
答案 0 :(得分:2)
我尝试了一些东西,但最后我使用了名为VideoWidget的Qt示例,它使用了QAbstractVideoSurface和QVideoFrame,并在QQuickPaintedItem中绘制了帧,使用MediaPlayer从QML加载数据。
将ARGB32放在描述QAbstractVideoSurface中支持的像素格式的QList之上是很重要的,遗憾的是Qt逻辑是它们采用第一种availibe格式,这就是为什么本机Video元素不显示alpha通道(它在RGB32中播放视频,或者它是原生元素中覆盖窗口的东西,而不是在QtQuick场景图中绘制它。