Fix alpha blending
authorFRIGN <dev@frign.de>
Sun, 31 Jan 2016 10:05:00 +0000 (11:05 +0100)
committerMarkus Teich <markus.teich@stusta.mhn.de>
Fri, 5 Feb 2016 14:35:59 +0000 (15:35 +0100)
- "/ 257", because 255 * 257 = UINT16_MAX
- "/ 255", because that's the maximum possible RGB value

sent.c

diff --git a/sent.c b/sent.c
index cdc637f62f5312b05476683d7e684d664e0255bc..a3979427805a964e3a14a53a68da936e1894dae3 100644 (file)
--- a/sent.c
+++ b/sent.c
@@ -258,15 +258,15 @@ int ffread(Image *img)
                        nbytes += count;
                }
                for (x = 0; x < rowlen / 2; x += 4) {
-                       fg_r = ntohs(row[x + 0]) / 256;
-                       fg_g = ntohs(row[x + 1]) / 256;
-                       fg_b = ntohs(row[x + 2]) / 256;
-                       opac = ntohs(row[x + 3]) / 256;
+                       fg_r = ntohs(row[x + 0]) / 257;
+                       fg_g = ntohs(row[x + 1]) / 257;
+                       fg_b = ntohs(row[x + 2]) / 257;
+                       opac = ntohs(row[x + 3]) / 257;
                        /* blend opaque part of image data with window background color to
                         * emulate transparency */
-                       img->buf[off++] = (fg_r * opac + bg_r * (255 - opac)) / 256;
-                       img->buf[off++] = (fg_g * opac + bg_g * (255 - opac)) / 256;
-                       img->buf[off++] = (fg_b * opac + bg_b * (255 - opac)) / 256;
+                       img->buf[off++] = (fg_r * opac + bg_r * (255 - opac)) / 255;
+                       img->buf[off++] = (fg_g * opac + bg_g * (255 - opac)) / 255;
+                       img->buf[off++] = (fg_b * opac + bg_b * (255 - opac)) / 255;
                }
        }