mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-01 04:46:18 +03:00
use mode structs in Pack.c
This commit is contained in:
parent
cf4a42f1a0
commit
c906098fec
|
@ -4370,6 +4370,7 @@ setup_module(PyObject *m) {
|
||||||
|
|
||||||
ImagingAccessInit();
|
ImagingAccessInit();
|
||||||
ImagingConvertInit();
|
ImagingConvertInit();
|
||||||
|
ImagingPackInit();
|
||||||
|
|
||||||
#ifdef HAVE_LIBJPEG
|
#ifdef HAVE_LIBJPEG
|
||||||
{
|
{
|
||||||
|
@ -4478,6 +4479,7 @@ static void
|
||||||
free_module(void *m) {
|
free_module(void *m) {
|
||||||
ImagingAccessFree();
|
ImagingAccessFree();
|
||||||
ImagingConvertFree();
|
ImagingConvertFree();
|
||||||
|
ImagingPackFree();
|
||||||
}
|
}
|
||||||
|
|
||||||
PyMODINIT_FUNC
|
PyMODINIT_FUNC
|
||||||
|
|
|
@ -176,6 +176,11 @@ ImagingConvertInit(void);
|
||||||
extern void
|
extern void
|
||||||
ImagingConvertFree(void);
|
ImagingConvertFree(void);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
ImagingPackInit(void);
|
||||||
|
extern void
|
||||||
|
ImagingPackFree(void);
|
||||||
|
|
||||||
/* Objects */
|
/* Objects */
|
||||||
/* ------- */
|
/* ------- */
|
||||||
|
|
||||||
|
|
|
@ -78,10 +78,51 @@ extern const RawMode * const IMAGING_RAWMODE_I_32L;
|
||||||
extern const RawMode * const IMAGING_RAWMODE_I_32B;
|
extern const RawMode * const IMAGING_RAWMODE_I_32B;
|
||||||
|
|
||||||
// Rawmodes
|
// Rawmodes
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_1_I;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_1_IR;
|
||||||
extern const RawMode * const IMAGING_RAWMODE_1_R;
|
extern const RawMode * const IMAGING_RAWMODE_1_R;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_A;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_ABGR;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_B;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_BGR;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_BGRA;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_BGRX;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_BGRa;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_C;
|
||||||
extern const RawMode * const IMAGING_RAWMODE_CMYK_I;
|
extern const RawMode * const IMAGING_RAWMODE_CMYK_I;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_CMYK_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_Cb;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_Cr;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_F_32F;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_F_32NF;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_G;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_H;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_I_32NS;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_I_32S;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_K;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_LA_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_L_16;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_L_16B;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_M;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_PA_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_P_1;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_P_2;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_P_4;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_R;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_RGBA_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_RGBX_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_RGB_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_S;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_V;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_X;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_XBGR;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_XRGB;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_Y;
|
||||||
extern const RawMode * const IMAGING_RAWMODE_YCC_P;
|
extern const RawMode * const IMAGING_RAWMODE_YCC_P;
|
||||||
extern const RawMode * const IMAGING_RAWMODE_YCbCrK;
|
extern const RawMode * const IMAGING_RAWMODE_YCbCrK;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_YCbCrX;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_YCbCr_L;
|
||||||
|
extern const RawMode * const IMAGING_RAWMODE_aBGR;
|
||||||
|
|
||||||
const RawMode * findRawMode(const char * const name);
|
const RawMode * findRawMode(const char * const name);
|
||||||
|
|
||||||
|
|
|
@ -524,154 +524,18 @@ band3(UINT8 *out, const UINT8 *in, int pixels) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct {
|
static struct Packer {
|
||||||
const char *mode;
|
const Mode *mode;
|
||||||
const char *rawmode;
|
const RawMode *rawmode;
|
||||||
int bits;
|
int bits;
|
||||||
ImagingShuffler pack;
|
ImagingShuffler pack;
|
||||||
} packers[] = {
|
} *packers = NULL;
|
||||||
|
|
||||||
/* bilevel */
|
|
||||||
{"1", "1", 1, pack1},
|
|
||||||
{"1", "1;I", 1, pack1I},
|
|
||||||
{"1", "1;R", 1, pack1R},
|
|
||||||
{"1", "1;IR", 1, pack1IR},
|
|
||||||
{"1", "L", 8, pack1L},
|
|
||||||
|
|
||||||
/* grayscale */
|
|
||||||
{"L", "L", 8, copy1},
|
|
||||||
{"L", "L;16", 16, packL16},
|
|
||||||
{"L", "L;16B", 16, packL16B},
|
|
||||||
|
|
||||||
/* grayscale w. alpha */
|
|
||||||
{"LA", "LA", 16, packLA},
|
|
||||||
{"LA", "LA;L", 16, packLAL},
|
|
||||||
|
|
||||||
/* grayscale w. alpha premultiplied */
|
|
||||||
{"La", "La", 16, packLA},
|
|
||||||
|
|
||||||
/* palette */
|
|
||||||
{"P", "P;1", 1, pack1},
|
|
||||||
{"P", "P;2", 2, packP2},
|
|
||||||
{"P", "P;4", 4, packP4},
|
|
||||||
{"P", "P", 8, copy1},
|
|
||||||
|
|
||||||
/* palette w. alpha */
|
|
||||||
{"PA", "PA", 16, packLA},
|
|
||||||
{"PA", "PA;L", 16, packLAL},
|
|
||||||
|
|
||||||
/* true colour */
|
|
||||||
{"RGB", "RGB", 24, ImagingPackRGB},
|
|
||||||
{"RGB", "RGBX", 32, copy4},
|
|
||||||
{"RGB", "RGBA", 32, copy4},
|
|
||||||
{"RGB", "XRGB", 32, ImagingPackXRGB},
|
|
||||||
{"RGB", "BGR", 24, ImagingPackBGR},
|
|
||||||
{"RGB", "BGRX", 32, ImagingPackBGRX},
|
|
||||||
{"RGB", "XBGR", 32, ImagingPackXBGR},
|
|
||||||
{"RGB", "RGB;L", 24, packRGBL},
|
|
||||||
{"RGB", "R", 8, band0},
|
|
||||||
{"RGB", "G", 8, band1},
|
|
||||||
{"RGB", "B", 8, band2},
|
|
||||||
|
|
||||||
/* true colour w. alpha */
|
|
||||||
{"RGBA", "RGBA", 32, copy4},
|
|
||||||
{"RGBA", "RGBA;L", 32, packRGBXL},
|
|
||||||
{"RGBA", "RGB", 24, ImagingPackRGB},
|
|
||||||
{"RGBA", "BGR", 24, ImagingPackBGR},
|
|
||||||
{"RGBA", "BGRA", 32, ImagingPackBGRA},
|
|
||||||
{"RGBA", "ABGR", 32, ImagingPackABGR},
|
|
||||||
{"RGBA", "BGRa", 32, ImagingPackBGRa},
|
|
||||||
{"RGBA", "R", 8, band0},
|
|
||||||
{"RGBA", "G", 8, band1},
|
|
||||||
{"RGBA", "B", 8, band2},
|
|
||||||
{"RGBA", "A", 8, band3},
|
|
||||||
|
|
||||||
/* true colour w. alpha premultiplied */
|
|
||||||
{"RGBa", "RGBa", 32, copy4},
|
|
||||||
{"RGBa", "BGRa", 32, ImagingPackBGRA},
|
|
||||||
{"RGBa", "aBGR", 32, ImagingPackABGR},
|
|
||||||
|
|
||||||
/* true colour w. padding */
|
|
||||||
{"RGBX", "RGBX", 32, copy4},
|
|
||||||
{"RGBX", "RGBX;L", 32, packRGBXL},
|
|
||||||
{"RGBX", "RGB", 24, ImagingPackRGB},
|
|
||||||
{"RGBX", "BGR", 24, ImagingPackBGR},
|
|
||||||
{"RGBX", "BGRX", 32, ImagingPackBGRX},
|
|
||||||
{"RGBX", "XBGR", 32, ImagingPackXBGR},
|
|
||||||
{"RGBX", "R", 8, band0},
|
|
||||||
{"RGBX", "G", 8, band1},
|
|
||||||
{"RGBX", "B", 8, band2},
|
|
||||||
{"RGBX", "X", 8, band3},
|
|
||||||
|
|
||||||
/* colour separation */
|
|
||||||
{"CMYK", "CMYK", 32, copy4},
|
|
||||||
{"CMYK", "CMYK;I", 32, copy4I},
|
|
||||||
{"CMYK", "CMYK;L", 32, packRGBXL},
|
|
||||||
{"CMYK", "C", 8, band0},
|
|
||||||
{"CMYK", "M", 8, band1},
|
|
||||||
{"CMYK", "Y", 8, band2},
|
|
||||||
{"CMYK", "K", 8, band3},
|
|
||||||
|
|
||||||
/* video (YCbCr) */
|
|
||||||
{"YCbCr", "YCbCr", 24, ImagingPackRGB},
|
|
||||||
{"YCbCr", "YCbCr;L", 24, packRGBL},
|
|
||||||
{"YCbCr", "YCbCrX", 32, copy4},
|
|
||||||
{"YCbCr", "YCbCrK", 32, copy4},
|
|
||||||
{"YCbCr", "Y", 8, band0},
|
|
||||||
{"YCbCr", "Cb", 8, band1},
|
|
||||||
{"YCbCr", "Cr", 8, band2},
|
|
||||||
|
|
||||||
/* LAB Color */
|
|
||||||
{"LAB", "LAB", 24, ImagingPackLAB},
|
|
||||||
{"LAB", "L", 8, band0},
|
|
||||||
{"LAB", "A", 8, band1},
|
|
||||||
{"LAB", "B", 8, band2},
|
|
||||||
|
|
||||||
/* HSV */
|
|
||||||
{"HSV", "HSV", 24, ImagingPackRGB},
|
|
||||||
{"HSV", "H", 8, band0},
|
|
||||||
{"HSV", "S", 8, band1},
|
|
||||||
{"HSV", "V", 8, band2},
|
|
||||||
|
|
||||||
/* integer */
|
|
||||||
{"I", "I", 32, copy4},
|
|
||||||
{"I", "I;16B", 16, packI16B},
|
|
||||||
{"I", "I;32S", 32, packI32S},
|
|
||||||
{"I", "I;32NS", 32, copy4},
|
|
||||||
|
|
||||||
/* floating point */
|
|
||||||
{"F", "F", 32, copy4},
|
|
||||||
{"F", "F;32F", 32, packI32S},
|
|
||||||
{"F", "F;32NF", 32, copy4},
|
|
||||||
|
|
||||||
/* storage modes */
|
|
||||||
{"I;16", "I;16", 16, copy2},
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
{"I;16", "I;16B", 16, packI16N_I16},
|
|
||||||
#else
|
|
||||||
{"I;16", "I;16B", 16, packI16N_I16B},
|
|
||||||
#endif
|
|
||||||
{"I;16B", "I;16B", 16, copy2},
|
|
||||||
{"I;16L", "I;16L", 16, copy2},
|
|
||||||
{"I;16N", "I;16N", 16, copy2},
|
|
||||||
{"I;16", "I;16N", 16, packI16N_I16}, // LibTiff native->image endian.
|
|
||||||
{"I;16L", "I;16N", 16, packI16N_I16},
|
|
||||||
{"I;16B", "I;16N", 16, packI16N_I16B},
|
|
||||||
{"BGR;15", "BGR;15", 16, copy2},
|
|
||||||
{"BGR;16", "BGR;16", 16, copy2},
|
|
||||||
{"BGR;24", "BGR;24", 24, copy3},
|
|
||||||
|
|
||||||
{NULL} /* sentinel */
|
|
||||||
};
|
|
||||||
|
|
||||||
ImagingShuffler
|
ImagingShuffler
|
||||||
ImagingFindPacker(const char *mode, const char *rawmode, int *bits_out) {
|
ImagingFindPacker(const Mode *mode, const RawMode *rawmode, int *bits_out) {
|
||||||
int i;
|
int i;
|
||||||
|
for (i = 0; packers[i].mode; i++) {
|
||||||
/* find a suitable pixel packer */
|
if (packers[i].mode == mode && packers[i].rawmode == rawmode) {
|
||||||
for (i = 0; packers[i].rawmode; i++) {
|
|
||||||
if (strcmp(packers[i].mode, mode) == 0 &&
|
|
||||||
strcmp(packers[i].rawmode, rawmode) == 0) {
|
|
||||||
if (bits_out) {
|
if (bits_out) {
|
||||||
*bits_out = packers[i].bits;
|
*bits_out = packers[i].bits;
|
||||||
}
|
}
|
||||||
|
@ -680,3 +544,151 @@ ImagingFindPacker(const char *mode, const char *rawmode, int *bits_out) {
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ImagingPackInit(void) {
|
||||||
|
const struct Packer temp[] = {
|
||||||
|
/* bilevel */
|
||||||
|
{IMAGING_MODE_1, IMAGING_RAWMODE_1, 1, pack1},
|
||||||
|
{IMAGING_MODE_1, IMAGING_RAWMODE_1_I, 1, pack1I},
|
||||||
|
{IMAGING_MODE_1, IMAGING_RAWMODE_1_R, 1, pack1R},
|
||||||
|
{IMAGING_MODE_1, IMAGING_RAWMODE_1_IR, 1, pack1IR},
|
||||||
|
{IMAGING_MODE_1, IMAGING_RAWMODE_L, 8, pack1L},
|
||||||
|
|
||||||
|
/* grayscale */
|
||||||
|
{IMAGING_MODE_L, IMAGING_RAWMODE_L, 8, copy1},
|
||||||
|
{IMAGING_MODE_L, IMAGING_RAWMODE_L_16, 16, packL16},
|
||||||
|
{IMAGING_MODE_L, IMAGING_RAWMODE_L_16B, 16, packL16B},
|
||||||
|
|
||||||
|
/* grayscale w. alpha */
|
||||||
|
{IMAGING_MODE_LA, IMAGING_RAWMODE_LA, 16, packLA},
|
||||||
|
{IMAGING_MODE_LA, IMAGING_RAWMODE_LA_L, 16, packLAL},
|
||||||
|
|
||||||
|
/* grayscale w. alpha premultiplied */
|
||||||
|
{IMAGING_MODE_La, IMAGING_RAWMODE_La, 16, packLA},
|
||||||
|
|
||||||
|
/* palette */
|
||||||
|
{IMAGING_MODE_P, IMAGING_RAWMODE_P_1, 1, pack1},
|
||||||
|
{IMAGING_MODE_P, IMAGING_RAWMODE_P_2, 2, packP2},
|
||||||
|
{IMAGING_MODE_P, IMAGING_RAWMODE_P_4, 4, packP4},
|
||||||
|
{IMAGING_MODE_P, IMAGING_RAWMODE_P, 8, copy1},
|
||||||
|
|
||||||
|
/* palette w. alpha */
|
||||||
|
{IMAGING_MODE_PA, IMAGING_RAWMODE_PA, 16, packLA},
|
||||||
|
{IMAGING_MODE_PA, IMAGING_RAWMODE_PA_L, 16, packLAL},
|
||||||
|
|
||||||
|
/* true colour */
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX, 32, copy4},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA, 32, copy4},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_XRGB, 32, ImagingPackXRGB},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_L, 24, packRGBL},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_R, 8, band0},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_G, 8, band1},
|
||||||
|
{IMAGING_MODE_RGB, IMAGING_RAWMODE_B, 8, band2},
|
||||||
|
|
||||||
|
/* true colour w. alpha */
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA, 32, copy4},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_L, 32, packRGBXL},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA, 32, ImagingPackBGRA},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_ABGR, 32, ImagingPackABGR},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRa},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_R, 8, band0},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_G, 8, band1},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_B, 8, band2},
|
||||||
|
{IMAGING_MODE_RGBA, IMAGING_RAWMODE_A, 8, band3},
|
||||||
|
|
||||||
|
/* true colour w. alpha premultiplied */
|
||||||
|
{IMAGING_MODE_RGBa, IMAGING_RAWMODE_RGBa, 32, copy4},
|
||||||
|
{IMAGING_MODE_RGBa, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRA},
|
||||||
|
{IMAGING_MODE_RGBa, IMAGING_RAWMODE_aBGR, 32, ImagingPackABGR},
|
||||||
|
|
||||||
|
/* true colour w. padding */
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX, 32, copy4},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_L, 32, packRGBXL},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_R, 8, band0},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_G, 8, band1},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_B, 8, band2},
|
||||||
|
{IMAGING_MODE_RGBX, IMAGING_RAWMODE_X, 8, band3},
|
||||||
|
|
||||||
|
/* colour separation */
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK, 32, copy4},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_I, 32, copy4I},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_L, 32, packRGBXL},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_C, 8, band0},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_M, 8, band1},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y, 8, band2},
|
||||||
|
{IMAGING_MODE_CMYK, IMAGING_RAWMODE_K, 8, band3},
|
||||||
|
|
||||||
|
/* video (YCbCr) */
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr, 24, ImagingPackRGB},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr_L, 24, packRGBL},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrX, 32, copy4},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrK, 32, copy4},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Y, 8, band0},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cb, 8, band1},
|
||||||
|
{IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cr, 8, band2},
|
||||||
|
|
||||||
|
/* LAB Color */
|
||||||
|
{IMAGING_MODE_LAB, IMAGING_RAWMODE_LAB, 24, ImagingPackLAB},
|
||||||
|
{IMAGING_MODE_LAB, IMAGING_RAWMODE_L, 8, band0},
|
||||||
|
{IMAGING_MODE_LAB, IMAGING_RAWMODE_A, 8, band1},
|
||||||
|
{IMAGING_MODE_LAB, IMAGING_RAWMODE_B, 8, band2},
|
||||||
|
|
||||||
|
/* HSV */
|
||||||
|
{IMAGING_MODE_HSV, IMAGING_RAWMODE_HSV, 24, ImagingPackRGB},
|
||||||
|
{IMAGING_MODE_HSV, IMAGING_RAWMODE_H, 8, band0},
|
||||||
|
{IMAGING_MODE_HSV, IMAGING_RAWMODE_S, 8, band1},
|
||||||
|
{IMAGING_MODE_HSV, IMAGING_RAWMODE_V, 8, band2},
|
||||||
|
|
||||||
|
/* integer */
|
||||||
|
{IMAGING_MODE_I, IMAGING_RAWMODE_I, 32, copy4},
|
||||||
|
{IMAGING_MODE_I, IMAGING_RAWMODE_I_16B, 16, packI16B},
|
||||||
|
{IMAGING_MODE_I, IMAGING_RAWMODE_I_32S, 32, packI32S},
|
||||||
|
{IMAGING_MODE_I, IMAGING_RAWMODE_I_32NS, 32, copy4},
|
||||||
|
|
||||||
|
/* floating point */
|
||||||
|
{IMAGING_MODE_F, IMAGING_RAWMODE_F, 32, copy4},
|
||||||
|
{IMAGING_MODE_F, IMAGING_RAWMODE_F_32F, 32, packI32S},
|
||||||
|
{IMAGING_MODE_F, IMAGING_RAWMODE_F_32NF, 32, copy4},
|
||||||
|
|
||||||
|
/* storage modes */
|
||||||
|
{IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16, 16, copy2},
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
{IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16},
|
||||||
|
#else
|
||||||
|
{IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16B},
|
||||||
|
#endif
|
||||||
|
{IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16B, 16, copy2},
|
||||||
|
{IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16L, 16, copy2},
|
||||||
|
{IMAGING_MODE_I_16N, IMAGING_RAWMODE_I_16N, 16, copy2},
|
||||||
|
{IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16N, 16, packI16N_I16}, // LibTiff native->image endian.
|
||||||
|
{IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16N, 16, packI16N_I16},
|
||||||
|
{IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16N, 16, packI16N_I16B},
|
||||||
|
{IMAGING_MODE_BGR_15, IMAGING_RAWMODE_BGR_15, 16, copy2},
|
||||||
|
{IMAGING_MODE_BGR_16, IMAGING_RAWMODE_BGR_16, 16, copy2},
|
||||||
|
{IMAGING_MODE_BGR_24, IMAGING_RAWMODE_BGR_24, 24, copy3},
|
||||||
|
|
||||||
|
{NULL} /* sentinel */
|
||||||
|
};
|
||||||
|
packers = malloc(sizeof(temp));
|
||||||
|
if (packers == NULL) {
|
||||||
|
fprintf(stderr, "PackInit: failed to allocate memory for packers table\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
memcpy(packers, temp, sizeof(temp));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ImagingPackFree(void) {
|
||||||
|
free(packers);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user