1+ import numpy as np
2+ from PyQt5 import QtCore , QtGui , QtWidgets
13import pyqtgraph as pg
24
35from .simple_plot_widget import SimpleViewBox
@@ -9,6 +11,8 @@ class SimpleImageView(pg.ImageView):
911 def __init__ (self , * args , ** kwargs ):
1012 super (SimpleImageView , self ).__init__ (view = SimpleImageViewBox (),
1113 * args , ** kwargs )
14+ self .view .export .connect (self .on_export )
15+
1216 # disable pyqtgraph controls we don't need
1317 self .ui .histogram .hide ()
1418 self .ui .roiBtn .hide ()
@@ -17,8 +21,31 @@ def __init__(self, *args, **kwargs):
1721 self .keyPressEvent = lambda _ : None
1822 self .keyReleaseEvent = lambda _ : None
1923
24+ def on_export (self , suffix ):
25+ assert suffix == "png"
26+ path , _ = QtWidgets .QFileDialog .getSaveFileName (
27+ self , '' , '' , 'PNG image (*.png)' , '' )
28+ if not path .endswith (".png" ):
29+ path += ".png"
30+ vmin , vmax = self .getLevels ()
31+ arr = (self .image - vmin ) / (vmax - vmin ) * 255
32+ img = np .require (arr , np .uint8 , 'C' )
33+ height , width , _ = self .image .shape
34+
35+ qImg = QtGui .QImage (img , width , height , width *
36+ 3 , QtGui .QImage .Format_RGB888 )
37+ qImg .save (path )
38+
2039
2140class SimpleImageViewBox (SimpleViewBox ):
41+ export = QtCore .pyqtSignal (str )
42+
2243 def raiseContextMenu (self , ev ):
23- # nothing
44+ menu = self .menu
45+ menu .clear ()
46+ menu .addAction ("Save event image as PNG" ,
47+ lambda : self .export .emit ("png" ))
48+
49+ pos = ev .screenPos ()
50+ menu .popup (QtCore .QPoint (pos .x (), pos .y ()))
2451 return True
0 commit comments