parent
3cc7d630bd
commit
826935a381
1 changed files with 89 additions and 0 deletions
@ -0,0 +1,89 @@ |
||||
#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__ */ |
Loading…
Reference in new issue