Make sure we don't divide by zero in scale_region. Fixes bugs #4783 and

* app/paint_funcs.c:  Make sure we don't divide by zero in
 	scale_region.  Fixes bugs #4783 and #6907.
This commit is contained in:
jaycox 2000-03-18 02:44:35 +00:00
parent 383663c406
commit 6735a7b613
3 changed files with 45 additions and 30 deletions

View File

@ -1,3 +1,8 @@
2000-03-18 Jay Cox <jaycox@earthlink.net>
* app/paint_funcs.c: Make sure we don't divide by zero in
scale_region. Fixes bugs #4783 and #6907.
2000-03-17 Birger Langkjer <birger.langkjer@image.dk>
* plug-ins/MapObject/mapobject_ui.c:565: fixed typo/spelling

View File

@ -4181,26 +4181,31 @@ scale_region (PixelRegion *srcPR,
guchar *d = dest;
for (x = 0; x < width; x++)
{
inv_alpha = 255.0 / p[alpha];
for (b = 0; b < alpha; b++)
if (p[alpha] > 0.001)
{
result = RINT(inv_alpha * p[b]);
if (result < 0)
d[b] = 0;
else if (result > 255)
d[b] = 255;
inv_alpha = 255.0 / p[alpha];
for (b = 0; b < alpha; b++)
{
result = RINT(inv_alpha * p[b]);
if (result < 0)
d[b] = 0;
else if (result > 255)
d[b] = 255;
else
d[b] = result;
}
result = RINT(p[alpha]);
if (result > 255)
d[alpha] = 255;
else
d[b] = result;
d[alpha] = result;
}
result = RINT(p[alpha]);
if (result < 0)
d[alpha] = 0;
else if (result > 255)
d[alpha] = 255;
else
d[alpha] = result;
else /* alpha <= 0 */
for (b = 0; b <= alpha; b++)
d[b] = 0;
d += bytes;
p += bytes;
}
}
else

View File

@ -4181,26 +4181,31 @@ scale_region (PixelRegion *srcPR,
guchar *d = dest;
for (x = 0; x < width; x++)
{
inv_alpha = 255.0 / p[alpha];
for (b = 0; b < alpha; b++)
if (p[alpha] > 0.001)
{
result = RINT(inv_alpha * p[b]);
if (result < 0)
d[b] = 0;
else if (result > 255)
d[b] = 255;
inv_alpha = 255.0 / p[alpha];
for (b = 0; b < alpha; b++)
{
result = RINT(inv_alpha * p[b]);
if (result < 0)
d[b] = 0;
else if (result > 255)
d[b] = 255;
else
d[b] = result;
}
result = RINT(p[alpha]);
if (result > 255)
d[alpha] = 255;
else
d[b] = result;
d[alpha] = result;
}
result = RINT(p[alpha]);
if (result < 0)
d[alpha] = 0;
else if (result > 255)
d[alpha] = 255;
else
d[alpha] = result;
else /* alpha <= 0 */
for (b = 0; b <= alpha; b++)
d[b] = 0;
d += bytes;
p += bytes;
}
}
else