裸机实现的,还是Linux下
离线
木有看懂,也有汉字显示移植计划。不用小字库,至少HzK16,目标支持矢量字体
离线
在线
HZK16搞定了。矢量还要研究。free type
功能大多,太复杂。得花精力研究
离线
mark 下 这个是直接解析ttf文件吗
离线
ttf放在文件系统里,这个文件系统怎么和freetype对接的?freetype怎么去找的。 Linux没问题但是逻辑呢,得自己实现文件系统吧
最近编辑记录 达克罗德 (2018-12-24 22:34:54)
离线
ttf放在文件系统里,这个文件系统怎么和freetype对接的?freetype怎么去找的。 Linux没问题但是逻辑呢,得自己实现文件系统吧
对接是指如何调用吗?
调用方法可以参考晕哥这个帖子: https://whycan.cn/t_741.html
文件系统改改代码估计未必需要, 把需要的字扣出来, 存到另外一个 ttf 文件里面, 然后把文件存数组。
剪裁ttf字库可以参考 中科世为 这个套路: https://developer.flythings.cn/docs/zh/font_cut_tool
最近编辑记录 lilo (2018-12-25 08:12:16)
离线
达克罗德 说:ttf放在文件系统里,这个文件系统怎么和freetype对接的?freetype怎么去找的。 Linux没问题但是逻辑呢,得自己实现文件系统吧
对接是指如何调用吗?
调用方法可以参考晕哥这个帖子: https://whycan.cn/t_741.html文件系统改改代码估计未必需要, 把需要的字扣出来, 存到另外一个 ttf 文件里面, 然后把文件存数组。
剪裁ttf字库可以参考 中科世为 这个套路: https://developer.flythings.cn/docs/zh/font_cut_tool
谢谢!我是说初始化freetype字体face的时候,要传递ttf文件名,ttf是放到文件系统里的。在裸奔系统里,怎么实现这种文件访问
PS,这个裁剪工具真不错,我的字体十几MB,可以试试
离线
http://bbs.21ic.com/icview-586134-1-1.html
今天发现了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.csrc/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 supportNotes:
`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'
感觉把下面这些接口实现了就可以操作 freetype了, 21ic 上面有朋友把fatfs弄上去整合就可以用了:
#define ft_fclose fclose
#define ft_fopen fopen
#define ft_fread fread
#define ft_fseek fseek
#define ft_ftell ftell
#define ft_sprintf sprintf
这些是输入输出的接口
14楼:
经过三个晚上的努力终于在stm32+ucgui+sdio上成功移植FreeType2,下面是几张照片,字库是从电脑上拷贝的SIMFANG.TTF
文件系统用的是Fatfs,不过FreeType2需要开辟很大的堆空间,目前还没找到好的优化方法,移植了个FT2,ucgui我只分配了5K的动态内存,
还带旋转:
在线
http://bbs.21ic.com/icview-586134-1-1.html
今天发现了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.csrc/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 supportNotes:
`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'感觉把下面这些接口实现了就可以操作 freetype了, 21ic 上面有朋友把fatfs弄上去整合就可以用了:
#define ft_fclose fclose
#define ft_fopen fopen
#define ft_fread fread
#define ft_fseek fseek
#define ft_ftell ftell
#define ft_sprintf sprintf
这些是输入输出的接口14楼:
经过三个晚上的努力终于在stm32+ucgui+sdio上成功移植FreeType2,下面是几张照片,字库是从电脑上拷贝的SIMFANG.TTF
文件系统用的是Fatfs,不过FreeType2需要开辟很大的堆空间,目前还没找到好的优化方法,移植了个FT2,ucgui我只分配了5K的动态内存,
谢谢晕哥,我已经用xboot的标准C库跑了起来,显示中文正常了
离线
给力给力,学习了
离线
/**
* @file lv_freetype.c
*
*/
/*********************
* INCLUDES
*********************/
#include "lv_freetype.h"
#include "lv_font.h"
#include <wchar.h>
#include <pthread.h>
static pthread_mutex_t ft_mutex = PTHREAD_MUTEX_INITIALIZER;
/**
* Freetype2 set fonts size
*/
uint8_t lv_font_size(uint8_t sz)
{
static uint8_t size=0;
if( 0 == sz || size == sz ) {
// printf("[debug] size = %d\n", size);
return size;
}
pthread_mutex_lock( &ft_mutex);
size = sz;
FT_Set_Pixel_Sizes( lv_font_freetype2.handle.face, size, 0 );
pthread_mutex_unlock( &ft_mutex);
// printf("[debug] size = %d\n", size);
return size;
}
/**
* Initialize the built-in fonts
*/
void lv_font_init_freetype2(char *fontname)
{
int error;
if( fontname == NULL )
return ;
pthread_mutex_lock( &ft_mutex);
lv_font_freetype2.handle.ft_path = fontname;
printf("%s < %s\n", __func__, lv_font_freetype2.handle.ft_path);
error = FT_Init_FreeType( &lv_font_freetype2.handle.library ); /* initialize library */
error = FT_New_Face( lv_font_freetype2.handle.library, lv_font_freetype2.handle.ft_path, 0, &lv_font_freetype2.handle.face );
pthread_mutex_unlock( &ft_mutex);
lv_font_size(24);
}
/**
* Generic bitmap get function used in 'font->get_bitmap' when the font contains all characters in the range
* @param font pointer to font
* @param unicode_letter an unicode letter which bitmap should be get
* @return pointer to the bitmap or NULL if not found
*/
static uint32_t last_letter = 0;
const uint8_t * lv_font_get_bitmap_freetype2(const lv_font_t * font, uint32_t unicode_letter)
{
pthread_mutex_lock( &ft_mutex);
FT_GlyphSlot slot;
int error;
slot = lv_font_freetype2.handle.face->glyph;
if( last_letter == unicode_letter ) {
lv_font_freetype2.handle.top = slot->bitmap_top;
pthread_mutex_unlock( &ft_mutex);
// printf("%x [ %c%c%c ] < top %d left %d row %d col %d >\n", unicode_letter, unicode_letter&0xff, unicode_letter>>8, unicode_letter>>16, slot->bitmap_top, slot->bitmap_left, slot->bitmap.rows, slot->bitmap.width);
return slot->bitmap.buffer;
}
last_letter = unicode_letter;
error = FT_Load_Char( lv_font_freetype2.handle.face, unicode_letter, FT_LOAD_RENDER );
if (error)
{
printf("FT_Load_Char error\n");
pthread_mutex_unlock( &ft_mutex);
return NULL;
}
lv_font_freetype2.handle.top = slot->bitmap_top;
pthread_mutex_unlock( &ft_mutex);
return slot->bitmap.buffer;
}
/**
* Generic glyph width get function used in 'font->get_width' when the font contains all characters in the range
* @param font pointer to font
* @param unicode_letter an unicode letter which width should be get
* @return width of the gylph or -1 if not found
*/
const int16_t lv_font_get_width_freetype2(const lv_font_t * font, uint32_t unicode_letter)
{
pthread_mutex_lock( &ft_mutex);
FT_GlyphSlot slot;
int error;
slot = lv_font_freetype2.handle.face->glyph;
if( last_letter == unicode_letter ) {
pthread_mutex_unlock( &ft_mutex);
if( slot->bitmap.width == 0 ) {
if( unicode_letter == 0x09 )
return lv_font_size(0)*2;
else
return lv_font_size(0)/2;
}
return slot->bitmap.width;
}
last_letter = unicode_letter;
error = FT_Load_Char( lv_font_freetype2.handle.face, unicode_letter, FT_LOAD_RENDER );
if (error)
{
printf("FT_Load_Char error\n");
pthread_mutex_unlock( &ft_mutex);
return 0;
}
// for get rows
lv_font_freetype2.h_px = lv_font_size(0); // slot->bitmap.rows;
lv_font_freetype2.bpp = 8;
pthread_mutex_unlock( &ft_mutex);
if( slot->bitmap.width == 0 ) {
if( unicode_letter == 0x09 )
return lv_font_size(0)*2;
else
return lv_font_size(0)/2;
}
return slot->bitmap.width;
}
lv_font_t lv_font_freetype2 = {
.unicode_first = 0, /*First Unicode letter in this font*/
.unicode_last = 0, /*Last Unicode letter in this font*/
.h_px = 0, /*Font height in pixels*/
.glyph_bitmap = NULL, /*Bitmap of glyphs*/
.glyph_dsc = NULL, /*Description of glyphs*/
.unicode_list = NULL, /*Every character in the font from 'unicode_first' to 'unicode_last'*/
.get_bitmap = lv_font_get_bitmap_freetype2, /*Function pointer to get glyph's bitmap*/
.get_width = lv_font_get_width_freetype2, /*Function pointer to get glyph's width*/
.bpp = 8, /*Bit per pixel*/
.type = FONT_TYPE_BUILT_FREETYPE2,
.handle.ft_size = lv_font_size,
.next_page = NULL, /*Pointer to a font extension*/
};
以上是 @assert 发给我的release_static_freetype.c 代码.
在线
之前在ucgui 上移植过freetype,其实不麻烦
离线
LittlevGL + RT-Thread + FreeType
修改LV部分代码,显示没问题
最近编辑记录 yywyai (2019-01-17 16:55:19)
离线
这个厉害了, STM32F7/STM32H7 吗?
离线
GD32F450
离线
GD32F450
方便分享 littlevgl 与 fretype 对接的代码吗?
离线
static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}
static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}
bitmap = NULL;
return -1;
}
代码很简单的,但是修改了部分的LV代码
最近编辑记录 yywyai (2019-01-17 17:20:21)
离线
static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
非常感谢分享!
在线
LittlevGL 在 RT-Thread 下的显示驱动在 http://bbs.21ic.com/icview-2617900-1-1.html
离线
LittlevGL 在 RT-Thread 下的显示驱动在 http://bbs.21ic.com/icview-2617900-1-1.html
优秀!学习!
离线
static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
请问这样的话渲染后的字体文件是用freetype得到bitmap后再通过结构体中的get_bitmap被使用吗?
离线
yywyai 说:static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
请问这样的话渲染后的字体文件是用freetype得到bitmap后再通过结构体中的get_bitmap被使用吗?
littlevgl 5.2 5.3中是先调用get_width,然后调用get_bitmap,所以可以在get_width中获得bitmap
离线
是这样没错,但因为Littlevgl在显示期间会多次获取width,这样其实一个字也load了好几次呢
mathildawyx 说:yywyai 说:static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
请问这样的话渲染后的字体文件是用freetype得到bitmap后再通过结构体中的get_bitmap被使用吗?
littlevgl 5.2 5.3中是先调用get_width,然后调用get_bitmap,所以可以在get_width中获得bitmap
离线
mark
离线
mark一下, LittlevGL 是怎么调用FreeType2的? 能不能说下 步骤? 不胜感激!谢谢!
离线
static const uint8_t*
lv_font_get_bitmap_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
return bitmap;
}static int16_t
lv_font_get_width_freetype(const struct _lv_font_struct *font, uint32_t unicode_letter)
{
/*Check the range*/
if(unicode_letter < font->unicode_first || unicode_letter > font->unicode_last) return -1;
FT_Error err = FT_Load_Char(face, unicode_letter, FT_LOAD_RENDER);
if (err == 0) {
lv_font_freetype.bpp = 8;
lv_font_freetype.bitmap_dx = face->glyph->bitmap_left;
lv_font_freetype.bitmap_dy = lv_font_freetype.monospace - face->glyph->bitmap_top;
lv_font_freetype.bitmap_row = face->glyph->bitmap.rows;
bitmap = face->glyph->bitmap.buffer;
return face->glyph->bitmap.width;
}bitmap = NULL;
return -1;
}代码很简单的,但是修改了部分的LV代码
你好,感谢你的分享,请教下littlevgl修改的部分是?最近也在移植中文显示,借鉴下楼主的方法。谢谢。
离线
不修改也可以的。
你好,感谢你的分享,请教下littlevgl修改的部分是?最近也在移植中文显示,借鉴下楼主的方法。谢谢。
离线
freetype好用吗?最近也再搞字库
离线
晕哥,移植这个freetype的源码能提供下吗?最近也在移植,没有思路
离线
对接是指如何调用吗?
调用方法可以参考晕哥这个帖子: https://whycan.cn/t_741.html文件系统改改代码估计未必需要, 把需要的字扣出来, 存到另外一个 ttf 文件里面, 然后把文件存数组。
剪裁ttf字库可以参考 中科世为 这个套路: https://developer.flythings.cn/docs/zh/font_cut_tool
噢, 这个好思路, 正愁我的微软雅黑太大呢, 其实也就用几个字而已。
离线
对接是指如何调用吗?
调用方法可以参考晕哥这个帖子: https://whycan.cn/t_741.html文件系统改改代码估计未必需要, 把需要的字扣出来, 存到另外一个 ttf 文件里面, 然后把文件存数组。
剪裁ttf字库可以参考 中科世为 这个套路: https://developer.flythings.cn/docs/zh/font_cut_tool
链接炸了, 不知道这个能不能用: https://blog.csdn.net/DumpDoctorWang/article/details/86704625
离线