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:

committed by
Sven Neumann

parent
aaa16d3b87
commit
1b4f87189d
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user