From 1ee3a39e303e91b9cd8d9b1aa6717c403229285c Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Mon, 22 Jan 2024 23:26:01 +0100 Subject: [PATCH] Fix wrong working interpolation of labels in 3d (#6596) # References and relevant issues closes #6595 # Description Set interpolation for rendering of 3D data for labels. --- napari/_qt/_tests/test_qt_viewer.py | 16 ++++++++++++++++ napari/_qt/qt_viewer.py | 3 ++- napari/_vispy/layers/labels.py | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/napari/_qt/_tests/test_qt_viewer.py b/napari/_qt/_tests/test_qt_viewer.py index a9530ae1d0d..196df5014f8 100644 --- a/napari/_qt/_tests/test_qt_viewer.py +++ b/napari/_qt/_tests/test_qt_viewer.py @@ -911,6 +911,22 @@ def test_background_color(qtbot, qt_viewer: QtViewer, dtype): ) +def test_rendering_interpolation(qtbot, qt_viewer): + data = np.zeros((20, 20, 20), dtype=np.uint8) + data[1:-1, 1:-1, 1:-1] = 5 + layer = qt_viewer.viewer.add_labels( + data, opacity=1, rendering="translucent" + ) + layer.selected_label = 5 + qt_viewer.viewer.dims.ndisplay = 3 + QApplication.processEvents() + canvas_screenshot = qt_viewer.screenshot(flash=False) + shape = np.array(canvas_screenshot.shape[:2]) + pixel = canvas_screenshot[tuple((shape * 0.5).astype(int))] + color = layer.colormap.map(5)[0] * 255 + npt.assert_array_equal(pixel, color) + + def test_shortcut_passing(make_napari_viewer): viewer = make_napari_viewer(ndisplay=3) layer = viewer.add_labels( diff --git a/napari/_qt/qt_viewer.py b/napari/_qt/qt_viewer.py index f540036cd66..3b89e43bd80 100644 --- a/napari/_qt/qt_viewer.py +++ b/napari/_qt/qt_viewer.py @@ -21,6 +21,7 @@ ) from weakref import WeakSet, ref +import numpy as np from qtpy.QtCore import QCoreApplication, QObject, Qt, QUrl from qtpy.QtGui import QGuiApplication from qtpy.QtWidgets import QFileDialog, QSplitter, QVBoxLayout, QWidget @@ -784,7 +785,7 @@ def _screenshot(self, flash=True): add_flash_animation(self._welcome_widget) return img - def screenshot(self, path=None, flash=True): + def screenshot(self, path=None, flash=True) -> np.ndarray: """Take currently displayed screen and convert to an image array. Parameters diff --git a/napari/_vispy/layers/labels.py b/napari/_vispy/layers/labels.py index 726770e3a32..f04bf480f69 100644 --- a/napari/_vispy/layers/labels.py +++ b/napari/_vispy/layers/labels.py @@ -337,6 +337,7 @@ def _setup_nodes(self, texture_format): ), clim=[0, 2**23 - 1], texture_format=texture_format, + interpolation='nearest', ) def get_node(self, ndisplay: int, dtype=None) -> Node: