On Mon, May 30, 2005 at 03:24:30PM +0800, Chia I Wu wrote:
> gray2 and gray4 are not supported now. I'll see if I can add support to them.
> If I can't, I'll submit a patch to update the documentation :)
Ok, this patch should fix the problem. Instead of supporting gray[24]
directly, convertion from gray[24] to gray8 is done before emboldening.
Changelog:
* include/freetype/ftbitmap.h (FT_Bitmap_Embolden): Fix typos.
Update documentaion a little.
* include/freetype/ftoutline.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.
When xstr is larger than 8 and bitmap is of pixel_mode
FT_PIXEL_MODE_MONO, set xstr to 8 instead of returning error.
--
Regards,
olv
=== include/freetype/ftbitmap.h
==================================================================
--- include/freetype/ftbitmap.h (/freetype2/trunk) (revision 931)
+++ include/freetype/ftbitmap.h (/freetype2/branches/embolden) (local)
@@ -97,7 +97,7 @@
/* 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 @@
/* 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,7 +118,7 @@
/* */
/* <Note> */
/* The current implementation restricts `xStrength' to be less than */
- /* or equal to 8. */
+ /* or equal to 8 when 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. */
=== include/freetype/ftoutln.h
==================================================================
--- include/freetype/ftoutln.h (/freetype2/trunk) (revision 931)
+++ include/freetype/ftoutln.h (/freetype2/branches/embolden) (local)
@@ -319,7 +319,7 @@
/* */
/* <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. */
=== src/base/ftbitmap.c
==================================================================
--- src/base/ftbitmap.c (/freetype2/trunk) (revision 931)
+++ src/base/ftbitmap.c (/freetype2/branches/embolden) (local)
@@ -211,17 +211,45 @@
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;
@@ -230,11 +258,6 @@
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;
Property changes on:
___________________________________________________________________
Name: svk:merge
+5f392c16-9bf0-0310-b16c-a65848a4e34f:/freetype2/trunk:926
_______________________________________________
Freetype-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/freetype-devel