mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 09:56:17 +03:00
Added support for I;16 modes in putdata()
This commit is contained in:
parent
925e27c77f
commit
08816f43ae
|
@ -55,10 +55,11 @@ def test_mode_with_L_with_float():
|
||||||
assert im.getpixel((0, 0)) == 2
|
assert im.getpixel((0, 0)) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_mode_i():
|
@pytest.mark.parametrize("mode", ("I", "I;16", "I;16L", "I;16B"))
|
||||||
|
def test_mode_i(mode):
|
||||||
src = hopper("L")
|
src = hopper("L")
|
||||||
data = list(src.getdata())
|
data = list(src.getdata())
|
||||||
im = Image.new("I", src.size, 0)
|
im = Image.new(mode, src.size, 0)
|
||||||
im.putdata(data, 2, 256)
|
im.putdata(data, 2, 256)
|
||||||
|
|
||||||
target = [2 * elt + 256 for elt in data]
|
target = [2 * elt + 256 for elt in data]
|
||||||
|
|
|
@ -1531,27 +1531,23 @@ if (PySequence_Check(op)) { \
|
||||||
PyErr_SetString(PyExc_TypeError, must_be_sequence);
|
PyErr_SetString(PyExc_TypeError, must_be_sequence);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
int endian = strncmp(image->mode, "I;16", 4) == 0 ? (strcmp(image->mode, "I;16B") == 0 ? 2 : 1) : 0;
|
||||||
double value;
|
double value;
|
||||||
if (scale == 1.0 && offset == 0.0) {
|
|
||||||
/* Clipped data */
|
|
||||||
for (i = x = y = 0; i < n; i++) {
|
for (i = x = y = 0; i < n; i++) {
|
||||||
set_value_to_item(seq, i);
|
set_value_to_item(seq, i);
|
||||||
|
if (scale != 1.0 || offset != 0.0) {
|
||||||
|
value = value * scale + offset;
|
||||||
|
}
|
||||||
|
if (endian == 0) {
|
||||||
image->image8[y][x] = (UINT8)CLIP8(value);
|
image->image8[y][x] = (UINT8)CLIP8(value);
|
||||||
if (++x >= (int)image->xsize) {
|
|
||||||
x = 0, y++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* Scaled and clipped data */
|
image->image8[y][x * 2 + (endian == 2 ? 1 : 0)] = CLIP8((int)value % 256);
|
||||||
for (i = x = y = 0; i < n; i++) {
|
image->image8[y][x * 2 + (endian == 2 ? 0 : 1)] = CLIP8((int)value >> 8);
|
||||||
set_value_to_item(seq, i);
|
}
|
||||||
image->image8[y][x] = CLIP8(value * scale + offset);
|
|
||||||
if (++x >= (int)image->xsize) {
|
if (++x >= (int)image->xsize) {
|
||||||
x = 0, y++;
|
x = 0, y++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
PyErr_Clear(); /* Avoid weird exceptions */
|
PyErr_Clear(); /* Avoid weird exceptions */
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user