8

RGBA のビデオで QML のアルファブレンディング効果を得ようとしています。

ここでの問題は、QtMultimedia によって提供される Video Item が実際に QtQuick シーンでオーバーレイ ウィンドウを開くことです。そのため、他の QML 要素を Video 要素とアルファ ブレンドすることはできないと思います (間違っていることを願っていますが、解決策が見つかりません)。

したがって、もう 1 つの方法は、updatePaintNode メソッドで、QQuickItem から継承するクラスで自分自身でビデオをレンダリングすることです。

  1. 誰もこのようなものを見たことがありますか?QtMultimedia の背後にいる人たちがそれを達成できなかったとしても、それは可能ですか?

  2. MediaPlayer 要素の背景を変更したり、透明にしたり、QML の色にしたりすることはできますか?

これまでのところ、QAbstractVideoSurface と QVideoFrame について考えていましたが、それを QSG にレンダリングする方法や、GeometryNode がビデオを探す方法さえわかりません。

最善の解決策は、たとえば次のように、他の QML 要素とのアルファ ブレンディングを取得することです。

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

いくつか試してみましたが、最終的に QAbstractVideoSurface と QVideoFrame を使用する VideoWidget という Qt の例を使用し、MediaPlayer を使用して QML からデータをロードし、QQuickPaintedItem でフレームをペイントしました。

QAbstractVideoSurface でサポートされているピクセル フォーマットを記述する QList の上に ARGB32 を配置することが重要です。残念ながら、Qt のロジックでは、最初に利用可能なフォーマットが使用されるため、ネイティブの Video 要素はアルファ チャネルを表示しません (それはRGB32 のビデオ、それか、QtQuick シーン グラフでペイントするのではなく、ネイティブ要素にオーバーレイ ウィンドウがあるものです)。

于 2013-07-23T05:10:04.720 に答える