fix smooth scaler to not round down incorrectly.

SVN revision: 55114
This commit is contained in:
Carsten Haitzler 2010-12-01 09:46:26 +00:00
parent 88ca4717d1
commit afa0050f32
3 changed files with 36 additions and 9 deletions

View File

@ -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++;
}

View File

@ -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++;
}

View File

@ -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++;
}