[Pixman] [PATCH 1/2] test/utils.c: Clip values to the [0, 255] interval

Søren Sandmann sandmann at cs.au.dk
Wed Apr 4 22:03:49 PDT 2012


From: Søren Sandmann Pedersen <ssp at redhat.com>

Unpremultiplying a superluminescent pixel can result in values greater
than 255.
---
 test/utils.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/test/utils.c b/test/utils.c
index cc0365a..c1bf6dc 100644
--- a/test/utils.c
+++ b/test/utils.c
@@ -358,9 +358,16 @@ a8r8g8b8_to_rgba_np (uint32_t *dst, uint32_t *src, int n_pixels)
 
 	if (a != 0)
 	{
-	    r = (r * 255) / a;
-	    g = (g * 255) / a;
-	    b = (b * 255) / a;
+#define DIVIDE(c, a)							\
+	    do								\
+	    {								\
+		int t = ((c) * 255) / a;				\
+		(c) = t < 0? 0 : t > 255? 255 : t;			\
+	    } while (0)
+
+	    DIVIDE (r, a);
+	    DIVIDE (g, a);
+	    DIVIDE (b, a);
 	}
 
 	*dst8++ = r;
-- 
1.7.4



More information about the Pixman mailing list