Пример #1
0
 def update_frame_image(self, frame_index: int):
     """
     刷新帧图象显示
     :param frame_index: 帧索引
     :return: None
     """
     base64 = self._frame_base64_dict[frame_index]
     byte_arr = QByteArray(base64)
     img = QImage()
     img.loadFromData(QByteArray.fromBase64(byte_arr))
     pixmap = QPixmap.fromImage(img)
     self.current_frame_item.setPixmap(pixmap)
     self.current_frame_index = frame_index
Пример #2
0
class PreviewWindow(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.mode = Mode.NoMode
        self.image = QImage()
        self.zoomed_image = QImage()
        self.svgRenderer = QSvgRenderer(self)
        self.zoom_scale = ZOOM_ORIGINAL_SCALE

    def mode(self):
        return self.mode

    def set_mode(self, mode):
        self.mode = mode

    def load(self, data):
        if self.mode == Mode.PngMode:
            self.image.loadFromData(data)
            self.setMinimumSize(self.image.rect().size())
        elif self.mode == Mode.SvgMode:
            self.svgRenderer.load(data)

        self.zoom_image()
        self.update()

    # Public slots
    def zoom_original(self):
        self.set_zoom_scale(ZOOM_ORIGINAL_SCALE)

    def zoom_in(self):
        # new_scale = self.zoom_scale + \
        #             ZOOM_BIG_INCREMENT if self.zoom_scale >= ZOOM_ORIGINAL_SCALE else ZOOM_SMALL_INCREMENT
        new_scale = self.zoom_scale + ZOOM_SMALL_INCREMENT
        if new_scale > MAX_ZOOM_SCALE:
            new_scale = MAX_ZOOM_SCALE
        self.set_zoom_scale(new_scale)

    def zoom_out(self):
        # new_scale = self.zoom_scale - \
        #             ZOOM_SMALL_INCREMENT if self.zoom_scale <= ZOOM_ORIGINAL_SCALE else ZOOM_BIG_INCREMENT
        new_scale = self.zoom_scale - ZOOM_SMALL_INCREMENT
        if new_scale < MIN_ZOOM_SCALE:
            new_scale = MIN_ZOOM_SCALE
        self.set_zoom_scale(new_scale)

    # Private methods

    def paintEvent(self, event):
        painter = QPainter(self)
        output_size = QSize()

        if self.mode == Mode.PngMode:
            output_size = self.zoomed_image.size()
            output_rect = QRect(QPoint(), output_size)
            output_rect.translate(self.rect().center() - output_rect.center())
            painter.drawImage(output_rect.topLeft(), self.zoomed_image)

        elif self.mode == Mode.SvgMode:
            output_size = self.svgRenderer.defaultSize()
            if self.zoom_scale != ZOOM_ORIGINAL_SCALE:
                zoom = float(self.zoom_scale) / ZOOM_ORIGINAL_SCALE
                output_size.scale(output_size.width() * zoom,
                                  output_size.height() * zoom,
                                  Qt.IgnoreAspectRatio)

            output_rect = QRect(QPoint(), output_size)
            output_rect.translate(self.rect().center() - output_rect.center())
            self.svgRenderer.render(painter, output_rect)

        self.setMinimumSize(output_size)

    def zoom_image(self):
        if self.mode == Mode.PngMode:
            if self.zoom_scale == ZOOM_ORIGINAL_SCALE:
                self.zoomed_image = self.image
            else:
                zoom = float(self.zoom_scale) / ZOOM_ORIGINAL_SCALE
                self.zoomed_image = self.image.scaled(
                    self.image.width() * zoom,
                    self.image.height() * zoom, Qt.IgnoreAspectRatio,
                    Qt.SmoothTransformation)

    def set_zoom_scale(self, new_scale):
        if self.zoom_scale != new_scale:
            self.zoom_scale = new_scale
            self.zoom_image()
            self.update()