From afa0050f32c12eda49a9f6539d16e50024a126cd Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 1 Dec 2010 09:46:26 +0000 Subject: [PATCH] fix smooth scaler to not round down incorrectly. SVN revision: 55114 --- .../common/evas_scale_smooth_scaler_downx.c | 15 ++++++++++++--- .../common/evas_scale_smooth_scaler_downx_downy.c | 15 ++++++++++++--- .../common/evas_scale_smooth_scaler_downy.c | 15 ++++++++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c index f413b227ab..466135fd5a 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c +++ b/legacy/evas/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/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c index f830187147..bfe47d71d2 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c +++ b/legacy/evas/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/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c b/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c index 89cc883f2f..a6cf34cb84 100644 --- a/legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c +++ b/legacy/evas/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++; }