嵌入式 用Freetype获取字符位图

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

 

#include <stdio.h>

#include <string.h>

#includeFT_FREETYPE_H

 

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

 

int GetCharBitmap(intiCharSize, unsigned int uiCharCode);

 

int main(int argc, char**argv)

{

    unsigned int uiCharCode = 0x0061; // 字母aucs2编码.

    GetCharBitmap(CHARSIZE, uiCharCode);

    return 0;

}

 

int GetCharBitmap(intiCharSize, 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具有良好的可移植性,...

获得位图之freetype

freetype只获得位图步骤有:1.初始化freetype库,2..打开字体文件3.设置点阵大小(用默认的也行)4.用FT_Load_Char来获得字体的点阵,就像gbk或点阵用索引来的得到位图一样...

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

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

FreeType2使用总结

一、FreeType2简介 1. 是一个免费、开源、可移植且高质量的字体引擎; 2. 支持多种字体格式文件,并提供了统一的访问接口; 3. 支持单色位图、反走样位图渲染,这使字体显示质量达到Ma...
  • finewind
  • finewind
  • 2014年07月26日 10:58
  • 12474

使用阿里云E-MapReduce遇到的那些坑

由于需要做实验来验证自己系统的scalability,实验室机器数又不够,所以选择用商业服务器来完成实验。 在AWS和阿里云之间选择了阿里云。在完成试验后对实验过程中遇到的那些坑进行了总结。   自...

ImageMagick 中文手册

PS:写了一个imagemagick命令里面的convert(裁剪)跟composite(加水印)的压力测试脚本,就是因为有一台服务器身兼多职。最近负载有点过高,所以要考虑,把这个功能单独拿出去,做一...
  • Le3600
  • Le3600
  • 2013年03月24日 12:14
  • 1229

[福利]国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码)-秒杀GetGlyphOutline

前言 所需基本知识点 trueType字体的一些基本概念 trueType字体的基本构成 besier曲线定义 freetype对trueType的解析 解析基本步骤 freetype字体库初始化省略...

使用FreeType制作嵌入式(WINCE)使用字体文件

在产品设计初期,本人只想实现一下字体的使用,不想过多依赖于平台提供的API,为日后移植到Linux等其他系统也可通用,于是乎开始Google,接触到了FreeType,通过对FreeType的剪裁,让...
  • Mr_dodo
  • Mr_dodo
  • 2012年09月29日 11:19
  • 1244

嵌入式中如何统一多幅位图的调色板并生成C格式数据详解

在嵌入式开发当中,我们经常会需要显示公司logo,或者操作界面的图标,也自然会用到图像转换工具,比如uC-GUI-BitmapConvert, 下载地址连接页面 ,我们可以用它进行输入一幅位图,然后输...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 用Freetype获取字符位图
举报原因:
原因补充:

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