pyqtgraph/tests/graphicsItems/test_ImageItemFormat.py

169 lines
7.7 KiB
Python

import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
def check_format(shape, dtype, levels, lut, expected_format):
data = np.zeros(shape, dtype=dtype)
item = pg.ImageItem(axisOrder='row-major')
item.setImage(data, autoLevels=False, lut=lut, levels=levels)
item.render()
assert item.qimage.format() == expected_format
def test_uint8():
Format = QtGui.QImage.Format
dtype = np.uint8
w, h = 192, 108
lo, hi = 50, 200
lut_none = None
lut_mono1 = np.random.randint(256, size=256, dtype=np.uint8)
lut_mono2 = np.random.randint(256, size=(256, 1), dtype=np.uint8)
lut_rgb = np.random.randint(256, size=(256, 3), dtype=np.uint8)
lut_rgba = np.random.randint(256, size=(256, 4), dtype=np.uint8)
# lut with less than 256 entries
lut_mono1_s = np.random.randint(256, size=255, dtype=np.uint8)
lut_mono2_s = np.random.randint(256, size=(255, 1), dtype=np.uint8)
lut_rgb_s = np.random.randint(256, size=(255, 3), dtype=np.uint8)
lut_rgba_s = np.random.randint(256, size=(255, 4), dtype=np.uint8)
# lut with more than 256 entries
lut_mono1_l = np.random.randint(256, size=257, dtype=np.uint8)
lut_mono2_l = np.random.randint(256, size=(257, 1), dtype=np.uint8)
lut_rgb_l = np.random.randint(256, size=(257, 3), dtype=np.uint8)
lut_rgba_l = np.random.randint(256, size=(257, 4), dtype=np.uint8)
levels = None
check_format((h, w), dtype, levels, lut_none, Format.Format_Grayscale8)
check_format((h, w, 3), dtype, levels, lut_none, Format.Format_RGB888)
check_format((h, w, 4), dtype, levels, lut_none, Format.Format_RGBA8888)
levels = [lo, hi]
check_format((h, w), dtype, levels, lut_none, Format.Format_Indexed8)
levels = None
check_format((h, w), dtype, levels, lut_mono1, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba, Format.Format_Indexed8)
levels = [lo, hi]
check_format((h, w), dtype, levels, lut_mono1, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_l, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2_l, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb_l, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba_l, Format.Format_Indexed8)
levels = [lo, hi]
check_format((h, w, 3), dtype, levels, lut_none, Format.Format_RGB888)
def test_uint16():
Format = QtGui.QImage.Format
dtype = np.uint16
w, h = 192, 108
lo, hi = 100, 10000
lut_none = None
lut_mono1 = np.random.randint(256, size=256, dtype=np.uint8)
lut_mono2 = np.random.randint(256, size=(256, 1), dtype=np.uint8)
lut_rgb = np.random.randint(256, size=(256, 3), dtype=np.uint8)
lut_rgba = np.random.randint(256, size=(256, 4), dtype=np.uint8)
# lut with less than 256 entries
lut_mono1_s = np.random.randint(256, size=255, dtype=np.uint8)
lut_mono2_s = np.random.randint(256, size=(255, 1), dtype=np.uint8)
lut_rgb_s = np.random.randint(256, size=(255, 3), dtype=np.uint8)
lut_rgba_s = np.random.randint(256, size=(255, 4), dtype=np.uint8)
# lut with more than 256 entries
lut_mono1_l = np.random.randint(256, size=257, dtype=np.uint8)
lut_mono2_l = np.random.randint(256, size=(257, 1), dtype=np.uint8)
lut_rgb_l = np.random.randint(256, size=(257, 3), dtype=np.uint8)
lut_rgba_l = np.random.randint(256, size=(257, 4), dtype=np.uint8)
levels = None
try:
fmt_gray16 = Format.Format_Grayscale16
except AttributeError:
fmt_gray16 = Format.Format_ARGB32
check_format((h, w), dtype, levels, lut_none, fmt_gray16)
check_format((h, w, 3), dtype, levels, lut_none, Format.Format_RGB888)
check_format((h, w, 4), dtype, levels, lut_none, Format.Format_RGBA64)
levels = [lo, hi]
check_format((h, w), dtype, levels, lut_none, Format.Format_Grayscale8)
levels = None
check_format((h, w), dtype, levels, lut_mono1, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_l, Format.Format_Grayscale8)
check_format((h, w), dtype, levels, lut_mono2_l, Format.Format_Grayscale8)
check_format((h, w), dtype, levels, lut_rgb_l, Format.Format_RGBX8888)
check_format((h, w), dtype, levels, lut_rgba_l, Format.Format_RGBA8888)
levels = [lo, hi]
check_format((h, w, 3), dtype, levels, lut_none, Format.Format_RGB888)
def test_float32():
Format = QtGui.QImage.Format
dtype = np.float32
w, h = 192, 108
lo, hi = -1, 1
lut_none = None
lut_mono1 = np.random.randint(256, size=256, dtype=np.uint8)
lut_mono2 = np.random.randint(256, size=(256, 1), dtype=np.uint8)
lut_rgb = np.random.randint(256, size=(256, 3), dtype=np.uint8)
lut_rgba = np.random.randint(256, size=(256, 4), dtype=np.uint8)
# lut with less than 256 entries
lut_mono1_s = np.random.randint(256, size=255, dtype=np.uint8)
lut_mono2_s = np.random.randint(256, size=(255, 1), dtype=np.uint8)
lut_rgb_s = np.random.randint(256, size=(255, 3), dtype=np.uint8)
lut_rgba_s = np.random.randint(256, size=(255, 4), dtype=np.uint8)
# lut with more than 256 entries
lut_mono1_l = np.random.randint(256, size=257, dtype=np.uint8)
lut_mono2_l = np.random.randint(256, size=(257, 1), dtype=np.uint8)
lut_rgb_l = np.random.randint(256, size=(257, 3), dtype=np.uint8)
lut_rgba_l = np.random.randint(256, size=(257, 4), dtype=np.uint8)
levels = [lo, hi]
check_format((h, w), dtype, levels, lut_none, Format.Format_Grayscale8)
check_format((h, w, 3), dtype, levels, lut_none, Format.Format_RGB888)
check_format((h, w, 4), dtype, levels, lut_none, Format.Format_RGBA8888)
check_format((h, w), dtype, levels, lut_mono1, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono2_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgb_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_rgba_s, Format.Format_Indexed8)
check_format((h, w), dtype, levels, lut_mono1_l, Format.Format_Grayscale8)
check_format((h, w), dtype, levels, lut_mono2_l, Format.Format_Grayscale8)
check_format((h, w), dtype, levels, lut_rgb_l, Format.Format_RGBX8888)
check_format((h, w), dtype, levels, lut_rgba_l, Format.Format_RGBA8888)