Skip to content

Commit

Permalink
Merge pull request #5206 from radarhere/numpy
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Mar 31, 2021
2 parents 7785931 + 7b4b356 commit 683affa
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
16 changes: 16 additions & 0 deletions Tests/test_image_access.py
Expand Up @@ -23,6 +23,11 @@
except ImportError:
cffi = None

try:
import numpy
except ImportError:
numpy = None


class AccessTest:
# initial value
Expand Down Expand Up @@ -66,6 +71,10 @@ def test_sanity(self):
pix1 = im1.load()
pix2 = im2.load()

for x, y in ((0, "0"), ("0", 0)):
with pytest.raises(TypeError):
pix1[x, y]

for y in range(im1.size[1]):
for x in range(im1.size[0]):
pix2[x, y] = pix1[x, y]
Expand Down Expand Up @@ -109,6 +118,13 @@ def test_sanity_negative_index(self):

assert_image_equal(im1, im2)

@pytest.mark.skipif(numpy is None, reason="NumPy not installed")
def test_numpy(self):
im = hopper()
pix = im.load()

assert pix[numpy.int32(1), numpy.int32(2)] == (18, 20, 59)


class TestImageGetPixel(AccessTest):
@staticmethod
Expand Down
14 changes: 12 additions & 2 deletions src/_imaging.c
Expand Up @@ -1109,7 +1109,12 @@ _getxy(PyObject *xy, int *x, int *y) {
} else if (PyFloat_Check(value)) {
*x = (int)PyFloat_AS_DOUBLE(value);
} else {
goto badval;
PyObject *int_value = PyObject_CallMethod(value, "__int__", NULL);
if (int_value != NULL && PyLong_Check(int_value)) {
*x = PyLong_AS_LONG(int_value);
} else {
goto badval;
}
}

value = PyTuple_GET_ITEM(xy, 1);
Expand All @@ -1118,7 +1123,12 @@ _getxy(PyObject *xy, int *x, int *y) {
} else if (PyFloat_Check(value)) {
*y = (int)PyFloat_AS_DOUBLE(value);
} else {
goto badval;
PyObject *int_value = PyObject_CallMethod(value, "__int__", NULL);
if (int_value != NULL && PyLong_Check(int_value)) {
*y = PyLong_AS_LONG(int_value);
} else {
goto badval;
}
}

return 0;
Expand Down

0 comments on commit 683affa

Please sign in to comment.