diff --git a/Tests/test_file_png.py b/Tests/test_file_png.py index 9a5577bbac0..0869cc58bc5 100644 --- a/Tests/test_file_png.py +++ b/Tests/test_file_png.py @@ -13,7 +13,6 @@ assert_image_equal, assert_image_equal_tofile, hopper, - is_big_endian, is_win32, mark_if_feature_version, skip_unless_feature, @@ -77,7 +76,6 @@ def get_chunks(self, filename): png.crc(cid, s) return chunks - @pytest.mark.xfail(is_big_endian(), reason="Fails on big-endian") def test_sanity(self, tmp_path): # internal version number diff --git a/src/libImaging/Convert.c b/src/libImaging/Convert.c index 9012cfcd74b..f4e970f51ba 100644 --- a/src/libImaging/Convert.c +++ b/src/libImaging/Convert.c @@ -963,10 +963,17 @@ static struct { {"HSV", "RGB", hsv2rgb}, +#ifdef WORDS_BIGENDIAN + {"I", "I;16", I_I16B}, + {"I;16", "I", I16B_I}, + {"L", "I;16", L_I16B}, + {"I;16", "L", I16B_L}, +#else {"I", "I;16", I_I16L}, {"I;16", "I", I16L_I}, {"L", "I;16", L_I16L}, {"I;16", "L", I16L_L}, +#endif {"I", "I;16L", I_I16L}, {"I;16L", "I", I16L_I}, diff --git a/src/libImaging/GetBBox.c b/src/libImaging/GetBBox.c index e73153600d0..b6c9adecb8b 100644 --- a/src/libImaging/GetBBox.c +++ b/src/libImaging/GetBBox.c @@ -181,21 +181,11 @@ ImagingGetExtrema(Imaging im, void *extrema) { case IMAGING_TYPE_SPECIAL: if (strcmp(im->mode, "I;16") == 0) { UINT16 v; - UINT8 *pixel = *im->image8; -#ifdef WORDS_BIGENDIAN - v = pixel[0] + (pixel[1] << 8); -#else - memcpy(&v, pixel, sizeof(v)); -#endif + memcpy(&v, *im->image8, sizeof(v)); imin = imax = v; for (y = 0; y < im->ysize; y++) { for (x = 0; x < im->xsize; x++) { - pixel = (UINT8 *)im->image[y] + x * sizeof(v); -#ifdef WORDS_BIGENDIAN - v = pixel[0] + (pixel[1] << 8); -#else - memcpy(&v, pixel, sizeof(v)); -#endif + memcpy(&v, im->image[y] + x * sizeof(v), sizeof(v)); if (imin > v) { imin = v; } else if (imax < v) {