From 545d3ead677f87a10648e600e5e2771f8b4c5b76 Mon Sep 17 00:00:00 2001 From: Michal Maciola <71131832+mmaciola@users.noreply.github.com> Date: Fri, 5 Nov 2021 10:32:41 +0100 Subject: [PATCH] WASM: unpremultiplyBuffer fixes (#999) --- src/wasm/thorvgwasm.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/wasm/thorvgwasm.cpp b/src/wasm/thorvgwasm.cpp index 771c6c9d..51e9b8c4 100644 --- a/src/wasm/thorvgwasm.cpp +++ b/src/wasm/thorvgwasm.cpp @@ -225,16 +225,20 @@ private: for (uint32_t x = 0; x < mWidth; ++x) { uint8_t a = buffer[x] >> 24; if (a == 255) { - continue; + uint8_t b = (buffer[x] & 0xff); + uint8_t r = ((buffer[x] >> 16) & 0xff); + buffer[x] = (buffer[x] & 0xff00ff00) | (b << 16) | (r); + } else if (a == 0) { buffer[x] = 0x00ffffff; + } else { uint16_t b = ((buffer[x] << 8) & 0xff00) / a; uint16_t g = ((buffer[x]) & 0xff00) / a; uint16_t r = ((buffer[x] >> 8) & 0xff00) / a; - if (b > 0xff) r = 0xff; + if (b > 0xff) b = 0xff; if (g > 0xff) g = 0xff; - if (r > 0xff) b = 0xff; + if (r > 0xff) r = 0xff; buffer[x] = (a << 24) | (b << 16) | (g << 8) | (r); } }