mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-04-25 11:33:42 +03:00
Merge pull request #6167 from gmarkall/unpack-bgra16
Add support for unpacking 16-bit BGRA
This commit is contained in:
commit
ba5f2d75b5
|
@ -444,6 +444,8 @@ class TestLibUnpack:
|
||||||
self.assert_unpack("RGBA", "RGBA;4B", 2, (17, 0, 34, 0), (51, 0, 68, 0))
|
self.assert_unpack("RGBA", "RGBA;4B", 2, (17, 0, 34, 0), (51, 0, 68, 0))
|
||||||
self.assert_unpack("RGBA", "RGBA;16L", 8, (2, 4, 6, 8), (10, 12, 14, 16))
|
self.assert_unpack("RGBA", "RGBA;16L", 8, (2, 4, 6, 8), (10, 12, 14, 16))
|
||||||
self.assert_unpack("RGBA", "RGBA;16B", 8, (1, 3, 5, 7), (9, 11, 13, 15))
|
self.assert_unpack("RGBA", "RGBA;16B", 8, (1, 3, 5, 7), (9, 11, 13, 15))
|
||||||
|
self.assert_unpack("RGBA", "BGRA;16L", 8, (6, 4, 2, 8), (14, 12, 10, 16))
|
||||||
|
self.assert_unpack("RGBA", "BGRA;16B", 8, (5, 3, 1, 7), (13, 11, 9, 15))
|
||||||
self.assert_unpack(
|
self.assert_unpack(
|
||||||
"RGBA", "BGRA", 4, (3, 2, 1, 4), (7, 6, 5, 8), (11, 10, 9, 12)
|
"RGBA", "BGRA", 4, (3, 2, 1, 4), (7, 6, 5, 8), (11, 10, 9, 12)
|
||||||
)
|
)
|
||||||
|
|
|
@ -705,7 +705,7 @@ ImagingUnpackBGR15(UINT8 *out, const UINT8 *in, int pixels) {
|
||||||
void
|
void
|
||||||
ImagingUnpackBGRA15(UINT8 *out, const UINT8 *in, int pixels) {
|
ImagingUnpackBGRA15(UINT8 *out, const UINT8 *in, int pixels) {
|
||||||
int i, pixel;
|
int i, pixel;
|
||||||
/* RGB, reversed bytes, 5/5/5/1 bits per pixel */
|
/* RGB, rearranged channels, 5/5/5/1 bits per pixel */
|
||||||
for (i = 0; i < pixels; i++) {
|
for (i = 0; i < pixels; i++) {
|
||||||
pixel = in[0] + (in[1] << 8);
|
pixel = in[0] + (in[1] << 8);
|
||||||
out[B] = (pixel & 31) * 255 / 31;
|
out[B] = (pixel & 31) * 255 / 31;
|
||||||
|
@ -1056,7 +1056,7 @@ unpackABGR(UINT8 *_out, const UINT8 *in, int pixels) {
|
||||||
static void
|
static void
|
||||||
unpackBGRA(UINT8 *_out, const UINT8 *in, int pixels) {
|
unpackBGRA(UINT8 *_out, const UINT8 *in, int pixels) {
|
||||||
int i;
|
int i;
|
||||||
/* RGBA, reversed bytes */
|
/* RGBA, rearranged channels */
|
||||||
for (i = 0; i < pixels; i++) {
|
for (i = 0; i < pixels; i++) {
|
||||||
UINT32 iv = MAKE_UINT32(in[2], in[1], in[0], in[3]);
|
UINT32 iv = MAKE_UINT32(in[2], in[1], in[0], in[3]);
|
||||||
memcpy(_out, &iv, sizeof(iv));
|
memcpy(_out, &iv, sizeof(iv));
|
||||||
|
@ -1065,6 +1065,30 @@ unpackBGRA(UINT8 *_out, const UINT8 *in, int pixels) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unpackBGRA16L(UINT8 *_out, const UINT8 *in, int pixels) {
|
||||||
|
int i;
|
||||||
|
/* 16-bit RGBA, little-endian order, rearranged channels */
|
||||||
|
for (i = 0; i < pixels; i++) {
|
||||||
|
UINT32 iv = MAKE_UINT32(in[5], in[3], in[1], in[7]);
|
||||||
|
memcpy(_out, &iv, sizeof(iv));
|
||||||
|
in += 8;
|
||||||
|
_out += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unpackBGRA16B(UINT8 *_out, const UINT8 *in, int pixels) {
|
||||||
|
int i;
|
||||||
|
/* 16-bit RGBA, big-endian order, rearranged channels */
|
||||||
|
for (i = 0; i < pixels; i++) {
|
||||||
|
UINT32 iv = MAKE_UINT32(in[4], in[2], in[0], in[6]);
|
||||||
|
memcpy(_out, &iv, sizeof(iv));
|
||||||
|
in += 8;
|
||||||
|
_out += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Unpack to "CMYK" image */
|
/* Unpack to "CMYK" image */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1574,6 +1598,8 @@ static struct {
|
||||||
{"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},
|
||||||
|
{"RGBA", "BGRA;16L", 64, unpackBGRA16L},
|
||||||
|
{"RGBA", "BGRA;16B", 64, unpackBGRA16B},
|
||||||
{"RGBA", "ARGB", 32, unpackARGB},
|
{"RGBA", "ARGB", 32, unpackARGB},
|
||||||
{"RGBA", "ABGR", 32, unpackABGR},
|
{"RGBA", "ABGR", 32, unpackABGR},
|
||||||
{"RGBA", "YCCA;P", 32, ImagingUnpackYCCA},
|
{"RGBA", "YCCA;P", 32, ImagingUnpackYCCA},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user