在 PySide6 中将 QImage 转换为 QVideoFrame

问题描述 投票:0回答:1

我在将应用程序从 PySide2 移植到 PySide6 时遇到问题。

我正在使用 gphoto2 库读取我的相机,并在预览模式下从中创建一个 PIL 图像。它就像一个实时取景器,向用户显示相机当前看到的内容。

之前,我实现了一个自定义 FrameProvider 并将其用作我的 VideoOutput QML 类型的源。 QVideoFrame 可以轻松地从 QImage 转换:

frame = QVideoFrame(QImage(os.path.join(os.path.dirname(__file__), "./res/initialization.jpg"))) # PySide2 conversion 

由于 VideoOutput 和 QVideoFrame 在 PySide6 中都发生了变化,我实现了一个自定义 VideoSink 类,它公开了我想要使用的 VideoOutput 的 videoSink:

VideoSink {
    id: videoSink
    videoSink: main.videoSink
}

VideoOutput {
    id: main
    anchors.fill: parent
    fillMode: VideoOutput.Stretch
}

这是我的 VideoSink 类的 python 代码:

class VideoSink(QObject):
    def __init__(self, parent=None):
        super(VideoSink, self).__init__(parent)
        self.sink = None

    @Signal
    def sinkChanged(self):
        pass

    def get_sink(self):
        return self.sink

    def set_sink(self, sink):
        self.sink = sink
        frame = QVideoFrame(QImage(os.path.join(os.path.dirname(__file__), "./res/initialization.jpg"))) # not working in PySide6 :-(
        self.sink.setVideoFrame(frame)
        self.sinkChanged.emit()

    videoSink = Property(
        QObject, get_sink, set_sink, notify=sinkChanged
    )

但是,唯一缺少的是到 QVideoFrame 的转换。不幸的是我不能再在 PySide6 中使用构造函数方法了。因此,我正在寻找一种不同的方法来从 QImage 创建 QVideoFrame,或者甚至可能是一种不同的方法来完全在 PySide6 中显示图像流

python qt pyside pyside6
1个回答
0
投票

万一将来有人来寻找这个,我在这个问题上找到了这个:如何在常规 python 中的内存视图对象上使用 ctypes.memmove

© www.soinside.com 2019 - 2024. All rights reserved.