mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-02-03 21:24:31 +03:00
add support for RGBaXX and RGBaX raw tiff modes
This commit is contained in:
parent
ad5cf0a0e2
commit
accc66fb5e
|
@ -280,8 +280,14 @@ class TestLibUnpack(PillowTestCase):
|
||||||
self.assert_unpack("RGBA", "RGBa", 4,
|
self.assert_unpack("RGBA", "RGBa", 4,
|
||||||
(63, 127, 191, 4), (159, 191, 223, 8), (191, 212, 233, 12))
|
(63, 127, 191, 4), (159, 191, 223, 8), (191, 212, 233, 12))
|
||||||
self.assert_unpack("RGBA", "RGBa",
|
self.assert_unpack("RGBA", "RGBa",
|
||||||
b'\x01\x02\x03\x00\x10\x20\x30\xff',
|
b'\x01\x02\x03\x00\x10\x20\x30\x7f\x10\x20\x30\xff',
|
||||||
(0, 0, 0, 0), (16, 32, 48, 255))
|
(0, 0, 0, 0), (32, 64, 96, 127), (16, 32, 48, 255))
|
||||||
|
self.assert_unpack("RGBA", "RGBaX",
|
||||||
|
b'\x01\x02\x03\x00-\x10\x20\x30\x7f-\x10\x20\x30\xff-',
|
||||||
|
(0, 0, 0, 0), (32, 64, 96, 127), (16, 32, 48, 255))
|
||||||
|
self.assert_unpack("RGBA", "RGBaXX",
|
||||||
|
b'\x01\x02\x03\x00==\x10\x20\x30\x7f!!\x10\x20\x30\xff??',
|
||||||
|
(0, 0, 0, 0), (32, 64, 96, 127), (16, 32, 48, 255))
|
||||||
self.assert_unpack("RGBA", "RGBa;16L", 8,
|
self.assert_unpack("RGBA", "RGBa;16L", 8,
|
||||||
(63, 127, 191, 8), (159, 191, 223, 16), (191, 212, 233, 24))
|
(63, 127, 191, 8), (159, 191, 223, 16), (191, 212, 233, 24))
|
||||||
self.assert_unpack("RGBA", "RGBa;16L",
|
self.assert_unpack("RGBA", "RGBa;16L",
|
||||||
|
|
|
@ -208,6 +208,10 @@ OPEN_INFO = {
|
||||||
(MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"),
|
(MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"),
|
||||||
(II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
(II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
||||||
(MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
(MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
||||||
|
(II, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"),
|
||||||
|
(MM, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"),
|
||||||
|
(II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"),
|
||||||
|
(MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"),
|
||||||
(II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
(II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
||||||
(MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
(MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
||||||
(II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"),
|
(II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"),
|
||||||
|
|
|
@ -797,6 +797,48 @@ unpackRGBa(UINT8* _out, const UINT8* in, int pixels)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unpackRGBaskip1(UINT8* _out, const UINT8* in, int pixels)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
UINT32* out = (UINT32*) _out;
|
||||||
|
/* premultiplied RGBA */
|
||||||
|
for (i = 0; i < pixels; i++) {
|
||||||
|
int a = in[3];
|
||||||
|
if ( ! a) {
|
||||||
|
out[i] = 0;
|
||||||
|
} else if (a == 255) {
|
||||||
|
out[i] = MAKE_UINT32(in[0], in[1], in[2], a);
|
||||||
|
} else {
|
||||||
|
out[i] = MAKE_UINT32(CLIP8(in[0] * 255 / a),
|
||||||
|
CLIP8(in[1] * 255 / a),
|
||||||
|
CLIP8(in[2] * 255 / a), a);
|
||||||
|
}
|
||||||
|
in += 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unpackRGBaskip2(UINT8* _out, const UINT8* in, int pixels)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
UINT32* out = (UINT32*) _out;
|
||||||
|
/* premultiplied RGBA */
|
||||||
|
for (i = 0; i < pixels; i++) {
|
||||||
|
int a = in[3];
|
||||||
|
if ( ! a) {
|
||||||
|
out[i] = 0;
|
||||||
|
} else if (a == 255) {
|
||||||
|
out[i] = MAKE_UINT32(in[0], in[1], in[2], a);
|
||||||
|
} else {
|
||||||
|
out[i] = MAKE_UINT32(CLIP8(in[0] * 255 / a),
|
||||||
|
CLIP8(in[1] * 255 / a),
|
||||||
|
CLIP8(in[2] * 255 / a), a);
|
||||||
|
}
|
||||||
|
in += 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
unpackBGRa(UINT8* _out, const UINT8* in, int pixels)
|
unpackBGRa(UINT8* _out, const UINT8* in, int pixels)
|
||||||
{
|
{
|
||||||
|
@ -1304,6 +1346,8 @@ static struct {
|
||||||
{"RGBA", "RGBAX", 40, copy4skip1},
|
{"RGBA", "RGBAX", 40, copy4skip1},
|
||||||
{"RGBA", "RGBAXX", 48, copy4skip2},
|
{"RGBA", "RGBAXX", 48, copy4skip2},
|
||||||
{"RGBA", "RGBa", 32, unpackRGBa},
|
{"RGBA", "RGBa", 32, unpackRGBa},
|
||||||
|
{"RGBA", "RGBaX", 40, unpackRGBaskip1},
|
||||||
|
{"RGBA", "RGBaXX", 48, unpackRGBaskip2},
|
||||||
{"RGBA", "RGBa;16L", 64, unpackRGBa16L},
|
{"RGBA", "RGBa;16L", 64, unpackRGBa16L},
|
||||||
{"RGBA", "RGBa;16B", 64, unpackRGBa16B},
|
{"RGBA", "RGBa;16B", 64, unpackRGBa16B},
|
||||||
{"RGBA", "BGRa", 32, unpackBGRa},
|
{"RGBA", "BGRa", 32, unpackBGRa},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user