打印

stm32移植freetype的问题

[复制链接]
14713|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 610095871 于 2013-7-29 08:38 编辑

如题,我用的是Freetype2.3.10版本,在VC上运行了下,因为其提供了相应的编译工程,我生成了库之后再VC上调用是正常的,目前打算移植到stm32上,文件系统打算用Fatfs,但是查了一天的资料也没找到关于Freetype2移植的说明,目前都不知道移植需要修改哪些文件,希望有了解的朋友们能指点下,感激不尽。
Sorry 由于文件超过10M,所以无法上传,放个链接,里面是stm32的工程
开源共享stm32显示矢量字体
http://bbs.anbn.cn/thread-65-1-1.html
UCGUI源码学习中---Q群295214484

沙发
airwill| | 2013-7-25 06:36 | 只看该作者
FreeType是一个用 C语言 实现的 一个字体光栅化 库。它可以用来将字符 栅格化 并映射成 位图 以及提供其他字体相关业务的支持。

FreeType 并不提供 API 以运行更高级的功能,如文字布局或图形处理(例如彩色文本 渲染、“空洞化”等)。然而,它提供了一个简单、易用并统一的 接口 来访问 字体 文件的内容,从而极大地简化了这些任务。它支持各种字体格式,包括 TrueType、Type 1、以及 OpenType。FreeType 1 是一个去掉了苹果和微软原始痕迹的清洁版。

看样子除了文件系统, 还需要标准 GUI 的支持. 感觉不太容易移植到 STM32 上来.

使用特权

评论回复
板凳
610095871|  楼主 | 2013-7-25 08:14 | 只看该作者
airwill 发表于 2013-7-25 06:36
FreeType是一个用 C语言 实现的 一个字体光栅化 库。它可以用来将字符 栅格化 并映射成 位图 以及提供其他 ...

感谢版主指点,我在VC上移植到ucgui上,
其中只用了ucgui一个打点函数,因为我主要用到字体的缩放和旋转,组建用到的也不多,我摸索着将下载的Ft源文件进行裁剪现在只剩下下面几个文件了

用FT提供的VC文件生成的库从2.4M变到1.4M ,我查看了下它VC的编译工程,发现很多文件中包含了c文件,而且头文件还用宏定义出来,所以我把c文件添加到编译工程的时候总是会报很多错误,搞的我都不知道那些是源文件那些是不需要添加的文件。,。,。,,

使用特权

评论回复
地板
610095871|  楼主 | 2013-7-25 13:49 | 只看该作者
今天发现了Freetype与文件系统相关的接口定义
在ftstdlib.h 这个头中

#include <string.h>

#define ft_memchr   memchr
#define ft_memcmp   memcmp
#define ft_memcpy   memcpy
#define ft_memmove  memmove
#define ft_memset   memset
#define ft_strcat   strcat
#define ft_strcmp   strcmp
#define ft_strcpy   strcpy
#define ft_strlen   strlen
#define ft_strncmp  strncmp
#define ft_strncpy  strncpy
#define ft_strrchr  strrchr
#define ft_strstr   strstr
这些是内存管理

#include <stdio.h>

#define FT_FILE     FILE
#define ft_fclose   fclose
#define ft_fopen    fopen
#define ft_fread    fread
#define ft_fseek    fseek
#define ft_ftell    ftell
#define ft_sprintf  sprintf
这些是输入输出的接口

