Tweak LCD filtering.
* src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy): Choose direction from bitmap's pixel_mode. * include/freetype/internal/ftobjs.c (FT_Bitmap_LcdFilterFunc): Updated. * src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
This commit is contained in:
parent
65e4925af4
commit
65f9516bc7
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2019-05-02 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
|
Tweak LCD filtering.
|
||||||
|
|
||||||
|
* src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
|
||||||
|
Choose direction from bitmap's pixel_mode.
|
||||||
|
* include/freetype/internal/ftobjs.c (FT_Bitmap_LcdFilterFunc):
|
||||||
|
Updated.
|
||||||
|
* src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
|
||||||
|
|
||||||
2019-05-02 Werner Lemberg <wl@gnu.org>
|
2019-05-02 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
* vms_make.com: Updated (#56253).
|
* vms_make.com: Updated (#56253).
|
||||||
|
|
|
@ -278,14 +278,12 @@ FT_BEGIN_HEADER
|
||||||
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
|
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
|
||||||
|
|
||||||
typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
|
typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
|
||||||
FT_Render_Mode render_mode,
|
|
||||||
FT_Byte* weights );
|
FT_Byte* weights );
|
||||||
|
|
||||||
|
|
||||||
/* This is the default LCD filter, an in-place, 5-tap FIR filter. */
|
/* This is the default LCD filter, an in-place, 5-tap FIR filter. */
|
||||||
FT_BASE( void )
|
FT_BASE( void )
|
||||||
ft_lcd_filter_fir( FT_Bitmap* bitmap,
|
ft_lcd_filter_fir( FT_Bitmap* bitmap,
|
||||||
FT_Render_Mode mode,
|
|
||||||
FT_LcdFiveTapFilter weights );
|
FT_LcdFiveTapFilter weights );
|
||||||
|
|
||||||
#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
|
#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
|
||||||
|
|
|
@ -77,13 +77,13 @@
|
||||||
/* FIR filter used by the default and light filters */
|
/* FIR filter used by the default and light filters */
|
||||||
FT_BASE_DEF( void )
|
FT_BASE_DEF( void )
|
||||||
ft_lcd_filter_fir( FT_Bitmap* bitmap,
|
ft_lcd_filter_fir( FT_Bitmap* bitmap,
|
||||||
FT_Render_Mode mode,
|
|
||||||
FT_LcdFiveTapFilter weights )
|
FT_LcdFiveTapFilter weights )
|
||||||
{
|
{
|
||||||
FT_UInt width = (FT_UInt)bitmap->width;
|
FT_UInt width = (FT_UInt)bitmap->width;
|
||||||
FT_UInt height = (FT_UInt)bitmap->rows;
|
FT_UInt height = (FT_UInt)bitmap->rows;
|
||||||
FT_Int pitch = bitmap->pitch;
|
FT_Int pitch = bitmap->pitch;
|
||||||
FT_Byte* origin = bitmap->buffer;
|
FT_Byte* origin = bitmap->buffer;
|
||||||
|
FT_Byte mode = bitmap->pixel_mode;
|
||||||
|
|
||||||
|
|
||||||
/* take care of bitmap flow */
|
/* take care of bitmap flow */
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
origin += pitch * (FT_Int)( height - 1 );
|
origin += pitch * (FT_Int)( height - 1 );
|
||||||
|
|
||||||
/* horizontal in-place FIR filter */
|
/* horizontal in-place FIR filter */
|
||||||
if ( mode == FT_RENDER_MODE_LCD && width >= 2 )
|
if ( mode == FT_PIXEL_MODE_LCD && width >= 2 )
|
||||||
{
|
{
|
||||||
FT_Byte* line = origin;
|
FT_Byte* line = origin;
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vertical in-place FIR filter */
|
/* vertical in-place FIR filter */
|
||||||
else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 )
|
else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 2 )
|
||||||
{
|
{
|
||||||
FT_Byte* column = origin;
|
FT_Byte* column = origin;
|
||||||
|
|
||||||
|
@ -183,13 +183,13 @@
|
||||||
/* intra-pixel filter used by the legacy filter */
|
/* intra-pixel filter used by the legacy filter */
|
||||||
static void
|
static void
|
||||||
_ft_lcd_filter_legacy( FT_Bitmap* bitmap,
|
_ft_lcd_filter_legacy( FT_Bitmap* bitmap,
|
||||||
FT_Render_Mode mode,
|
|
||||||
FT_Byte* weights )
|
FT_Byte* weights )
|
||||||
{
|
{
|
||||||
FT_UInt width = (FT_UInt)bitmap->width;
|
FT_UInt width = (FT_UInt)bitmap->width;
|
||||||
FT_UInt height = (FT_UInt)bitmap->rows;
|
FT_UInt height = (FT_UInt)bitmap->rows;
|
||||||
FT_Int pitch = bitmap->pitch;
|
FT_Int pitch = bitmap->pitch;
|
||||||
FT_Byte* origin = bitmap->buffer;
|
FT_Byte* origin = bitmap->buffer;
|
||||||
|
FT_Byte mode = bitmap->pixel_mode;
|
||||||
|
|
||||||
static const unsigned int filters[3][3] =
|
static const unsigned int filters[3][3] =
|
||||||
{
|
{
|
||||||
|
@ -206,7 +206,7 @@
|
||||||
origin += pitch * (FT_Int)( height - 1 );
|
origin += pitch * (FT_Int)( height - 1 );
|
||||||
|
|
||||||
/* horizontal in-place intra-pixel filter */
|
/* horizontal in-place intra-pixel filter */
|
||||||
if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
|
if ( mode == FT_PIXEL_MODE_LCD && width >= 3 )
|
||||||
{
|
{
|
||||||
FT_Byte* line = origin;
|
FT_Byte* line = origin;
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 )
|
else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 3 )
|
||||||
{
|
{
|
||||||
FT_Byte* column = origin;
|
FT_Byte* column = origin;
|
||||||
|
|
||||||
|
|
|
@ -243,7 +243,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( lcd_filter_func )
|
if ( lcd_filter_func )
|
||||||
lcd_filter_func( bitmap, mode, lcd_weights );
|
lcd_filter_func( bitmap, lcd_weights );
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
|
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
|
||||||
|
|
Loading…
Reference in New Issue