mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-12 18:26:17 +03:00
Using uint* for pixel access in mode I;16 and I;32, fixes #452
This commit is contained in:
parent
598d97daff
commit
77c36d6edc
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user