通过滚轮事件使用鼠标缩放会降低图像质量

2024-05-15 14:03:25 发布

您现在位置:Python中文网/ 问答频道 /正文

关于这篇文章QGraphicsView doesn't resize after pixmap scale, while pixmap not centered any more我在QtWidgets.QGraphicsWidget内缩放图像时遇到了同样的问题。它降低了质量

我使用了反校准模式: self.setRenderHint(QPainter.Antialiasing) 以及缩放图像中的QtCore.Qt.SmoothTransformation。但在使用wheelEvent缩放时仍然存在问题。以上帖子也建议缩放场景

这是我的默认场景:

    def wheelEvent(self, event):
        self.setRenderHint(QtGui.QPainter.SmoothPixmapTransform)
        self.setRenderHint(QtGui.QPainter.Antialiasing)
        self.setRenderHint(QtGui.QPainter.HighQualityAntialiasing)

        zoomFactor = 1.0 + event.angleDelta().y() * self._mouseWheelZoomRate

        if event.angleDelta().y() > 0:
            self._zoom_level = self._zoom_level + 1
        else:
            self._zoom_level = self._zoom_level - 1

        if self._zoom_level == 0:
            level = ''
        else:
            level = '_' + str(self._zoom_level)

        self.setSceneRect(QtCore.QRectF(-600, -400, 600, 400))

        transform = self.transform()

        if transform.m22() * zoomFactor >= 2.0:
            return

        self.scale(zoomFactor, zoomFactor)

        self.update()

我添加了一些数字来增加场景,但这是为了工作。有没有算法来计算场景面积? 我的图像尺寸是:160*60像素


Tags: 图像selfeventif场景transformlevelscale