问题描述
假设我有来自加载图像的 QGraphicsPixmapItem,它被添加到 QGraphicsScene.假设我将在场景中添加几个 QGraphicsPolygonItem.如何将场景的一部分渲染为全尺寸图像,同时使用不在空白区域中的多边形和保存该区域作为图像文件.强>
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
推荐答案
未经测试,但使用 QGraphicsScene::render 你应该可以做类似...
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")