Werner LEMBERG wrote:
However, if the character is a space (ascii 32), then
FT_Glyph_To_Bitmap() fails with error=6 "invalid argument".

Is that normal? Even though there is no visible glyph, shouldn't it
give an all-zeros bitmap of the correct width?

Please provide a self-contained, complete example which I can compile
for testing.

libfreetype6-dev 2.2.1-2 on Debian-sid.
#include<stdlib.h>
#include<stdio.h>
#include<assert.h>

#include<freetype2/freetype/ftimage.h>
#include<freetype2/freetype/ftglyph.h>
#include<freetype2/freetype/freetype.h>

/*
INCLUDES = -I/usr/include/freetype2
LIBS = -lfreetype
*/
int
main(int argc, char *argv[])
{
    FT_Library ftlib;
    
    FT_Error error = FT_Init_FreeType(&ftlib);
    
    if(error) {
	printf("FT_init error.\n");
	exit(1);
    }

    char *fontname = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf";

    FT_Face face;
    
    error = FT_New_Face(ftlib, fontname, 0, &face);

    if(error == FT_Err_Unknown_File_Format) {
	printf("FT_face error.\n");
	exit(1);
    }

    error = FT_Set_Char_Size(face, 0, 20*64/*20pt*/, 74, 75);
     
    FT_ULong keysym = ' ';
    
    int glyph_index = FT_Get_Char_Index(face, keysym); /* retrieve kerning distance and move pen position */
    
    error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);

    FT_Glyph glyph;

    error = FT_Get_Glyph(face->glyph, &glyph);   // must be manually destroyed with FT_Done_Glyph(glyph)

    if(error) {
	printf("Error loading glyph.\n");
	exit(1);
    }
    
    assert(glyph->format != FT_GLYPH_FORMAT_BITMAP);
    
//  This fails if the character was a space: ascii 0x32
    error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_MONO, 0, 1);    // destroy old previous glyph
    
    if(error) {
        printf("Error getting glyph bitmap.\n");
	exit(1);
    }
    FT_Done_Glyph(glyph);
}

_______________________________________________
Freetype mailing list
Freetype@nongnu.org
http://lists.nongnu.org/mailman/listinfo/freetype

Reply via email to