python - 如何渲染 QGraphicsScene 的一部分并将其保存为图像文件 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")
推荐阅读
- angular - 如何使用 ngx-translate 截断
- google-apps-script - 在管理目录中查找和阅读资源日历
- python - 为什么这个 Python 解决方案不是就地解决方案?
- xml - 从另一个节点 xslt 调用值
- javascript - 如何根据下拉值过滤/渲染项目?
- javascript - 如何覆盖/替换现有对象
- javascript - 嵌入的 YouTube 视频在本地服务器上不起作用
- sql - Access SQL - 连续数周失败
- extjs - extjs6 更新掩码消息未在长期运行的方法中更新,其中图表正在使用新系列进行更新
- javascript - Promise 完成问题