如何在Qt相机取景器上叠加透明图片?树莓派兼容性问题
问题:QCameraViewfinder叠加透明图片在树莓派4上失效,自定义paintEvent导致视频丢失
我尝试在QCameraViewfinder上叠加带有透明效果的图片,以下代码在Windows系统运行正常,但在树莓派4上透明效果失效。我在树莓派4上使用PySide2 5.11.2版本,已尝试过透明PNG和SVG文件。作为替代方案,当我使用paintEvent绘制图形时,取景器无法显示视频,同时附上相关代码和Windows 11、树莓派4的效果对比图。
初始实现代码
from PySide2.QtMultimedia import QCamera, QCameraInfo from PySide2.QtMultimediaWidgets import QCameraViewfinder from PySide2 import QtCore, QtGui from PySide2.QtWidgets import * from PySide2.QtGui import * from PySide2.QtCore import * import sys class ExampleWindow(QMainWindow): def __init__(self, windowsize): super().__init__() self.windowsize = windowsize self.initUI() def initUI(self): self.setFixedSize(self.windowsize) widget = QWidget() self.setCentralWidget(widget) self.view_finder = QCameraViewfinder() camerainfo = QCameraInfo.availableCameras()[0] self.camera = QCamera(camerainfo) self.camera.setViewfinder(self.view_finder) self.camera.start() layout_box = QHBoxLayout(widget) layout_box.setContentsMargins(0, 0, 0, 0) layout_box.addWidget(self.view_finder) pixmap = QPixmap('crosshair3.png') self.image = QLabel(widget) self.image.setPixmap(pixmap) self.image.setFixedSize(pixmap.size()) hw = pixmap.size().width()/2 hh = pixmap.size().height()/2 self.image.move(self.rect().center().x()-hw, self.rect().center().y()-hh) if __name__ == '__main__': app = QApplication(sys.argv) screensize = app.desktop().availableGeometry().size() ex = ExampleWindow(screensize) ex.show() sys.exit(app.exec_())
使用QPainter的代码(取景器无视频)
class MyQCameraViewfinder(QCameraViewfinder): def __init__(self, parent=None): super().__init__(parent) def paintEvent(self, event): paint = QtGui.QPainter() paint.begin(self) paint.setRenderHint(QtGui.QPainter.Antialiasing) paint.setPen(QtCore.Qt.black) paint.setBrush(QtCore.Qt.white) paint.drawEllipse(QtCore.QRect(17, 22, 50, 50)) paint.end()
效果对比
- Windows 11效果:

- 树莓派4效果:

内容的提问来源于stack exchange,提问作者ramiwi
相关产品推荐
相关产品推荐

