Added mode descriptors for all I;16 modes

This commit is contained in:
Andrew Murray 2019-06-12 20:33:00 +10:00
parent e8af68bae2
commit b262378632
3 changed files with 27 additions and 14 deletions

View File

@ -26,6 +26,17 @@ class TestImageMode(PillowTestCase):
self.assertEqual(m.basemode, "L")
self.assertEqual(m.basetype, "L")
for mode in ("I;16", "I;16S",
"I;16L", "I;16LS",
"I;16B", "I;16BS",
"I;16N", "I;16NS"):
m = ImageMode.getmode(mode)
self.assertEqual(m.mode, mode)
self.assertEqual(str(m), mode)
self.assertEqual(m.bands, ("I",))
self.assertEqual(m.basemode, "L")
self.assertEqual(m.basetype, "L")
m = ImageMode.getmode("RGB")
self.assertEqual(m.mode, "RGB")
self.assertEqual(str(m), "RGB")

View File

@ -48,9 +48,17 @@ def getmode(mode):
modes["La"] = ModeDescriptor("La", ("L", "a"), "L", "L")
modes["PA"] = ModeDescriptor("PA", ("P", "A"), "RGB", "L")
# mapping modes
modes["I;16"] = ModeDescriptor("I;16", "I", "L", "L")
modes["I;16L"] = ModeDescriptor("I;16L", "I", "L", "L")
modes["I;16B"] = ModeDescriptor("I;16B", "I", "L", "L")
for i16mode in (
"I;16",
"I;16S",
"I;16L",
"I;16LS",
"I;16B",
"I;16BS",
"I;16N",
"I;16NS",
):
modes[i16mode] = ModeDescriptor(i16mode, ("I",), "L", "L")
# set global mode cache atomically
_modes = modes
return _modes[mode]

View File

@ -63,18 +63,12 @@ class Viewer(object):
def show(self, image, **options):
# save temporary image to disk
if image.mode[:4] == "I;16":
# @PIL88 @PIL101
# "I;16" isn't an 'official' mode, but we still want to
# provide a simple way to show 16-bit images.
base = "L"
# FIXME: auto-contrast if max() > 255?
else:
if not (
image.mode in ("1", "RGBA") or (self.format == "PNG" and image.mode == "LA")
):
base = Image.getmodebase(image.mode)
if not (base == image.mode or
image.mode in ("1", "RGBA") or
(self.format == "PNG" and image.mode == "LA")):
image = image.convert(base)
if image.mode != base:
image = image.convert(base)
return self.show_image(image, **options)