个人感觉,需要移植的接口就是以上内容,现在的问题是要如何将那些源码加载到工程中
尽管我在Docs文件加下打开了一个叫做INSTALL.any的文件
里面提示了如何添加源码,但是我按照其操作依然错误很多,有些想放弃了。
* DO NOT COMPILE ALL C FILES!  Rather, compile the following ones.

    -- base components (required)

      src/base/ftsystem.c
      src/base/ftinit.c
      src/base/ftdebug.c

      src/base/ftbase.c

      src/base/ftbbox.c       -- recommended, see <freetype/ftbbox.h>
      src/base/ftglyph.c      -- recommended, see <freetype/ftglyph.h>

      src/base/ftbdf.c        -- optional, see <freetype/ftbdf.h>
      src/base/ftbitmap.c     -- optional, see <freetype/ftbitmap.h>
      src/base/ftcid.c        -- optional, see <freetype/ftcid.h>
      src/base/ftfstype.c     -- optional
      src/base/ftgasp.c       -- optional, see <freetype/ftgasp.h>
      src/base/ftgxval.c      -- optional, see <freetype/ftgxval.h>
      src/base/ftlcdfil.c     -- optional, see <freetype/ftlcdfil.h>
      src/base/ftmm.c         -- optional, see <freetype/ftmm.h>
      src/base/ftotval.c      -- optional, see <freetype/ftotval.h>
      src/base/ftpatent.c     -- optional
      src/base/ftpfr.c        -- optional, see <freetype/ftpfr.h>
      src/base/ftstroke.c     -- optional, see <freetype/ftstroke.h>
      src/base/ftsynth.c      -- optional, see <freetype/ftsynth.h>
      src/base/fttype1.c      -- optional, see <freetype/t1tables.h>
      src/base/ftwinfnt.c     -- optional, see <freetype/ftwinfnt.h>
      src/base/ftxf86.c       -- optional, see <freetype/ftxf86.h>

      src/base/ftmac.c        -- only on the Macintosh

    -- font drivers (optional; at least one is needed)

      src/bdf/bdf.c           -- BDF font driver
      src/cff/cff.c           -- CFF/OpenType font driver
      src/cid/type1cid.c      -- Type 1 CID-keyed font driver
      src/pcf/pcf.c           -- PCF font driver
      src/pfr/pfr.c           -- PFR/TrueDoc font driver
      src/sfnt/sfnt.c         -- SFNT files support
                                 (TrueType & OpenType)
      src/truetype/truetype.c -- TrueType font driver
      src/type1/type1.c       -- Type 1 font driver
      src/type42/type42.c     -- Type 42 font driver
      src/winfonts/winfnt.c   -- Windows FONT / FNT font driver

    -- rasterizers (optional; at least one is needed for vector
       formats)

      src/raster/raster.c     -- monochrome rasterizer
      src/smooth/smooth.c     -- anti-aliasing rasterizer

    -- auxiliary modules (optional)

      src/autofit/autofit.c   -- auto hinting module
      src/cache/ftcache.c     -- cache sub-system (in beta)
      src/gzip/ftgzip.c       -- support for compressed fonts (.gz)
      src/lzw/ftlzw.c         -- support for compressed fonts (.Z)
      src/gxvalid/gxvalid.c   -- TrueTypeGX/AAT table validation
      src/otvalid/otvalid.c   -- OpenType table validation
      src/psaux/psaux.c       -- PostScript Type 1 parsing
      src/pshinter/pshinter.c -- PS hinting module
      src/psnames/psnames.c   -- PostScript glyph names support


    Notes:

      `ftcache.c'  needs `ftglyph.c'
      `ftfstype.c' needs `fttype1.c'
      `ftglyph.c'  needs `ftbitmap.c'
      `ftstroke.c' needs `ftglyph.c'
      `ftsynth.c'  needs `ftbitmap.c'

      `cff.c'      needs `sfnt.c', `pshinter.c', and `psnames.c'
      `truetype.c' needs `sfnt.c' and `psnames.c'
      `type1.c'    needs `psaux.c' `pshinter.c', and `psnames.c'
      `type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'
      `type42.c'   needs `truetype.c'


  

使用特权

评论回复
5
STARM| | 2013-7-25 14:11 | 只看该作者
希望有了解的朋友们能指点下

使用特权

评论回复
6
610095871|  楼主 | 2013-7-25 19:46 | 只看该作者
freetype-2.3.10.rar (4.35 MB) 因为对VC不熟所以走 很多岔路,今天根据freetype2提供的VC的编译工程,我新建了一个VC的工程(在附件的build-win-cc)这个工程中我添加了部分源码进行编译,添加了一个main函数,里面显示例子是直接复制网上的,这样就可以用源码进行对Freetype的学习了,同时可以更深一步的进行裁剪,工程中我是按照仅仅支持truetype类型进行的第一次裁剪,因为对Freetype2一点都不熟悉所以裁剪的不够细致,现在放到网上,希望感兴趣的朋友们一起学习交流。




使用特权

评论回复
7
610095871|  楼主 | 2013-7-25 22:00 | 只看该作者


经过裁剪,只支持truetype字体的话,只需要以上几个文件即可。
注:以上仅是我在VC上进行过测试,在VC上只保留以上几个文件即可,另外由于ftbase中包含了一些c文件,对其也进行了测试裁剪
以下是ftbase的内容:
#include <ft2build.h>

//#include "ftpic.c"
//#include "basepic.c"
//#include "ftadvanc.c"
#include "ftcalc.c"
//#include "ftdbgmem.c"
#include "ftgloadr.c"
#include "ftobjs.c"
#include "ftoutln.c"
#include "ftrfork.c"


经过以上裁剪,VC上依然可以通过文件系统访问ttf文件并打印出来结果,之后我按照VC上的文件排版在stm32的工程上(MDK)进行了移植了,现在提示没有错误,但是由于文件系统不一样,所以要对一些函数进行修改。我会尽快在stm32上进行测试。
//#include "ftsnames.c"
#include "ftstream.c"
#include "fttrigon.c"
#include "ftutil.c"
#if defined( FT_MACINTOSH ) && !defined ( DARWIN_NO_CARBON )
//#include "ftmac.c"
#endif
/* END */

使用特权

评论回复
8
610095871|  楼主 | 2013-7-26 16:28 | 只看该作者
移植到stm32上确实有难度。

使用特权

评论回复
9
cjhk| | 2013-7-26 19:02 | 只看该作者
不错不错   谢谢了   楼主   谢谢你的共享   很不错  

使用特权

评论回复
10
cjhk| | 2013-7-26 19:02 | 只看该作者
有时间好好看看先   顶一个   应该很不错   谢谢了  

使用特权

评论回复
11
610095871|  楼主 | 2013-7-27 10:38 | 只看该作者
:'(大家都不感兴趣啊

使用特权

评论回复
12
610095871|  楼主 | 2013-7-27 14:12 | 只看该作者
移植到stm32的时候需要注意一点,就是堆空间需要设置大点。默认的是0x200,这个不改的话,在加载组件的时候会报错,申请组件的时候需要给其分配内存用的是malloc 所以堆空间需要设置大点,另外添加的组件至少需要三个(这个还不确定,目前跑那个例子的时候是需要三个)
FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
这三个占用的内存分别是 20 ,72, 82,个字节(顺序忘掉了)
移植到现在依然没成功,目前移植到可以正常加载上面三个组件
也就是完成了FT_Init_FreeType( & pFTLib);


接下来的内容需要文件系统了,需要对表头进行读取处理。目前已经把文件系统改成fatfs的了,晚上再测试下,没多大信心。

使用特权

评论回复
13
worldsing| | 2013-7-27 16:04 | 只看该作者
第一次听说

使用特权

评论回复
14
610095871|  楼主 | 2013-7-28 04:03 | 只看该作者
经过三个晚上的努力终于在stm32+ucgui+sdio上成功移植FreeType2,下面是几张照片,字库是从电脑上拷贝的SIMFANG.TTF
文件系统用的是Fatfs,不过FreeType2需要开辟很大的堆空间,目前还没找到好的优化方法,移植了个FT2,ucgui我只分配了5K的动态内存,
MemDev直接关闭了。
UCGUI源码学习中---Q群295214484
下面这几张图是字体旋转。





xxxxx.jpg (4.42 MB )

xxxxx.jpg

IMG_0974.jpg (4.2 MB )

IMG_0974.jpg

IMG_0971.jpg (3.41 MB )

IMG_0971.jpg

使用特权

评论回复
15
610095871|  楼主 | 2013-7-28 12:42 | 只看该作者
UCGUI源码学习中---Q群295214484

使用特权

评论回复
16
610095871|  楼主 | 2013-7-29 08:07 | 只看该作者
果然很冷门

使用特权

评论回复
17
610095871|  楼主 | 2013-7-29 15:07 | 只看该作者
源码共享到了bbs.anbn.cn
UCGUI源码学习中---Q群295214484

使用特权

评论回复
18
qq1327371701| | 2013-9-14 14:48 | 只看该作者
我们已经实现在51,STM8等低端单片机中读取WINDOWS矢量字库的功能,详情请加Q了解。

使用特权

评论回复
19
Xavier_huang| | 2016-10-31 17:02 | 只看该作者
你好,请问源码在那里呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:UCGUI源码学习中---Q群295214484 http://ucgui.taobao.com

27

主题

323

帖子

10

粉丝