ÆùÆ®¸¦ ij½ÌÇϱâ À§ÇØ ºñÆ®¸Ê ÆùÆ®¸¦ ¹öÆÛ¿¡ ÀúÀåÇÑ´Ù. ÆùÆ® ij½Ì ±¸ÇöÀº ¾Æ´Ï°í ¹öÆÛ¿¡ ÀúÀå½Ã À̹ÌÁö°¡ ¾î¶² ¸ð¾çÀÏÁö ±Ã±ÝÇÏ°í È®ÀÎÇϱâ À§ÇؼÀÌ´Ù. ÀúÀåµÈ À̹ÌÁö¸¦ ¸ÕÀú º¸ÀÚ. ºñÆ®¸Ê¸¸ ÀúÀåÇϱ⠶§¹®¿¡ base lineÀ» °í·ÁÇÏÁö ¾Ê±â ¶§¹®¿¡ ÆùÆ®°¡ À§¸¦ ±âÁØÀ¸·Î Á¤·Ä µÇ¾î ÀÖ´Ù. int StringBuff::DrawFont(char* buff, int width, int height, int x, int y, FT_Face& face, TCHAR ch)
{ //±Û¸®ÇÁ À妽º ±¸ÇÔ int index = FT_Get_Char_Index(face, ch); //·Îµå ±Û¸®ÇÁ int error = FT_Load_Glyph(face, index, FT_LOAD_DEFAULT | FT_LOAD_NO_BITMAP); if(error) return error; //·£´õ¸µ error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL); if(error) return error; //ȸ鿡 Ãâ·ÂÇϱâ À§ÇØ bitmapÀÇ width, rows¸¦ ±¸ÇÑ´Ù. int bitmapWidth = face->glyph->bitmap.width; int bitmapHeight = face->glyph->bitmap.rows; char* bitmapBuff = (char*)face->glyph->bitmap.buffer; int bitmapLeft = face->glyph->bitmap_left; int bitmapTop = face->glyph->bitmap_top; if(( bitmapWidth + x + bitmapLeft) > width) return 1; //ÆùÆ®°¡ width À̹ÌÁö Å©±âº¸´Ù Å©´Ù. for (int n = 0 ; n < bitmapHeight; n++) { for(int m = 0; m < bitmapWidth; m++) { buff[width*(n + y) + m + x] = bitmapBuff[bitmapWidth*n + m]; } } return 0; } int StringBuff::WriteGlyphString(FT_Face& face, const char* szPath, TCHAR *str) { int width = 1024; int height = 1024; char* buff = new char[1024*1024]; memset(buff, 0, 1024*1024); Point2<int> advance = {0, 0}, pos = {0, 0}; int len = (int)_tcslen(str); for(int n = 0; n < len; n++) { int res = DrawFont(buff, width, height, pos.x, pos.y, face, str[n]); advance.x = face->glyph->bitmap.width; advance.y = face->glyph->bitmap.rows; if(res == 1) { pos.x = 0; pos.y += advance.y; DrawFont(buff, width, height, pos.x, pos.y, face, str[n]); } pos.x += advance.x; } StringBuff::WritePGM(szPath, width, height, (const char *)buff); delete [] buff; return 0; } ¿©±â¼ WriteGlyphString, DrawFont´Â ij½Ì ¹öÆÛ¿¡ ÆùÆ®¸¦ ±×¸°´Ù. DrawFont ÇÔ¼ö¿¡¼ ¿Ü°û¼± ±×·ÁÁø ºñÆ®¸ÊÀ» ij½Ì ¹öÆÛ·Î º¹»çÇÏ°í ÀÖ´Ù. for (int n = 0 ; n < bitmapHeight; n++) { for(int m = 0; m < bitmapWidth; m++) { buff[width*(n + y) + m + x] = bitmapBuff[bitmapWidth*n + m]; } } È£Ãâ ÇÔ¼ö ¼ø¼´Â SaveFont > WriteGlyphString > DrawFont ·Î °£´ÜÇϱ⠶§¹®¿¡ ÀÌÀåÀº º°µµÀÇ ¼³¸íÀº ÇÏÁö ¾Ê´Â´Ù. ¼Ò½º : 03_string_buff.cpp |