Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 from PIL import Image
00034
00035
00036 import sys
00037 from python_qt_binding import QT_BINDING_MODULES
00038 if (
00039 not QT_BINDING_MODULES['QtCore'].__name__.startswith('PyQt5') and
00040 'PyQt5' in sys.modules
00041 ):
00042 sys.modules['PyQt5'] = None
00043 from PIL.ImageQt import ImageQt
00044
00045 from rqt_bag import TopicMessageView
00046 from rqt_bag_plugins import image_helper
00047
00048 from python_qt_binding.QtGui import QPixmap
00049 from python_qt_binding.QtWidgets import QGraphicsScene, QGraphicsView
00050
00051
00052 class ImageView(TopicMessageView):
00053 """
00054 Popup image viewer
00055 """
00056 name = 'Image'
00057
00058 def __init__(self, timeline, parent, topic):
00059 super(ImageView, self).__init__(timeline, parent, topic)
00060
00061 self._image = None
00062 self._image_topic = None
00063 self._image_stamp = None
00064 self.quality = Image.NEAREST
00065
00066
00067 self._overlay_font_size = 14.0
00068 self._overlay_indent = (4, 4)
00069 self._overlay_color = (0.2, 0.2, 1.0)
00070
00071 self._image_view = QGraphicsView(parent)
00072 self._image_view.resizeEvent = self._resizeEvent
00073 self._scene = QGraphicsScene()
00074 self._image_view.setScene(self._scene)
00075 parent.layout().addWidget(self._image_view)
00076
00077
00078 def _resizeEvent(self, event):
00079
00080 self._scene.setSceneRect(0, 0, self._image_view.size().width() - 2, self._image_view.size().height() - 2)
00081 self.put_image_into_scene()
00082
00083 def message_viewed(self, bag, msg_details):
00084 """
00085 refreshes the image
00086 """
00087 TopicMessageView.message_viewed(self, bag, msg_details)
00088 topic, msg, t = msg_details[:3]
00089 if not msg:
00090 self.set_image(None, topic, 'no message')
00091 else:
00092 self.set_image(msg, topic, msg.header.stamp)
00093
00094 def message_cleared(self):
00095 TopicMessageView.message_cleared(self)
00096 self.set_image(None, None, None)
00097
00098
00099 def put_image_into_scene(self):
00100 if self._image:
00101 resized_image = self._image.resize((self._image_view.size().width() - 2, self._image_view.size().height() - 2), self.quality)
00102
00103 QtImage = ImageQt(resized_image)
00104 pixmap = QPixmap.fromImage(QtImage)
00105 self._scene.clear()
00106 self._scene.addPixmap(pixmap)
00107
00108 def set_image(self, image_msg, image_topic, image_stamp):
00109 self._image_msg = image_msg
00110 if image_msg:
00111 self._image = image_helper.imgmsg_to_pil(image_msg)
00112 else:
00113 self._image = None
00114 self._image_topic = image_topic
00115 self._image_stamp = image_stamp
00116 self.put_image_into_scene()