90 lines
3.3 KiB
C
90 lines
3.3 KiB
C
![]() |
#ifndef __FT_LCD_FILTER_H__
|
||
|
#define __FT_LCD_FILTER_H__
|
||
|
|
||
|
#include <ft2build.h>
|
||
|
#include FT_FREETYPE_H
|
||
|
|
||
|
FT_BEGIN_HEADER
|
||
|
|
||
|
/**
|
||
|
* @func: FT_Library_SetLcdFilter
|
||
|
*
|
||
|
* @description:
|
||
|
* this function is used to apply color filtering to LCD decimated
|
||
|
* bitmaps, like the ones used when calling @FT_Render_Glyph with
|
||
|
* @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
|
||
|
*
|
||
|
* @input:
|
||
|
* library :: handle to target library instance
|
||
|
*
|
||
|
* filter_weights :: a pointer to an array of 5 bytes corresponding
|
||
|
* to the weights of a 5-tap FIR filter. Each
|
||
|
* weight must be positive, and their sum should
|
||
|
* be at least 256 to avoid loss of darkness
|
||
|
* in the rendered glyphs. The sum can be greater
|
||
|
* than 256 to darken the glyphs (el-cheapo gamma)
|
||
|
*
|
||
|
* you can use @FT_LCD_FILTER_NONE here to disable
|
||
|
* this feature, or @FT_LCD_FILTER_DEFAULT to use
|
||
|
* a default filter that should work well on most
|
||
|
* LCD screens.
|
||
|
*
|
||
|
* @return:
|
||
|
* error code. 0 means success
|
||
|
*
|
||
|
* @note:
|
||
|
* this feature is always disabled by default. Clients must make an
|
||
|
* explicit call to this function with a 'filter_weights' value other
|
||
|
* than @FT_LCD_FILTER_NONE in order to enable it.
|
||
|
*
|
||
|
* due to *PATENTS* covering subpixel rendering, this function will
|
||
|
* not do anything except return @FT_Err_Unimplemented_Feature if the
|
||
|
* configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
|
||
|
* defined in your build of the library, which should correspond
|
||
|
* to all default builds of the library
|
||
|
*
|
||
|
* the filter affects glyph bitmaps rendered through
|
||
|
* @FT_Render_Glyph, @FT_Glyph_Get_Bitmap, @FT_Load_Glyph and
|
||
|
* @FT_Load_Char.
|
||
|
*
|
||
|
* It does *not* affect the output of @FT_Outline_Render
|
||
|
* and @FT_Outline_Get_Bitmap.
|
||
|
*
|
||
|
* if this feature is activated, the dimensions of LCD glyph bitmaps
|
||
|
* will be either larger or taller than the dimensions of the corresponding
|
||
|
* outline with regards to the pixel grid. For example, for @FT_RENDER_MODE_LCD,
|
||
|
* the filter adds up to 3 pixels to the left, and up to 3 pixels to the right.
|
||
|
*
|
||
|
* the bitmap offset values are adjusted correctly, so clients shouldn't need
|
||
|
* to modify thei layout / glyph positioning code when enabling the filter.
|
||
|
*/
|
||
|
FT_EXPORT( FT_Error )
|
||
|
FT_Library_SetLcdFilter( FT_Library library,
|
||
|
const FT_Byte* filter_weights );
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @enum: FT_LCD_FILTER_XXX
|
||
|
*
|
||
|
* @desc: a list of constants correspond to useful lcd filter settings to
|
||
|
* be used when calling @FT_Library_SetLcdFilter
|
||
|
*
|
||
|
* @values:
|
||
|
* FT_LCD_FILTER_NONE :: the value NULL is reserved to indicate that
|
||
|
* LCD color filtering should be disabled.
|
||
|
*
|
||
|
* FT_LCD_FILTER_DEFAULT ::
|
||
|
* this value is reserved to indicate a default FIR filter that
|
||
|
* should work well on most LCD screen. For the really curious,
|
||
|
* it corresponds to the array 0x10, 0x40, 0x70, 0x40, 0x10
|
||
|
*/
|
||
|
#define FT_LCD_FILTER_NONE ((const FT_Byte*)NULL )
|
||
|
|
||
|
#define FT_LCD_FILTER_DEFAULT ((const FT_Byte*)(void*)(ft_ptrdiff_t)1)
|
||
|
|
||
|
/* */
|
||
|
|
||
|
FT_END_HEADER
|
||
|
|
||
|
#endif /* __FT_LCD_FILTER_H__ */
|