嵌入式 用Freetype获取字符位图--学习小结

原创 2013年12月02日 14:55:05
Freetype是一个操作字体的函数库,它不但可以处理点阵字体,也可以处理多种矢量字体,包括truetype字体,为上层应用程序提供了一个统一的调用接口。Freetype具有良好的可移植性,特别考虑了嵌入式应用环境,字体文件可以在文件系统中,也可以在ROM中,甚至可以用自定义IO函数来访问字体数据。Freetype采用模块化设计,很容易进行扩充和裁减,据说如果只支持truetype,裁减后的二进制文件大小只有25K。Freetype是开放源代码的,它采用FreeType和GPL两种开源协议,可以用于任何商业用途。Freetype的使用相对比较简单,下面将以一个小例子来讲解一下如何使用Freetype的函数来获取字符的位图,该例子是取32* 32大小的位图,注释部分为详细讲解Freetype的函数,因此字可能会比较多。不多说了,来看例子吧:

 

#include

 

#include

#include FT_FREETYPE_H

#define CHARSIZE 32 // 字符位图的大小设为32 * 32

int GetCharBitmap(int iCharSize, unsigned int uiCharCode);

int main(int argc, char** argv)

{

unsigned int uiCharCode = 0x0061; // 字母a的ucs2编码.

GetCharBitmap(CHARSIZE, uiCharCode);

return 0;

}

int GetCharBitmap(int iCharSize, unsigned int uiCharCode)

{

FT_Library ftLibrary;

FT_Error ftError = FT_Init_FreeType(&ftLibrary);

if(ftError)

{

printf("Init freetype library fail!/n");

return -1;

}

 

FT_Face ftFace;

ftError = FT_New_Face( ftLibrary, "ukai.ttc", 0, &ftFace);

if(ftError == FT_Err_Unknown_File_Format)

{

printf("Error! Could not support this format!/n");

return -1;

}

else if(ftError)

{

printf("Error! Could not open file ukai.ttc!/n");

return -1;

}

 

ftError = FT_Set_Pixel_Sizes(ftFace, iCharSize, 0);

if(ftError)

{

printf("Set pixel sizes to %d*%d error!/n", iCharSize,iCharSize);

return -1;

}

FT_UInt uiGlyphIndex = FT_Get_Char_Index(ftFace,uiCharCode);

FT_Load_Glyph(ftFace,uiGlyphIndex, FT_LOAD_DEFAULT);

FT_Render_Glyph(ftFace->glyph, FT_RENDER_MODE_MONO);


int iRow = 0, iCol = 0;
for(iRow = 0; iRow < ftFace->glyph->bitmap.rows;iRow++)
{
for(iCol = 0; iCol < ftFace->glyph->bitmap.width;iCol++)
{
if((ftFace->glyph->bitmap.buffer[iRow *ftFace->glyph->bitmap.pitch + iCol/8] & (0xC0 >>(iCol % 8))) == 0)
{
printf("_");
}
else
{
printf("0");
}
}

printf("/n");

}

return 0;

}

嵌入式 用Freetype获取字符位图

Freetype 是一个操作字体的函数库,它不但可以处理点阵字体,也可以处理多种矢量字体,包括truetype字体,为上层应用程序提供了一个统一的调用接口。Freetype具有良好的可移植性,特别考虑...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:52
  • 1131

使用freetype库将文字嵌入到bmp图片中 学习笔记

首先需要打开一张bmp图片,将图片读入内存中。然后连接freetype类库,使用的是freetype2.4.9版本,VS2010。 为了简单处理,使用的bmp图片为24位位图,960*540大小的一张...
  • u010385177
  • u010385177
  • 2015年07月17日 16:42
  • 1547

文本处理以及freetype的使用

1. 字符编码 编码 解释 GBK(国标扩展码) 英文字符用一个字节进行表示,值小于等于 127。汉字用两个字节进行表示,对应的区位码由国家标准指定 UTF-8 变长编码,中文文...
  • u013904227
  • u013904227
  • 2016年08月03日 16:13
  • 1777

C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图

C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 阅读目录(Content) 使用FreeType预备工作 找一个TTF文件下载F...
  • linuxheik
  • linuxheik
  • 2016年12月22日 17:12
  • 517

FreeType 字体库使用 (简易的字形装载和实际应用)

FreeType是一个用C语言实现的宁体光栅化引擎制作的一个函式库.它可以用来将字符栅格化并映射成位图以及提供其它字体相关业务的支持.FreeType也是一个跨平台的字体库,下面实例以 Windows...
  • juniway
  • juniway
  • 2014年06月19日 22:46
  • 1906

嵌入式 初探freetype字体库

文字的显示依赖于字体字库,大致的字体字库分为点阵字库、笔画字库和轮廓字库。 点阵字库:缺点比较明显,缩放存在锯齿,渲染旋转等操作相对复杂,且效果不理想,先大多用在嵌入式行业(基本抛弃),常见格式有b...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:52
  • 1307

嵌入式 Linux下利用FreeType2的API实现字符的显示

网上的FreeType2例子太少,能显示汉字的比较难找,C语言代码写的更难找,能找到的,基本上是被转载了N遍的同一个示例代码,基本上解决不了我的问题。 于是乎,花费了不少时间才完成了这些代码; 主要功...
  • skdkjxy
  • skdkjxy
  • 2013年12月02日 14:52
  • 853

[置顶]OpenGL11-绘制汉字最高效方法(使用Freetype)(代码已更新)

最新版本,之前的版本有些文件没有打包    OpenGL本身并没有绘制文字的功能,他只是一个三维绘图的API集和,很多东西都要 自己动手才可以实现。OpenGL绘制文字,网络上已经有很多成熟的方...
  • qq_26280299
  • qq_26280299
  • 2015年07月03日 15:03
  • 1349

如何用 FreeType 装载一个字形图像

转自:skdkjxy的博客http://blog.sina.com.cn/s/blog_8795b0970101idpq.html3.7.1 把一个字符码转换为一个字形索引通常,一个应用程序想通过字符...
  • panda1234lee
  • panda1234lee
  • 2016年12月08日 13:01
  • 1024

获得位图之freetype

freetype只获得位图步骤有:1.初始化freetype库,2..打开字体文件3.设置点阵大小(用默认的也行)4.用FT_Load_Char来获得字体的点阵,就像gbk或点阵用索引来的得到位图一样...
  • ap105638
  • ap105638
  • 2013年04月08日 19:09
  • 2074
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 用Freetype获取字符位图--学习小结
举报原因:
原因补充:

(最多只允许输入30个字)