From 6f4b6b1b88ae563e1707c6dea5b261f16f903f29 Mon Sep 17 00:00:00 2001 From: magnium Date: Wed, 8 Sep 2021 06:27:26 +0200 Subject: [PATCH] Fix ImageView levelMode (#1974) * fixes #1769 * Automatically set image to ImageView if imageItem is provided. Added a test for correct initialization of ImageView with imageItem and levelMode. --- pyqtgraph/graphicsItems/HistogramLUTItem.py | 2 +- pyqtgraph/imageview/ImageView.py | 22 +++++++++++---------- tests/imageview/test_imageview.py | 6 ++++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/pyqtgraph/graphicsItems/HistogramLUTItem.py b/pyqtgraph/graphicsItems/HistogramLUTItem.py index fe3ab049..5350c16e 100644 --- a/pyqtgraph/graphicsItems/HistogramLUTItem.py +++ b/pyqtgraph/graphicsItems/HistogramLUTItem.py @@ -443,7 +443,7 @@ class HistogramLUTItem(GraphicsWidget): self.regions[i].setVisible(False) if self.levelMode == 'rgba': - imax = 4 + nch = 4 if self.imageItem() is not None: # Only show rgb channels if connected image lacks alpha. nch = self.imageItem().channels() diff --git a/pyqtgraph/imageview/ImageView.py b/pyqtgraph/imageview/ImageView.py index a85e5d61..e5256495 100644 --- a/pyqtgraph/imageview/ImageView.py +++ b/pyqtgraph/imageview/ImageView.py @@ -127,7 +127,6 @@ class ImageView(QtGui.QWidget): self.ui = ui_template.Ui_Form() self.ui.setupUi(self) self.scene = self.ui.graphicsView.scene() - self.ui.histogram.setLevelMode(levelMode) self.ignorePlaying = False @@ -139,15 +138,6 @@ class ImageView(QtGui.QWidget): self.view.setAspectLocked(True) self.view.invertY() - if imageItem is None: - self.imageItem = ImageItem() - else: - self.imageItem = imageItem - self.view.addItem(self.imageItem) - self.currentIndex = 0 - - self.ui.histogram.setImageItem(self.imageItem) - self.menu = None self.ui.normGroup.hide() @@ -171,6 +161,18 @@ class ImageView(QtGui.QWidget): self.timeLine.setZValue(1) self.ui.roiPlot.addItem(self.timeLine) self.ui.splitter.setSizes([self.height()-35, 35]) + + # init imageItem and histogram + if imageItem is None: + self.imageItem = ImageItem() + else: + self.imageItem = imageItem + self.setImage(imageItem.image, autoRange=False, autoLevels=False, transform=imageItem.transform()) + self.view.addItem(self.imageItem) + self.currentIndex = 0 + + self.ui.histogram.setImageItem(self.imageItem) + self.ui.histogram.setLevelMode(levelMode) # make splitter an unchangeable small grey line: s = self.ui.splitter diff --git a/tests/imageview/test_imageview.py b/tests/imageview/test_imageview.py index 3057a8a5..7970d9e2 100644 --- a/tests/imageview/test_imageview.py +++ b/tests/imageview/test_imageview.py @@ -10,3 +10,9 @@ def test_nan_image(): v.imageItem.getHistogram() app.processEvents() v.window().close() + +def test_init_with_mode_and_imageitem(): + data = np.random.randint(256, size=(256, 256, 3)) + imgitem = pg.ImageItem(data) + pg.ImageView(imageItem=imgitem, levelMode="rgba") + assert(pg.image is not None)