app/base/tile-pyramid.c (tile_pyramid_write_quarter) corrected formula

2007-12-13  Sven Neumann  <sven@gimp.org>

	* app/base/tile-pyramid.c (tile_pyramid_write_quarter)
	* app/display/gimpdisplayshell-render.c
	(render_image_tile_fault_nearest): corrected formula used for
	pre-multiplying the alpha value.


svn path=/trunk/; revision=24353
This commit is contained in:
Sven Neumann
2007-12-13 19:00:00 +00:00
committed by Sven Neumann
parent aaa16d3b87
commit 1b4f87189d
3 changed files with 36 additions and 21 deletions

View File

@ -1,3 +1,10 @@
2007-12-13 Sven Neumann <sven@gimp.org>
* app/base/tile-pyramid.c (tile_pyramid_write_quarter)
* app/display/gimpdisplayshell-render.c
(render_image_tile_fault_nearest): corrected formula used for
pre-multiplying the alpha value.
2007-12-13 Sven Neumann <sven@gimp.org>
Speed up our display rendering code paths by keeping data with

View File

@ -505,10 +505,10 @@ tile_pyramid_write_quarter (Tile *dest,
break;
default:
dst[0] = ((src0[0] * src0[1] +
src1[0] * src1[1] +
src2[0] * src2[1] +
src3[0] * src3[1]) >> 10);
dst[0] = ((src0[0] * (src0[1] + 1) +
src1[0] * (src1[1] + 1) +
src2[0] * (src2[1] + 1) +
src3[0] * (src3[1] + 1)) >> 10);
dst[1] = (a + 2) >> 2;
break;
}
@ -557,19 +557,26 @@ tile_pyramid_write_quarter (Tile *dest,
break;
default:
dst[0] = ((src0[0] * src0[3] +
src1[0] * src1[3] +
src2[0] * src2[3] +
src3[0] * src3[3]) >> 10);
dst[1] = ((src0[1] * src0[3] +
src1[1] * src1[3] +
src2[1] * src2[3] +
src3[1] * src3[3]) >> 10);
dst[2] = ((src0[2] * src0[3] +
src1[2] * src1[3] +
src2[2] * src2[3] +
src3[2] * src3[3]) >> 10);
dst[3] = (a + 2) >> 2;
{
const guint a0 = src0[3] + 1;
const guint a1 = src1[3] + 1;
const guint a2 = src2[3] + 1;
const guint a3 = src3[3] + 1;
dst[0] = (src0[0] * a0 +
src1[0] * a1 +
src2[0] * a2 +
src3[0] * a3) >> 10;
dst[1] = (src0[1] * a0 +
src1[1] * a1 +
src2[1] * a2 +
src3[1] * a3) >> 10;
dst[2] = (src0[2] * a0 +
src1[2] * a1 +
src2[2] * a2 +
src3[2] * a3) >> 10;
dst[3] = (a + 2) >> 2;
}
break;
}

View File

@ -778,6 +778,7 @@ box_filter_premult (const guint left_weight,
}
}
/* fast paths */
static const guchar * render_image_tile_fault_one_row (RenderInfo *info);
static const guchar * render_image_tile_fault_nearest (RenderInfo *info);
@ -1594,9 +1595,9 @@ render_image_tile_fault_nearest (RenderInfo *info)
switch (bpp)
{
case 4:
d[0] = (s[0] * s[3]) >> 8;
d[1] = (s[1] * s[3]) >> 8;
d[2] = (s[2] * s[3]) >> 8;
d[0] = (s[0] * (s[3] + 1)) >> 8;
d[1] = (s[1] * (s[3] + 1)) >> 8;
d[2] = (s[2] * (s[3] + 1)) >> 8;
d[3] = s[3];
d += 4;
@ -1604,7 +1605,7 @@ render_image_tile_fault_nearest (RenderInfo *info)
break;
case 2:
d[0] = (s[0] * s[1]) >> 8;
d[0] = (s[0] * (s[1] + 1)) >> 8;
d[1] = s[1];
d += 2;