mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-02-04 13:40:54 +03:00
make things faster
This commit is contained in:
parent
a2681a0690
commit
b454f773bd
|
@ -22,6 +22,17 @@
|
||||||
#define CLIP(x) ((x) <= 0 ? 0 : (x) < 256 ? (x) : 255)
|
#define CLIP(x) ((x) <= 0 ? 0 : (x) < 256 ? (x) : 255)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
#define MAKE_UINT32(u0, u1, u2, u3) (u3 | (u2<<8) | (u1<<16) | (u0<<24))
|
||||||
|
#define MAKE_UINT32_3(u0, u1, u2) ((u2<<8) | (u1<<16) | (u0<<24))
|
||||||
|
#define MAKE_UINT32_2(u0, u3) (u3 | (u0<<24))
|
||||||
|
#else
|
||||||
|
#define MAKE_UINT32(u0, u1, u2, u3) (u0 | (u1<<8) | (u2<<16) | (u3<<24))
|
||||||
|
#define MAKE_UINT32_3(u0, u1, u2) (u0 | (u1<<8) | (u2<<16))
|
||||||
|
#define MAKE_UINT32_2(u0, u3) (u0 | (u3<<24))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
Imaging
|
Imaging
|
||||||
ImagingGetBand(Imaging imIn, int band)
|
ImagingGetBand(Imaging imIn, int band)
|
||||||
{
|
{
|
||||||
|
@ -145,7 +156,7 @@ ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
if ( ! bands[i]) {
|
if ( ! bands[i]) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (bands[i]->bands != 1 || bands[i]->type != IMAGING_TYPE_UINT8) {
|
if (bands[i]->bands != 1) {
|
||||||
return (Imaging) ImagingError_ModeError();
|
return (Imaging) ImagingError_ModeError();
|
||||||
}
|
}
|
||||||
if (bands[i]->xsize != firstBand->xsize
|
if (bands[i]->xsize != firstBand->xsize
|
||||||
|
@ -171,11 +182,9 @@ ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
for (y = 0; y < imOut->ysize; y++) {
|
for (y = 0; y < imOut->ysize; y++) {
|
||||||
UINT8* in0 = bands[0]->image8[y];
|
UINT8* in0 = bands[0]->image8[y];
|
||||||
UINT8* in1 = bands[1]->image8[y];
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
UINT8* out = (UINT8*) imOut->image[y];
|
UINT32* out = (UINT32*) imOut->image32[y];
|
||||||
for (x = 0; x < imOut->xsize; x++) {
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
out[0] = *in0;
|
out[x] = MAKE_UINT32_2(in0[x], in1[x]);
|
||||||
out[3] = *in1;
|
|
||||||
out += 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (imOut->bands == 3) {
|
} else if (imOut->bands == 3) {
|
||||||
|
@ -183,12 +192,9 @@ ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
UINT8* in0 = bands[0]->image8[y];
|
UINT8* in0 = bands[0]->image8[y];
|
||||||
UINT8* in1 = bands[1]->image8[y];
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
UINT8* in2 = bands[2]->image8[y];
|
UINT8* in2 = bands[2]->image8[y];
|
||||||
UINT8* out = (UINT8*) imOut->image[y];
|
UINT32* out = (UINT32*) imOut->image32[y];
|
||||||
for (x = 0; x < imOut->xsize; x++) {
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
out[0] = *in0;
|
out[x] = MAKE_UINT32_3(in0[x], in1[x], in2[x]);
|
||||||
out[1] = *in1;
|
|
||||||
out[2] = *in2;
|
|
||||||
out += 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (imOut->bands == 4) {
|
} else if (imOut->bands == 4) {
|
||||||
|
@ -197,13 +203,9 @@ ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
UINT8* in1 = bands[1]->image8[y];
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
UINT8* in2 = bands[2]->image8[y];
|
UINT8* in2 = bands[2]->image8[y];
|
||||||
UINT8* in3 = bands[3]->image8[y];
|
UINT8* in3 = bands[3]->image8[y];
|
||||||
UINT8* out = (UINT8*) imOut->image[y];
|
UINT32* out = (UINT32*) imOut->image32[y];
|
||||||
for (x = 0; x < imOut->xsize; x++) {
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
out[0] = *in0;
|
out[x] = MAKE_UINT32(in0[x], in1[x], in2[x], in3[x]);
|
||||||
out[1] = *in1;
|
|
||||||
out[2] = *in2;
|
|
||||||
out[3] = *in3;
|
|
||||||
out += 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user