MaxLevs
@MaxLevs

Почему QImage после scaled() становиться рваным?

На главной форме QGraphicsView обозванный paint_area размеров 400x400.
Ему через setScene() устанавливается объект класса PaintScene(QGraphicsScene) вида
Код PaintScene
class PaintScene(QGraphicsScene):
    prev = None
    color = Qt.black
    width = 10
    strong = 10

    def __init__(self):
        super().__init__()
        pass

    def mousePressEvent(self, event):
        self.addEllipse(
            event.scenePos().x() - self.width / 2,
            event.scenePos().y() - self.width / 2,
            self.width,
            self.width,
            QPen(Qt.NoPen),
            QBrush(self.color))
        self.prev = event.scenePos()

    def mouseReleaseEvent(self, event):
        self.prev = None

    def mouseMoveEvent(self, event):
        if self.prev:
            self.addLine(
                self.prev.x(),
                self.prev.y(),
                event.scenePos().x(),
                event.scenePos().y(),
                QPen(self.color, self.width, Qt.SolidLine, Qt.RoundCap))
            self.prev = event.scenePos()

    def clear_area(self):
        self.clear()

В результате получается холст, на котором можно рисовать мышью. Рисунки - набор линий и эллипсов.
Наглядно
5c3c3a33b2ec1236645427.png


После рисования изображение "сохраняется" в иконку 30x30 функцией get_image() вида
Код get_image
def get_image(self):
        view = self.paint_area
        sceneRect = view.sceneRect().toRect()  #(0, 0, 400, 400)
        sceneRect.adjust(1, 1, -1, -1)  #(1, 1, 398, 398) удаляем рамку
        pixMap = view.grab(sceneRect)
        image = pixMap.toImage()
        image = image.scaled(30, 30)
        return image


Однако изображение получается "рваным". Примеры ниже.
400x400:
5c3c39886c431218411912.png
30x30:
5c3c39a2581cb310884506.png

Как получить корректное уменьшенное изображение?
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы