From e0689d3c2443810c216c9b7517f90e9b47160ae5 Mon Sep 17 00:00:00 2001 From: raster Date: Wed, 1 Dec 2010 09:46:26 +0000 Subject: [PATCH] fix smooth scaler to not round down incorrectly. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@55114 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/engines/common/evas_scale_smooth_scaler_downx.c | 15 ++++++++++++--- .../engines/common/evas_scale_smooth_scaler_downx_downy.c | 15 ++++++++++++--- src/lib/engines/common/evas_scale_smooth_scaler_downy.c | 15 ++++++++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downx.c b/src/lib/engines/common/evas_scale_smooth_scaler_downx.c index f413b22..466135f 100644 --- a/src/lib/engines/common/evas_scale_smooth_scaler_downx.c +++ b/src/lib/engines/common/evas_scale_smooth_scaler_downx.c @@ -82,7 +82,10 @@ g += ((gg - g) * yap) >> 8; b += ((bb - b) * yap) >> 8; } - *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(((a + (1 << 3)) >> 4), + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } @@ -159,7 +162,10 @@ g += ((gg - g) * yap) >> 8; b += ((bb - b) * yap) >> 8; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } } @@ -229,7 +235,10 @@ g += ((gg - g) * yap) >> 8; b += ((bb - b) * yap) >> 8; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c b/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c index f830187..bfe47d7 100644 --- a/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c +++ b/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c @@ -131,7 +131,10 @@ g += (gx * j) >> 14; b += (bx * j) >> 14; } - *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5); + *pbuf++ = ARGB_JOIN(((a + (1 << 4)) >> 5), + ((r + (1 << 4)) >> 5), + ((g + (1 << 4)) >> 5), + ((b + (1 << 4)) >> 5)); xp++; xapp++; } @@ -247,7 +250,10 @@ g += (gx * j) >> 14; b += (bx * j) >> 14; } - *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 4)) >> 5), + ((g + (1 << 4)) >> 5), + ((b + (1 << 4)) >> 5)); xp++; xapp++; } } @@ -355,7 +361,10 @@ g += (gx * j) >> 14; b += (bx * j) >> 14; } - *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 4)) >> 5), + ((g + (1 << 4)) >> 5), + ((b + (1 << 4)) >> 5)); xp++; xapp++; } diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downy.c b/src/lib/engines/common/evas_scale_smooth_scaler_downy.c index 89cc883..a6cf34c 100644 --- a/src/lib/engines/common/evas_scale_smooth_scaler_downy.c +++ b/src/lib/engines/common/evas_scale_smooth_scaler_downy.c @@ -83,7 +83,10 @@ g += ((gg - g) * xap) >> 8; b += ((bb - b) * xap) >> 8; } - *pbuf++ = ARGB_JOIN(a >> 4, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(((a + (1 << 3)) >> 4), + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } @@ -161,7 +164,10 @@ g += ((gg - g) * xap) >> 8; b += ((bb - b) * xap) >> 8; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } } @@ -231,7 +237,10 @@ g += ((gg - g) * xap) >> 8; b += ((bb - b) * xap) >> 8; } - *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4); + *pbuf++ = ARGB_JOIN(0xff, + ((r + (1 << 3)) >> 4), + ((g + (1 << 3)) >> 4), + ((b + (1 << 3)) >> 4)); xp++; xapp++; } -- 2.7.4