コード例 #1
0
class ImageView(TopicMessageView):
    """
    Popup image viewer
    """
    name = 'Image'

    def __init__(self, timeline, parent, topic):
        super(ImageView, self).__init__(timeline, parent, topic)

        self._image = None
        self._image_topic = None
        self._image_stamp = None
        self.quality = Image.NEAREST  # quality hint for scaling

        # TODO put the image_topic and image_stamp on the picture or display them in some fashion
        self._overlay_font_size = 14.0
        self._overlay_indent = (4, 4)
        self._overlay_color = (0.2, 0.2, 1.0)

        self._image_view = QGraphicsView(parent)
        self._image_view.resizeEvent = self._resizeEvent
        self._scene = QGraphicsScene()
        self._image_view.setScene(self._scene)
        parent.layout().addWidget(self._image_view)

    # MessageView implementation
    def _resizeEvent(self, event):
        # TODO make this smarter. currently there will be no scrollbar even if the
        # timeline extends beyond the viewable area
        self._scene.setSceneRect(0, 0,
                                 self._image_view.size().width() - 2,
                                 self._image_view.size().height() - 2)
        self.put_image_into_scene()

    def message_viewed(self, bag, msg_details):
        """
        refreshes the image
        """
        TopicMessageView.message_viewed(self, bag, msg_details)
        topic, msg, t = msg_details[:3]
        if not msg:
            self.set_image(None, topic, 'no message')
        else:
            self.set_image(msg, topic, msg.header.stamp)

    def message_cleared(self):
        TopicMessageView.message_cleared(self)
        self.set_image(None, None, None)

    # End MessageView implementation
#--------------------------
#Modificamos funcion

    def put_image_into_scene(self):
        if self._image:
            if self.capture is None:
                resized_image = self._image.resize(
                    (self._image_view.size().width() - 2,
                     self._image_view.size().height() - 2, self.quality))
                QtImage = ImageQt(resized_image)
                pixmap = QPixmap.fromImage(QtImage)
                self._scene.clear()
                self._scene.addPixmap(pixmap)
            else:
                QtImage = ImageQt(self._image)
                pixmap = QPixmap.fromImage(QtImage)
                self.label = CaptureImage(self._timeline, self._topic,
                                          self._image_msg, self.capture)
                self.label.setPixmap(pixmap)
                self._scene.addWidget(self.label)
#--------------------------

    def set_image(self, image_msg, image_topic, image_stamp):
        self._image_msg = image_msg
        if image_msg:
            self._image = image_helper.imgmsg_to_pil(image_msg)
        else:
            self._image = None
        self._image_topic = image_topic
        self._image_stamp = image_stamp
        self.put_image_into_scene()