mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-28 19:06:18 +03:00
naive implementation
This commit is contained in:
parent
91b08b7daa
commit
a2681a0690
|
@ -131,14 +131,14 @@ ImagingFillBand(Imaging imOut, int band, int color)
|
||||||
Imaging
|
Imaging
|
||||||
ImagingMerge(const char* mode, Imaging bands[4])
|
ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
{
|
{
|
||||||
int i;
|
int i, x, y;
|
||||||
int bandsCount = 0;
|
int bandsCount = 0;
|
||||||
Imaging imOut;
|
Imaging imOut;
|
||||||
Imaging firstBand;
|
Imaging firstBand;
|
||||||
|
|
||||||
firstBand = bands[0];
|
firstBand = bands[0];
|
||||||
if ( ! firstBand) {
|
if ( ! firstBand) {
|
||||||
return (Imaging) ImagingError_ValueError("At least one band required");
|
return (Imaging) ImagingError_ValueError("wrong number of bands");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 4; ++i) {
|
for (i = 0; i < 4; ++i) {
|
||||||
|
@ -164,5 +164,49 @@ ImagingMerge(const char* mode, Imaging bands[4])
|
||||||
return (Imaging) ImagingError_ValueError("wrong number of bands");
|
return (Imaging) ImagingError_ValueError("wrong number of bands");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (imOut->bands == 1)
|
||||||
|
return ImagingCopy2(imOut, firstBand);
|
||||||
|
|
||||||
|
if (imOut->bands == 2) {
|
||||||
|
for (y = 0; y < imOut->ysize; y++) {
|
||||||
|
UINT8* in0 = bands[0]->image8[y];
|
||||||
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
|
UINT8* out = (UINT8*) imOut->image[y];
|
||||||
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
|
out[0] = *in0;
|
||||||
|
out[3] = *in1;
|
||||||
|
out += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (imOut->bands == 3) {
|
||||||
|
for (y = 0; y < imOut->ysize; y++) {
|
||||||
|
UINT8* in0 = bands[0]->image8[y];
|
||||||
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
|
UINT8* in2 = bands[2]->image8[y];
|
||||||
|
UINT8* out = (UINT8*) imOut->image[y];
|
||||||
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
|
out[0] = *in0;
|
||||||
|
out[1] = *in1;
|
||||||
|
out[2] = *in2;
|
||||||
|
out += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (imOut->bands == 4) {
|
||||||
|
for (y = 0; y < imOut->ysize; y++) {
|
||||||
|
UINT8* in0 = bands[0]->image8[y];
|
||||||
|
UINT8* in1 = bands[1]->image8[y];
|
||||||
|
UINT8* in2 = bands[2]->image8[y];
|
||||||
|
UINT8* in3 = bands[3]->image8[y];
|
||||||
|
UINT8* out = (UINT8*) imOut->image[y];
|
||||||
|
for (x = 0; x < imOut->xsize; x++) {
|
||||||
|
out[0] = *in0;
|
||||||
|
out[1] = *in1;
|
||||||
|
out[2] = *in2;
|
||||||
|
out[3] = *in3;
|
||||||
|
out += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return imOut;
|
return imOut;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user