#include <ft2build.h>
#include <stdexcept>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include <windows.h>
#include <string.h>
class FT2_Obj{
FT_Library library;
int size ;
FT_Face face;
public:
void Init(const char * fname, unsigned int h);
void Free();
void DrawAUnicode(wchar_t ch);
};
void FT2_Obj::Init(const char * fname, unsigned int h){
this->size=h;
if (FT_Init_FreeType( &library ))
throw std::runtime_error("FT_Init_FreeType failed");
if (FT_New_Face( library, fname, 0, &face ))
throw std::runtime_error("FT_New_Face failed (there is probably a problem with your font file)");
FT_Set_Char_Size( face,h<< 6, h << 6, 72, 72);
FT_Matrix matrix; /* transformation matrix */
FT_UInt glyph_index;
FT_Vector pen;
}
void FT2_Obj::DrawAUnicode(wchar_t ch){
if(FT_Load_Glyph( face, FT_Get_Char_Index( face, ch ), FT_LOAD_DEFAULT ))
throw std::runtime_error("FT_Load_Glyph failed");
FT_Glyph glyph;
if(FT_Get_Glyph( face->glyph, &glyph ))
throw std::runtime_error("FT_Get_Glyph failed");
FT_Render_Glyph( face->glyph, FT_RENDER_MODE_MONO );
FT_Glyph_To_Bitmap( &glyph, ft_render_mode_normal, 0, 1 );
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
FT_Bitmap& bitmap=bitmap_glyph->bitmap;
int width = bitmap.width;
int height = bitmap.rows;
wchar_t wstr[256];
wsprintfW(wstr,L"World :%c , width :%d height : %d\n",ch,width , height);
OutputDebugStringW(wstr);
for(int j=0; j < height ; j++){
for(int i=0; i < width; i++){
char tmp[5]={0};
sprintf(tmp,"%2x",bitmap.buffer[i+ bitmap.width*j]);
OutputDebugString(tmp);
}
OutputDebugString("\n");
}
OutputDebugString("\n");
}
void FT2_Obj::Free(){
FT_Done_Face(face);
FT_Done_FreeType(library);
}
int main(int argc, char* argv[]){
FT2_Obj text;
text.Init("msjh.ttc",6);
text.DrawAUnicode(L'王');
text.Free();
return 0;
}
I2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiNpbmNsdWRlIDxzdGRleGNlcHQ+CiNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKI2luY2x1ZGUgRlRfR0xZUEhfSAojaW5jbHVkZSA8d2luZG93cy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpjbGFzcyBGVDJfT2JqewogICAgRlRfTGlicmFyeSBsaWJyYXJ5OwogICAgaW50IHNpemUgOwogICAgRlRfRmFjZSBmYWNlOwpwdWJsaWM6CiAgICB2b2lkIEluaXQoY29uc3QgY2hhciAqIGZuYW1lLCB1bnNpZ25lZCBpbnQgaCk7CiAgICB2b2lkIEZyZWUoKTsKICAgIHZvaWQgRHJhd0FVbmljb2RlKHdjaGFyX3QgY2gpOwp9Owp2b2lkIEZUMl9PYmo6OkluaXQoY29uc3QgY2hhciAqIGZuYW1lLCB1bnNpZ25lZCBpbnQgaCl7CiAgICB0aGlzLT5zaXplPWg7CiAgICBpZiAoRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKSkgCiAgICAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJGVF9Jbml0X0ZyZWVUeXBlIGZhaWxlZCIpOwogICAgaWYgKEZUX05ld19GYWNlKCBsaWJyYXJ5LCBmbmFtZSwgMCwgJmZhY2UgKSkgCiAgICAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJGVF9OZXdfRmFjZSBmYWlsZWQgKHRoZXJlIGlzIHByb2JhYmx5IGEgcHJvYmxlbSB3aXRoIHlvdXIgZm9udCBmaWxlKSIpOwogICAgRlRfU2V0X0NoYXJfU2l6ZSggZmFjZSxoPDwgNiwgaCA8PCA2LCA3MiwgNzIpOwogICAgRlRfTWF0cml4ICAgICBtYXRyaXg7ICAgICAgICAgICAgICAvKiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggKi8KICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXg7CiAgICBGVF9WZWN0b3IgICAgIHBlbjsKCn0Kdm9pZCBGVDJfT2JqOjpEcmF3QVVuaWNvZGUod2NoYXJfdCBjaCl7CiAgICBpZihGVF9Mb2FkX0dseXBoKCBmYWNlLCBGVF9HZXRfQ2hhcl9JbmRleCggZmFjZSwgY2ggKSwgRlRfTE9BRF9ERUZBVUxUICkpCiAgICAgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJGVF9Mb2FkX0dseXBoIGZhaWxlZCIpOwogICAgRlRfR2x5cGggZ2x5cGg7CiAgICBpZihGVF9HZXRfR2x5cGgoIGZhY2UtPmdseXBoLCAmZ2x5cGggKSkKICAgICAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIkZUX0dldF9HbHlwaCBmYWlsZWQiKTsKICAgIEZUX1JlbmRlcl9HbHlwaCggZmFjZS0+Z2x5cGgsICAgRlRfUkVOREVSX01PREVfTU9OTyAgKTsgCiAgICBGVF9HbHlwaF9Ub19CaXRtYXAoICZnbHlwaCwgZnRfcmVuZGVyX21vZGVfbm9ybWFsLCAwLCAxICk7CiAgICBGVF9CaXRtYXBHbHlwaCBiaXRtYXBfZ2x5cGggPSAoRlRfQml0bWFwR2x5cGgpZ2x5cGg7CiAgICBGVF9CaXRtYXAmIGJpdG1hcD1iaXRtYXBfZ2x5cGgtPmJpdG1hcDsKICAgIGludCB3aWR0aCA9ICBiaXRtYXAud2lkdGg7CiAgICBpbnQgaGVpZ2h0ID0gIGJpdG1hcC5yb3dzOwogICAgd2NoYXJfdCB3c3RyWzI1Nl07CiAgICB3c3ByaW50Zlcod3N0cixMIldvcmxkIDolYyAsIHdpZHRoIDolZCBoZWlnaHQgOiAlZFxuIixjaCx3aWR0aCAsIGhlaWdodCk7CiAgICBPdXRwdXREZWJ1Z1N0cmluZ1cod3N0cik7CiAgICBmb3IoaW50IGo9MDsgaiAgPCBoZWlnaHQgOyBqKyspewogICAgICAgIGZvcihpbnQgaT0wOyBpIDwgd2lkdGg7IGkrKyl7CiAgICAgICAgICAgIGNoYXIgdG1wWzVdPXswfTsKICAgICAgICAgICAgc3ByaW50Zih0bXAsIiUyeCIsYml0bWFwLmJ1ZmZlcltpKyBiaXRtYXAud2lkdGgqal0pOwogICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyh0bXApOwogICAgICAgIH0KICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZygiXG4iKTsKICAgIH0KICAgIE91dHB1dERlYnVnU3RyaW5nKCJcbiIpOwp9CnZvaWQgRlQyX09iajo6RnJlZSgpewogICAgRlRfRG9uZV9GYWNlKGZhY2UpOwogICAgRlRfRG9uZV9GcmVlVHlwZShsaWJyYXJ5KTsKfQppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKXsKICAgIEZUMl9PYmogdGV4dDsKICAgIHRleHQuSW5pdCgibXNqaC50dGMiLDYpOwogICAgdGV4dC5EcmF3QVVuaWNvZGUoTCfnjosnKTsKICAgIHRleHQuRnJlZSgpOwogICAgcmV0dXJuIDA7Cn0=