我不知道如何裁剪在场景中设置的QPixmap,旋转的QGraphicsRectItem也放置在同一场景中
这是我的QGraphicscene和QPixmap的代码
class crop_pattern(QGraphicsView):
img_is_cropped = QtCore.Signal(object)
def __init__(self, path, scale):
super().__init__()
# Connect graphics scene with graphics view
self.setFixedSize(500, 500)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.roi_scale = scale
# Display image
self.set_image(path)
def set_image(self, path):
pixmap = QtGui.QPixmap(path)
if pixmap:
pixmap = pixmap.scaledToHeight(self.roi_scale * pixmap.height())
self.scene.clear()
self.scene.addPixmap(pixmap)
self.setAlignment(QtCore.Qt.AlignCenter)
def wheelEvent(self, event):
zoomInFactor = 1.05
zoomOutFactor = 1 / zoomInFactor
oldPos = self.mapToScene(event.pos())
if event.angleDelta().y() > 0:
zoomFactor = zoomInFactor
else:
zoomFactor = zoomOutFactor
self.scale(zoomFactor, zoomFactor)
newPos = self.mapToScene(event.pos())
delta = newPos - oldPos
self.translate(delta.x(), delta.y())
(wheelEvent函数归功于QGraphicsView Zooming in and out under mouse position using mouse wheel)
以下是当用户单击某个按钮时生成的QGraphicsItem
QtCore.Slot(bool)
def create_shape(self):
sender = self.sender()
if sender.text().lower() == "circle":
self.shape = ellipse_shape(0, 0, 100, 100)
elif sender.text().lower() == "rectangle":
self.shape = rect_shape(0, 0, 100, 100)
self.shape.setZValue(1)
self.shape.setTransformOriginPoint(50, 50)
self.crop_pattern.scene.addItem(self.shape) # added item to the same scene, which is crop_pattern.
下面是问题所建议的GUI。(QGraphicsRectItem已调整大小)
如何裁剪矩形内的像素?谢谢
一种可能的解决方案是创建一个隐藏的QGraphicsView,并使用
render()
方法保存图像部分。隐藏的QGraphicsView的目标不是修改现有视图,因为除了不受缩放影响外,图像还必须旋转输入:
输出:
相关问题 更多 >
编程相关推荐