[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