Skip to content

Commit 805f8fe

Browse files
committed
enh: export event image via context menu in Quick View (close #35)
1 parent f289b2c commit 805f8fe

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2.0.4
2+
- enh: export event image via context menu in Quick View (#35)
13
2.0.3
24
- setup: bump dclab from 0.20.3 to 0.21.1
35
- docs: add terminology section (#12)

shapeout2/gui/widgets/simple_image_view.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import numpy as np
2+
from PyQt5 import QtCore, QtGui, QtWidgets
13
import pyqtgraph as pg
24

35
from .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

2140
class 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

Comments
 (0)