Skip to content

Commit

Permalink
Added mode descriptors for all I;16 modes
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Jun 12, 2019
1 parent e8af68b commit b262378
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
11 changes: 11 additions & 0 deletions Tests/test_image_mode.py
Expand Up @@ -26,6 +26,17 @@ def test_sanity(self):
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")
Expand Down
14 changes: 11 additions & 3 deletions src/PIL/ImageMode.py
Expand Up @@ -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]
16 changes: 5 additions & 11 deletions src/PIL/ImageShow.py
Expand Up @@ -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)

Expand Down

0 comments on commit b262378

Please sign in to comment.