* include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor

documentation improvements.

* include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos.

* src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap
of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4.
If xstr is larger than 8 and bitmap is of pixel_mode
FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
This commit is contained in:
Werner Lemberg 2005-05-30 19:22:44 +00:00
parent 71d7628175
commit 38e82be157
4 changed files with 50 additions and 13 deletions

View File

@ -1,3 +1,15 @@
2005-05-30 Chia I Wu <b90201047@ntu.edu.tw>
* include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Minor
documentation improvements.
* include/freetype/ftoutln.h (FT_Outline_Embolden): Fix typos.
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Add support for bitmap
of pixel_mode FT_PIXEL_MODE_GRAY2 or FT_PIXEL_MODE_GRAY4.
If xstr is larger than 8 and bitmap is of pixel_mode
FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
2005-05-29 Chia I Wu <b90201047@ntu.edu.tw>
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Fix emboldening bitmap

View File

@ -97,7 +97,7 @@ FT_BEGIN_HEADER
/* FT_Bitmap_Embolden */
/* */
/* <Description> */
/* Emboldens a bitmap. The new bitmap will be about `xStrength' */
/* Embolden a bitmap. The new bitmap will be about `xStrength' */
/* pixels wider and `yStrength' pixels higher. The left and bottom */
/* borders are kept unchanged. */
/* */
@ -105,10 +105,10 @@ FT_BEGIN_HEADER
/* library :: A handle to a library object. */
/* */
/* xStrength :: How strong the glyph is emboldened horizontally. */
/* Expressed in 16.16 pixel format. */
/* Expressed in 26.6 pixel format. */
/* */
/* yStrength :: How strong the glyph is emboldened vertically. */
/* Expressed in 16.16 pixel format. */
/* Expressed in 26.6 pixel format. */
/* */
/* <InOut> */
/* bitmap :: A handle to the target bitmap. */
@ -118,12 +118,11 @@ FT_BEGIN_HEADER
/* */
/* <Note> */
/* The current implementation restricts `xStrength' to be less than */
/* or equal to 8. */
/* or equal to 8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. */
/* */
/* Don't embolden the bitmap owned by a @FT_GlyphSlot directly! Call */
/* @FT_Bitmap_Copy to get a copy and work on the copy instead. */
/* */
/* */
FT_EXPORT_DEF( FT_Error )
FT_Bitmap_Embolden( FT_Library library,
FT_Bitmap* bitmap,

View File

@ -319,7 +319,7 @@ FT_BEGIN_HEADER
/* */
/* <Input> */
/* strength :: How strong the glyph is emboldened. Expressed in */
/* 16.16 pixel format. */
/* 26.6 pixel format. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */

View File

@ -211,30 +211,56 @@
if ( !library )
return FT_Err_Invalid_Library_Handle;
if ( !bitmap )
if ( !bitmap || !bitmap->buffer )
return FT_Err_Invalid_Argument;
xstr = FT_PIX_ROUND( xStrength ) >> 6;
ystr = FT_PIX_ROUND( yStrength ) >> 6;
if ( xstr == 0 && ystr == 0 )
return FT_Err_Ok;
else if ( xstr < 0 || ystr < 0 )
return FT_Err_Invalid_Argument;
switch ( bitmap->pixel_mode )
{
case FT_PIXEL_MODE_GRAY2:
case FT_PIXEL_MODE_GRAY4:
return FT_Err_Invalid_Glyph_Format;
{
FT_Bitmap tmp;
FT_Int align;
if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY2 )
align = ( bitmap->width + xstr + 3 ) / 4;
else
align = ( bitmap->width + xstr + 1 ) / 2;
FT_Bitmap_New( &tmp );
error = FT_Bitmap_Convert( library, bitmap, &tmp, align );
if ( error )
return error;
FT_Bitmap_Done( library, bitmap );
*bitmap = tmp;
}
break;
case FT_PIXEL_MODE_MONO:
if ( xstr > 8 )
xstr = 8;
break;
case FT_PIXEL_MODE_LCD:
xstr *= 3;
break;
case FT_PIXEL_MODE_LCD_V:
ystr *= 3;
break;
}
if ( xstr == 0 && ystr == 0 )
return FT_Err_Ok;
else if ( xstr < 0 || ystr < 0 || xstr > 8 )
return FT_Err_Invalid_Argument;
error = ft_bitmap_assure_buffer( library->memory, bitmap, xstr, ystr );
if ( error )
return error;