From c8b69a78f3ebf7978be7aacab7209e6bf389acdb Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 5 Mar 2022 13:42:39 +1100 Subject: [PATCH] Clip I;16 to be unsigned, not signed --- Tests/test_image_convert.py | 5 +++++ src/libImaging/Convert.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py index 1d646981976..d196f4c7860 100644 --- a/Tests/test_image_convert.py +++ b/Tests/test_image_convert.py @@ -70,6 +70,11 @@ def test_16bit(): with Image.open("Tests/images/16bit.cropped.tif") as im: _test_float_conversion(im) + for color in (65535, 65536): + im = Image.new("I", (1, 1), color) + im_i16 = im.convert("I;16") + assert im_i16.getpixel((0, 0)) == 65535 + def test_16bit_workaround(): with Image.open("Tests/images/16bit.cropped.tif") as im: diff --git a/src/libImaging/Convert.c b/src/libImaging/Convert.c index 0f200af6b16..96a5a7db14b 100644 --- a/src/libImaging/Convert.c +++ b/src/libImaging/Convert.c @@ -37,7 +37,7 @@ #define MAX(a, b) (a) > (b) ? (a) : (b) #define MIN(a, b) (a) < (b) ? (a) : (b) -#define CLIP16(v) ((v) <= -32768 ? -32768 : (v) >= 32767 ? 32767 : (v)) +#define CLIP16(v) ((v) <= 0 ? 0 : (v) >= 65535 ? 65535 : (v)) /* ITU-R Recommendation 601-2 (assuming nonlinear RGB) */ #define L(rgb) ((INT32)(rgb)[0] * 299 + (INT32)(rgb)[1] * 587 + (INT32)(rgb)[2] * 114)