У меня есть QGraphicsView с шириной и длиной, отличной от растрового изображения, которое я хочу сохранить. Когда я сохраняю растровое изображение, я хочу, чтобы оно было в полном разрешении.
def save(self):
painter = QtGui.QPainter()
painter.setViewport(rect.toRect())
pixmap = QtGui.QPixmap().grabWidget(self)
pixmap_scaled = pixmap.scaled(1275, 2004, QtCore.Qt.KeepAspectRatio)
pixmap_scaled.save('sample.png')
когда я делаю это, изображение не в полном разрешении.
Код ниже - это код fitinview для изображения с высоким разрешением, подходящий для qgraphicsview
def fitInView(self, scale=True):
rect = QtCore.QRectF(self._photo.pixmap().rect())
if not rect.isNull():
self.setSceneRect(rect)
if self.hasPhoto():
unity = self.transform().mapRect(QtCore.QRectF(0, 0, 1, 1))
self.scale(1 / unity.width(), 1 / unity.height())
viewrect = self.viewport().rect()
scenerect = self.transform().mapRect(rect)
factor = min(viewrect.width() / scenerect.width(),
viewrect.height() / scenerect.height())
self.scale(factor, factor)
self._zoom = 0
My QGraphicsView
class FrontGraphics(QtGui.QGraphicsView):
photoClicked = QtCore.pyqtSignal(QtCore.QPoint)
def __init__(self, parent):
super(FrontGraphics, self).__init__(parent)
self._zoom = 0
self._empty = True
self.setMouseTracking(True)
self._scene = QtGui.QGraphicsScene(self)
self._photo = QtGui.QGraphicsPixmapItem()
self._scene.addItem(self._photo)
self.setScene(self._scene)
self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
# self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(30, 30, 30)))
self.setFrameShape(QtGui.QFrame.NoFrame)
# self.setFixedSize(350, 600)
self._idpicture = IDPicture(QtCore.QPointF(50, 50))
self._scene.addItem(self._idpicture)
self._studentid = StudentId()
self._scene.addItem(self._studentid)
self._fullname = FullName()
self._scene.addItem(self._fullname)
self._section = Section()
self._scene.addItem(self._section)
Мой QWidget
class FrontWindow(QtGui.QWidget):
def __init__(self):
super(FrontWindow, self).__init__()
self.viewer = FrontGraphics(self)
self.btnLoad = QtGui.QToolButton(self)
self.btnLoad.setText('Load image')
self.btnLoad.clicked.connect(self.loadImage)
self.btnClear = QtGui.QToolButton(self)
self.btnClear.setText('Clear')
self.btnClear.clicked.connect(self.clearImage)
self.btnPixInfo = QtGui.QLabel(self)
self.setFixedWidth(500)
self.setFixedHeight(800)
self.setGeometry(500, 300, 500, 300)
# Arrange layout
VBlayout = QtGui.QVBoxLayout(self)
VBlayout.addWidget(self.viewer)
HBlayout = QtGui.QHBoxLayout()
HBlayout.setAlignment(QtCore.Qt.AlignLeft)
# HBlayout.addWidget(self.btnLoad)
HBlayout.addWidget(self.btnClear)
HBlayout.addWidget(self.btnPixInfo)
VBlayout.addLayout(HBlayout)
Я попытался ответить здесь Grabwidget, чтобы получить полный вид, даже если он увеличен в , но не может этого сделать