How to render a part of QGraphicsScene and save It as image file PyQt5

こ雲淡風輕ζ 提交于 2020-12-26 04:57:11

问题


Suppose I have QGraphicsPixmapItem from loaded image which is added to QGraphicsScene. And suppose I'll add several QGraphicsPolygonItem's on scene. How I can render a part of the scene as full-size image both with polygons that are not in blank area and save this area as image file.

class ImageView(QtWidgets.QGraphicsView):

    def __init__(self, parent):
        super(ImageView, self).__init__(parent)
        self.setFocus()
        self._zoom = 0
        self._empty = True
        self.scene = QtWidgets.QGraphicsScene(self)
        self._image = QGraphicsPixmapItem()
        self.scene.addItem(self._image)
        self.setScene(self.scene)

        # some other actions
        foo()

    def fitInView(self):
        # custom fit in view and scaling
        bar()


    # some other methods

class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        self.viewer = ImageView(self)
        foo()

    def _save_image(self):
        # method that I need to implement
        pass


回答1:


Untested, but using QGraphicsScene::render you should be able to do something like...

def _save_image(self):

    # Get region of scene to capture from somewhere.
    area = get_QRect_to_capture_from_somewhere()

    # Create a QImage to render to and fix up a QPainter for it.
    image = QImage(area.size(), QImage.Format_ARGB32_Premultiplied)
    painter = QPainter(image)

    # Render the region of interest to the QImage.
    self.scene.render(painter, image.rect(), area)
    painter.end()

    # Save the image to a file.
    image.save("capture.png")


来源:https://stackoverflow.com/questions/53004835/how-to-render-a-part-of-qgraphicsscene-and-save-it-as-image-file-pyqt5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!