Split correction into multiple pieces if no single weight is large enough

2003-07-18  Matthias Clasen  <maclas@gmx.de>

	* pixops/pixops.c (correct_total): Split correction into multiple pieces if no single weight is large
	enough to apply the unsplit correction.  (#117431, problem reported by Tomas Ögren)
This commit is contained in:
Matthias Clasen
2003-07-17 22:47:10 +00:00
committed by Matthias Clasen
parent e733ed3e72
commit a6a10ee028
2 changed files with 18 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2003-07-18 Matthias Clasen <maclas@gmx.de>
* pixops/pixops.c (correct_total): Split correction into multiple pieces if no single weight is large
enough to apply the unsplit correction. (#117431, problem reported by Tomas <20>gren)
2003-07-13 Matthias Clasen <maclas@gmx.de>
* gdk-pixbuf.h:

View File

@ -952,18 +952,21 @@ correct_total (int *weights,
double overall_alpha)
{
int correction = (int)(0.5 + 65536 * overall_alpha) - total;
int remaining, c, d, i;
if (correction != 0)
{
int i;
for (i = n_x * n_y - 1; i >= 0; i--)
{
if (*(weights + i) + correction >= 0)
{
*(weights + i) += correction;
break;
}
}
remaining = correction;
for (d = 1, c = correction; c != 0 && remaining != 0; d++, c = correction / d)
for (i = n_x * n_y - 1; i >= 0 && c != 0 && remaining != 0; i--)
if (*(weights + i) + c >= 0)
{
*(weights + i) += c;
remaining -= c;
if ((0 < remaining && remaining < c) ||
(0 > remaining && remaining > c))
c = remaining;
}
}
}