diff --git a/libImaging/Convert.c b/libImaging/Convert.c index f4253bda4..e811d9c18 100644 --- a/libImaging/Convert.c +++ b/libImaging/Convert.c @@ -536,12 +536,15 @@ rgb2cmyk(UINT8* out, const UINT8* in, int xsize) static void cmyk2rgb(UINT8* out, const UINT8* in, int xsize) { - int x; - for (x = 0; x < xsize; x++, in += 4) { - *out++ = CLIP(255 - (in[0] + in[3])); - *out++ = CLIP(255 - (in[1] + in[3])); - *out++ = CLIP(255 - (in[2] + in[3])); - *out++ = 255; + int x, nk, tmp; + for (x = 0; x < xsize; x++) { + nk = 255 - in[3]; + out[0] = CLIP(nk - MULDIV255(in[0], nk, tmp)); + out[1] = CLIP(nk - MULDIV255(in[1], nk, tmp)); + out[2] = CLIP(nk - MULDIV255(in[2], nk, tmp)); + out[3] = 255; + out += 4; + in += 4; } }