如何渲染 QGraphicsScene 的一部分并将其保存为图像文件 PyQt5
How to render a part of QGraphicsScene and save It as image file PyQt5
假设我有 QGraphicsPixmapItem
从加载的图像添加到 QGraphicsScene
。假设我会在现场添加几个 QGraphicsPolygonItem
。我如何将场景的一部分渲染为 全尺寸图像,同时使用不在空白区域 的多边形和 保存 这个区域 作为图像文件。
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
你应该可以做类似...
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")
我想补充一点,渲染需要 image.area() 和区域参数的 QRectF 对象,否则会抛出 TypeError。
我做到了:
QtCore.QRectF(image.rect())
并为区域参数创建了一个 QRectF 对象。
假设我有 QGraphicsPixmapItem
从加载的图像添加到 QGraphicsScene
。假设我会在现场添加几个 QGraphicsPolygonItem
。我如何将场景的一部分渲染为 全尺寸图像,同时使用不在空白区域 的多边形和 保存 这个区域 作为图像文件。
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
你应该可以做类似...
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")
我想补充一点,渲染需要 image.area() 和区域参数的 QRectF 对象,否则会抛出 TypeError。
我做到了:
QtCore.QRectF(image.rect())
并为区域参数创建了一个 QRectF 对象。