parent
9b15ea341c
commit
2c002e13a7
8 changed files with 268 additions and 188 deletions
@ -1,89 +1,125 @@ |
||||
/***************************************************************************/ |
||||
/* */ |
||||
/* ftlcdfil.h */ |
||||
/* */ |
||||
/* FreeType API for color filtering of subpixel bitmap glyphs */ |
||||
/* (specification). */ |
||||
/* */ |
||||
/* Copyright 2006 by */ |
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
||||
/* */ |
||||
/* This file is part of the FreeType project, and may only be used, */ |
||||
/* modified, and distributed under the terms of the FreeType project */ |
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
||||
/* this file you indicate that you have read the license and */ |
||||
/* understand and accept it fully. */ |
||||
/* */ |
||||
/***************************************************************************/ |
||||
|
||||
|
||||
#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. |
||||
*/ |
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @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 :: |
||||
* A handle to the 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: |
||||
* FreeType 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 doesn't |
||||
* do anything except returning @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 are |
||||
* 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 their layout and 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_Library_SetLcdFilter( FT_Library library, |
||||
const FT_Byte* filter_weights ); |
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* |
||||
* @enum: |
||||
* FT_LCD_FILTER_XXX |
||||
* |
||||
* @description: |
||||
* A list of constants which correspond to useful lcd filter settings |
||||
* for the @FT_Library_SetLcdFilter function. |
||||
* |
||||
* @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. 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__ */ |
||||
|
||||
|
||||
/* END */ |
||||
|
Loading…
Reference in new issue