#include #include #include #include #include #include FT_FREETYPE_H using namespace std; int main() { FT_Library library; FT_Face face; Display *display; int error; int glyph_index; GC gc; XImage *ximage; error = FT_Init_FreeType(&library); if(error){ cout << "error 1\n"; exit(1); } error = FT_New_Face(library, "/usr/share/fonts/TTF/comic.ttf",0,&face); if(error==FT_Err_Unknown_File_Format){ cout << "error 2\n"; exit(1); }else if (error){ cout << "error 3\n"; exit(1); } error = FT_Set_Pixel_Sizes(face,0,16); if(error){ cout << "error 4\n"; exit(1); } glyph_index = FT_Get_Char_Index(face,0x00028); if(glyph_index==0){ cout << "error 5\n"; exit(1); } error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if(error){ cout << "error 6\n"; exit(1); } error= FT_Render_Glyph(face->glyph,FT_RENDER_MODE_NORMAL); if(error){ cout << "error 7\n"; exit(1); } cout << "rows=" << face->glyph->bitmap.rows << endl; cout << "width=" << face->glyph->bitmap.width << endl; cout << "pitch=" << face->glyph->bitmap.pitch << endl; cout << "pixel_mode=" << size_t(face->glyph->bitmap.pixel_mode) << endl; char Xdata[4*128]; int i; for(i=0;i<128;i++){ Xdata[4*i] = face->glyph->bitmap.buffer[i]; Xdata[4*i+1] = face->glyph->bitmap.buffer[i]; Xdata[4*i+2] = face->glyph->bitmap.buffer[i]; Xdata[4*i+3] = 0; } display = XOpenDisplay(0); Window XP = XCreateSimpleWindow(display,DefaultRootWindow(display),0,0,360,90,0,0,0); gc = XCreateGC(display,XP,0,0); ximage = XCreateImage(display,DefaultVisual(display,0),24,ZPixmap,0,&Xdata[0],8,16,32,8); XPutImage(display,XP,gc,ximage,0,0,0,0,8,16); XMapWindow(display,XP); XFlush(display); XFreeGC(display,gc); sleep(2); return 0; }