WASM: unpremultiplyBuffer fixes (#999)
authorMichal Maciola <71131832+mmaciola@users.noreply.github.com>
Fri, 5 Nov 2021 09:32:41 +0000 (10:32 +0100)
committerJunsuChoi <jsuya.choi@samsung.com>
Mon, 8 Nov 2021 09:01:54 +0000 (18:01 +0900)
src/wasm/thorvgwasm.cpp

index 771c6c9debadd5f3c5f5162f09597636ecdc42fc..51e9b8c4a4705e617919db10471c1be4a4291256 100644 (file)
@@ -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);
                 }
             }