diff --git a/src/PixelArray.cc b/src/PixelArray.cc index 1f9ad7a..1200431 100644 --- a/src/PixelArray.cc +++ b/src/PixelArray.cc @@ -94,12 +94,17 @@ PixelArray::PixelArray(Canvas *canvas, int sx, int sy, int width, int height): int bx = x * 4; uint32_t *pixel = row + x; - // premultiplied + // ARGB uint8_t a = *pixel >> 24; + uint8_t r = *pixel >> 16; + uint8_t g = *pixel >> 8; + uint8_t b = *pixel; + + // undo premultiplication dst[bx + 3] = a; - dst[bx + 0] = (*pixel >> 16) * 255 / a; - dst[bx + 1] = (*pixel >> 8) * 255 / a; - dst[bx + 2] = *pixel * 255 / a; + dst[bx + 0] = r * 255 / a; + dst[bx + 1] = g * 255 / a; + dst[bx + 2] = b * 255 / a; } dst += s; }