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 if 'PyQt5' in sys.modules:
00038 sys.modules['PyQt5'] = None
00039 from PIL.ImageQt import ImageQt
00040
00041 from rqt_bag import TopicMessageView
00042 import image_helper
00043
00044 from python_qt_binding.QtGui import QGraphicsScene, QGraphicsView, QPixmap
00045
00046
00047 class ImageView(TopicMessageView):
00048 """
00049 Popup image viewer
00050 """
00051 name = 'Image'
00052
00053 def __init__(self, timeline, parent, topic):
00054 super(ImageView, self).__init__(timeline, parent, topic)
00055
00056 self._image = None
00057 self._image_topic = None
00058 self._image_stamp = None
00059 self.quality = Image.NEAREST
00060
00061
00062 self._overlay_font_size = 14.0
00063 self._overlay_indent = (4, 4)
00064 self._overlay_color = (0.2, 0.2, 1.0)
00065
00066 self._image_view = QGraphicsView(parent)
00067 self._image_view.resizeEvent = self._resizeEvent
00068 self._scene = QGraphicsScene()
00069 self._image_view.setScene(self._scene)
00070 parent.layout().addWidget(self._image_view)
00071
00072
00073 def _resizeEvent(self, event):
00074
00075 self._scene.setSceneRect(0, 0, self._image_view.size().width() - 2, self._image_view.size().height() - 2)
00076 self.put_image_into_scene()
00077
00078 def message_viewed(self, bag, msg_details):
00079 """
00080 refreshes the image
00081 """
00082 TopicMessageView.message_viewed(self, bag, msg_details)
00083 topic, msg, t = msg_details[:3]
00084 if not msg:
00085 self.set_image(None, topic, 'no message')
00086 else:
00087 self.set_image(msg, topic, msg.header.stamp)
00088
00089 def message_cleared(self):
00090 TopicMessageView.message_cleared(self)
00091 self.set_image(None, None, None)
00092
00093
00094 def put_image_into_scene(self):
00095 if self._image:
00096 resized_image = self._image.resize((self._image_view.size().width() - 2, self._image_view.size().height() - 2), self.quality)
00097
00098 QtImage = ImageQt(resized_image)
00099 pixmap = QPixmap.fromImage(QtImage)
00100 self._scene.clear()
00101 self._scene.addPixmap(pixmap)
00102
00103 def set_image(self, image_msg, image_topic, image_stamp):
00104 self._image_msg = image_msg
00105 if image_msg:
00106 self._image = image_helper.imgmsg_to_pil(image_msg)
00107 else:
00108 self._image = None
00109 self._image_topic = image_topic
00110 self._image_stamp = image_stamp
00111 self.put_image_into_scene()