pyqtgraph/tests/graphicsItems/test_ImageItemFormat.py
Ogi Moore a6971c768d Move and Update test-data repo into pyqtgraph repo
To reduce complexity, and make it easier to add more images and tests,
the images in the `test-data` repository should be merged with the main
repository.  Furthermore, we can remove a lot of the subprocess work in
the image_testing.py file, as we no longer need to have it interact with
git.

The images are not the same.  Images were regenerated with Qt6, and now
have proper big and little endian handling thanks to @pijyoi

Second commit is a slightly modified variant of
2e135ab282d6007b34a3854921be54d0e9efb241 authored by @pijyoi
it is to convert qimages to RGBA8888 for testing.  Image
files were regenerated images for the big/little handling

Fixed issue with bogus test from test_NonUniformImage and generated a
new image
2021-05-31 21:05:00 -07:00

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)