FreeType初探---获取字体文本度量信息
来源:互联网 发布:英国贵族 知乎 编辑:程序博客网 时间:2024/05/18 01:28
FT_Library library;
FT_Error error = FT_Init_FreeType( &library );
if ( error )
{
;
}
FT_Face face;
error = FT_New_Face( library, "C:\\Windows\\Fonts\\simsun.ttc", 0, &face );
if ( error == FT_Err_Unknown_File_Format)
{
;
}
//遍历字符集
int iCharMapCnt = face->num_charmaps;
FT_CharMap* pCharMaps = face->charmaps;
for ( int i = 0; i < iCharMapCnt; i ++)
{
FT_CharMapRec aCharMap = *(pCharMaps[i]);
FT_Encoding enconding = aCharMap.encoding;
int platform_id = aCharMap.platform_id;
int encoding_id = aCharMap.encoding_id;
}
//字体全局的东西、用字体单元来度量的。
int iGlyphsCnt = face->num_glyphs;
int iFaceNo = face->face_index;
int iFace_Flags = face->face_flags;
int iUints_Per_EM = face->units_per_EM;
int ascender = (face->ascender );
int descender = (face->descender);
int height = (face->height);
int max_advance_width = (face->max_advance_width);
int max_advance_height = (face->max_advance_width);
//通过每英寸72个点、使用多少个点来设置字的大小。
FT_Set_Char_Size(face,0,16 * 64,720, 720);//每英寸720像素、那么每个点10像素、16点则160像素。
FT_Size pSize = face->size;
FT_Size_Metrics_ font_Size_Metrics = pSize->metrics; //整个字体的数据。按字体单元换算而来。
int iX_PPEM = font_Size_Metrics.x_ppem;
int iY_PPEM = font_Size_Metrics.y_ppem;
int iX_Scale = (font_Size_Metrics.x_scale + 63)>>6;
int iY_Scale = (font_Size_Metrics.y_scale + 63)>>6;
int iAscender = (font_Size_Metrics.ascender + 63)>>6;
int iDescender = (font_Size_Metrics.descender + 63)>>6;
int iHeight = (font_Size_Metrics.height + 63)>>6;
int iMax_advance = (font_Size_Metrics.max_advance + 63)>>6;
//直接通过像素来设置点的大小
FT_Set_Pixel_Sizes(face,160,160);
bool bScale = FT_IS_SCALABLE(face);
pSize = face->size;
font_Size_Metrics = pSize->metrics;
iX_PPEM = font_Size_Metrics.x_ppem;
iY_PPEM = font_Size_Metrics.y_ppem;
iX_Scale = (font_Size_Metrics.x_scale + 63)>>6;
iY_Scale = (font_Size_Metrics.y_scale + 63)>>6;
iAscender = (font_Size_Metrics.ascender + 63)>>6;
iDescender = (font_Size_Metrics.descender + 63)>>6;
iHeight = (font_Size_Metrics.height + 63)>>6;
iMax_advance = (font_Size_Metrics.max_advance + 63)>>6;
//轮廓索引
int iGlyphIndex = FT_Get_Char_Index(face,'A');
FT_Int32 loadflags = FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP;
error = FT_Load_Glyph(face,1105/*iGlyphIndex*/,loadflags);
if(error)
{
;
}
//字槽、即对单个字的描述
FT_GlyphSlot pGlyphSlot = face->glyph;
FT_Glyph_Metrics glphy_Metrics = pGlyphSlot->metrics;//单个字的数据。
int iWordW = (glphy_Metrics.width + 63)>>6;
int iWordH = (glphy_Metrics.height + 63)>>6;
int iWordHBearingX = (glphy_Metrics.horiBearingX + 63)>>6;
int iWordHBearingY = (glphy_Metrics.horiBearingY + 63)>>6;
int iWordHAdd = (glphy_Metrics.horiAdvance + 63) >> 6;
int iWordVBearingX = (glphy_Metrics.vertBearingX + 63)>>6;
int iWordVBearingY = (glphy_Metrics.vertBearingY + 63)>>6;
int iWordVAdd = (glphy_Metrics.vertAdvance + 63) >> 6;
FT_Error error = FT_Init_FreeType( &library );
if ( error )
{
;
}
FT_Face face;
error = FT_New_Face( library, "C:\\Windows\\Fonts\\simsun.ttc", 0, &face );
if ( error == FT_Err_Unknown_File_Format)
{
;
}
//遍历字符集
int iCharMapCnt = face->num_charmaps;
FT_CharMap* pCharMaps = face->charmaps;
for ( int i = 0; i < iCharMapCnt; i ++)
{
FT_CharMapRec aCharMap = *(pCharMaps[i]);
FT_Encoding enconding = aCharMap.encoding;
int platform_id = aCharMap.platform_id;
int encoding_id = aCharMap.encoding_id;
}
//字体全局的东西、用字体单元来度量的。
int iGlyphsCnt = face->num_glyphs;
int iFaceNo = face->face_index;
int iFace_Flags = face->face_flags;
int iUints_Per_EM = face->units_per_EM;
int ascender = (face->ascender );
int descender = (face->descender);
int height = (face->height);
int max_advance_width = (face->max_advance_width);
int max_advance_height = (face->max_advance_width);
//通过每英寸72个点、使用多少个点来设置字的大小。
FT_Set_Char_Size(face,0,16 * 64,720, 720);//每英寸720像素、那么每个点10像素、16点则160像素。
FT_Size pSize = face->size;
FT_Size_Metrics_ font_Size_Metrics = pSize->metrics; //整个字体的数据。按字体单元换算而来。
int iX_PPEM = font_Size_Metrics.x_ppem;
int iY_PPEM = font_Size_Metrics.y_ppem;
int iX_Scale = (font_Size_Metrics.x_scale + 63)>>6;
int iY_Scale = (font_Size_Metrics.y_scale + 63)>>6;
int iAscender = (font_Size_Metrics.ascender + 63)>>6;
int iDescender = (font_Size_Metrics.descender + 63)>>6;
int iHeight = (font_Size_Metrics.height + 63)>>6;
int iMax_advance = (font_Size_Metrics.max_advance + 63)>>6;
//直接通过像素来设置点的大小
FT_Set_Pixel_Sizes(face,160,160);
bool bScale = FT_IS_SCALABLE(face);
pSize = face->size;
font_Size_Metrics = pSize->metrics;
iX_PPEM = font_Size_Metrics.x_ppem;
iY_PPEM = font_Size_Metrics.y_ppem;
iX_Scale = (font_Size_Metrics.x_scale + 63)>>6;
iY_Scale = (font_Size_Metrics.y_scale + 63)>>6;
iAscender = (font_Size_Metrics.ascender + 63)>>6;
iDescender = (font_Size_Metrics.descender + 63)>>6;
iHeight = (font_Size_Metrics.height + 63)>>6;
iMax_advance = (font_Size_Metrics.max_advance + 63)>>6;
//轮廓索引
int iGlyphIndex = FT_Get_Char_Index(face,'A');
FT_Int32 loadflags = FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP;
error = FT_Load_Glyph(face,1105/*iGlyphIndex*/,loadflags);
if(error)
{
;
}
//字槽、即对单个字的描述
FT_GlyphSlot pGlyphSlot = face->glyph;
FT_Glyph_Metrics glphy_Metrics = pGlyphSlot->metrics;//单个字的数据。
int iWordW = (glphy_Metrics.width + 63)>>6;
int iWordH = (glphy_Metrics.height + 63)>>6;
int iWordHBearingX = (glphy_Metrics.horiBearingX + 63)>>6;
int iWordHBearingY = (glphy_Metrics.horiBearingY + 63)>>6;
int iWordHAdd = (glphy_Metrics.horiAdvance + 63) >> 6;
int iWordVBearingX = (glphy_Metrics.vertBearingX + 63)>>6;
int iWordVBearingY = (glphy_Metrics.vertBearingY + 63)>>6;
int iWordVAdd = (glphy_Metrics.vertAdvance + 63) >> 6;
- FreeType初探---获取字体文本度量信息
- 获取TrueType字体信息
- 嵌入式 初探freetype字体库
- 初探freetype字体库
- 获取 GetLastError 文本信息
- HtmlParser 获取文本信息
- FreeType字体程序库介绍
- FreeType字体程序库介绍
- FreeType字体程序库介绍
- FreeType字体程序库介绍
- FreeType字体程序库介绍
- 游戏FreeType字体
- FreeType字体引擎介绍
- FreeType字体程序库介绍
- freetype渲染字体范例
- FreeType字体程序库介绍
- 使用FreeType绘制字体
- 有关 freetype 字体显示
- SQL替换NOT IN的几种方法总结
- Exception拦截器方便调试
- 中断六
- mfc设置字体,但是无法改变的注意事项
- android2.2和2.3对于触摸屏幕唤醒屏幕的处理
- FreeType初探---获取字体文本度量信息
- Nginx学习笔记2—Nginx(Win32) nginx.conf 中文详解
- latex写论文 问题集锦
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
- js中的preventDefault
- Android之Gallery
- 传智博客JAVA基础第十天
- 纳秒与微秒级时间
- 连接蓝牙设备