From 77c36d6edcf9c24280e978fffb899a29e04f0dd0 Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 19 Dec 2013 21:39:18 -0800 Subject: [PATCH] Using uint* for pixel access in mode I;16 and I;32, fixes #452 --- _imaging.c | 8 ++++---- libImaging/Access.c | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/_imaging.c b/_imaging.c index dcb063081..0cce74ce0 100644 --- a/_imaging.c +++ b/_imaging.c @@ -463,14 +463,14 @@ getpixel(Imaging im, ImagingAccess access, int x, int y) { union { UINT8 b[4]; - INT16 h; - INT32 i; + UINT16 h; + UINT32 i; FLOAT32 f; } pixel; if (x < 0 || x >= im->xsize || y < 0 || y >= im->ysize) { - PyErr_SetString(PyExc_IndexError, outside_image); - return NULL; + PyErr_SetString(PyExc_IndexError, outside_image); + return NULL; } access->get_pixel(im, x, y, &pixel); diff --git a/libImaging/Access.c b/libImaging/Access.c index 70eb1af4c..82a4d5297 100644 --- a/libImaging/Access.c +++ b/libImaging/Access.c @@ -94,11 +94,11 @@ static void get_pixel_16L(Imaging im, int x, int y, void* color) { UINT8* in = (UINT8*) &im->image[y][x+x]; - INT16* out = color; + UINT16* out = color; #ifdef WORDS_BIGENDIAN out[0] = in[0] + (in[1]<<8); #else - out[0] = *(INT16*) in; + out[0] = *(UINT16*) in; #endif } @@ -106,9 +106,9 @@ static void get_pixel_16B(Imaging im, int x, int y, void* color) { UINT8* in = (UINT8*) &im->image[y][x+x]; - INT16* out = color; + UINT16* out = color; #ifdef WORDS_BIGENDIAN - out[0] = *(INT16*) in; + out[0] = *(UINT16*) in; #else out[0] = in[1] + (in[0]<<8); #endif @@ -125,11 +125,11 @@ static void get_pixel_32L(Imaging im, int x, int y, void* color) { UINT8* in = (UINT8*) &im->image[y][x*4]; - INT32* out = color; + UINT32* out = color; #ifdef WORDS_BIGENDIAN out[0] = in[0] + (in[1]<<8) + (in[2]<<16) + (in[3]<<24); #else - out[0] = *(INT32*) in; + out[0] = *(UINT32*) in; #endif } @@ -137,9 +137,9 @@ static void get_pixel_32B(Imaging im, int x, int y, void* color) { UINT8* in = (UINT8*) &im->image[y][x*4]; - INT32* out = color; + UINT32* out = color; #ifdef WORDS_BIGENDIAN - out[0] = *(INT32*) in; + out[0] = *(UINT32*) in; #else out[0] = in[3] + (in[2]<<8) + (in[1]<<16) + (in[0]<<24); #endif