[ftsmooth] Improve rendering.
* src/smooth/ftsmooth.c (gray_render_conic): Since version 2.4.3, cubic deviations have been estimated _after_ UPSCALE, whereas conic ones have been evaluated _before_ UPSCALE, which produces inferior rendering results. Fix this. Partially undo change from 2010-10-15 by using ONE_PIXEL/4; this has been tested with demo images sent to the mailing list. See http://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html and later mails in this thread.
This commit is contained in:
parent
6a96bbe275
commit
6aee69096f
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
||||
2010-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||
|
||||
[ftsmooth] Improve rendering.
|
||||
|
||||
* src/smooth/ftsmooth.c (gray_render_conic): Since version 2.4.3,
|
||||
cubic deviations have been estimated _after_ UPSCALE, whereas
|
||||
conic ones have been evaluated _before_ UPSCALE, which produces
|
||||
inferior rendering results. Fix this.
|
||||
Partially undo change from 2010-10-15 by using ONE_PIXEL/4; this has
|
||||
been tested with demo images sent to the mailing list. See
|
||||
|
||||
http://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html
|
||||
|
||||
and later mails in this thread.
|
||||
|
||||
2010-10-28 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[ftraster] Minor fixes.
|
||||
|
@ -877,34 +877,7 @@ typedef ptrdiff_t FT_PtrDist;
|
||||
FT_Vector* arc;
|
||||
|
||||
|
||||
dx = DOWNSCALE( ras.x ) + to->x - ( control->x << 1 );
|
||||
if ( dx < 0 )
|
||||
dx = -dx;
|
||||
dy = DOWNSCALE( ras.y ) + to->y - ( control->y << 1 );
|
||||
if ( dy < 0 )
|
||||
dy = -dy;
|
||||
if ( dx < dy )
|
||||
dx = dy;
|
||||
|
||||
if ( dx <= ONE_PIXEL / 8 )
|
||||
{
|
||||
gray_render_line( RAS_VAR_ UPSCALE( to->x ), UPSCALE( to->y ) );
|
||||
return;
|
||||
}
|
||||
|
||||
level = 1;
|
||||
dx /= ONE_PIXEL / 8;
|
||||
while ( dx > 1 )
|
||||
{
|
||||
dx >>= 2;
|
||||
level++;
|
||||
}
|
||||
|
||||
arc = ras.bez_stack;
|
||||
levels = ras.lev_stack;
|
||||
top = 0;
|
||||
levels[0] = level;
|
||||
|
||||
arc = ras.bez_stack;
|
||||
arc[0].x = UPSCALE( to->x );
|
||||
arc[0].y = UPSCALE( to->y );
|
||||
arc[1].x = UPSCALE( control->x );
|
||||
@ -912,6 +885,28 @@ typedef ptrdiff_t FT_PtrDist;
|
||||
arc[2].x = ras.x;
|
||||
arc[2].y = ras.y;
|
||||
|
||||
dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x );
|
||||
dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y );
|
||||
if ( dx < dy )
|
||||
dx = dy;
|
||||
|
||||
if ( dx <= ONE_PIXEL / 4 )
|
||||
{
|
||||
gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
|
||||
return;
|
||||
}
|
||||
|
||||
level = 0;
|
||||
while ( dx > ONE_PIXEL / 4 )
|
||||
{
|
||||
dx >>= 2;
|
||||
level++;
|
||||
}
|
||||
|
||||
levels = ras.lev_stack;
|
||||
levels[0] = level;
|
||||
top = 0;
|
||||
|
||||
while ( top >= 0 )
|
||||
{
|
||||
level = levels[top];
|
||||
|
Loading…
Reference in New Issue
Block a user