搜索
bottom↓
回复: 24

RT-Thread/GUI字体生成器

[复制链接]

出0入0汤圆

发表于 2010-9-9 22:07:36 | 显示全部楼层 |阅读模式
用于Windows主机上的字体生成器(我测试的是Windows XP,x86),选择字体后,点生成按钮,会在当前目录生成相应的.c字体文件,把这个和RT-Thread/GUI编译既可。

目前这个能够生成Windows上能显示的字体,包括fnt、TTF等字体。但仅生成了用于固定宽度字体引擎的字体数据,所以对于非等宽字体显示效果不是太理想。后续再加入中文字体和非等宽字体引擎吧。

点击此处下载 ourdev_581809UE68CC.zip(文件大小:4.47M) (原文件名:fontmade.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-9-9 22:55:08 | 显示全部楼层
太好了,赶快试一试!

出0入0汤圆

发表于 2010-9-9 23:18:24 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-9-10 09:15:11 | 显示全部楼层
make,支持

出0入0汤圆

发表于 2010-9-10 10:35:54 | 显示全部楼层
great! 那是不是把生成的字库文件覆盖原来的就可以用了?
比如用新生成的字库文件覆盖hz16font.c,RTT会自动显示新的字体?

出20入0汤圆

发表于 2010-9-10 10:52:41 | 显示全部楼层
好东西 哈哈

出0入0汤圆

发表于 2010-9-10 12:04:24 | 显示全部楼层
感謝!!!
我立刻試了,但rtgui_bitmap_font_engine 只支持寛8 的字,我立即改了,現在多寛的字体也OK 了

void rtgui_bitmap_font_draw_char(struct rtgui_font_bitmap* font, struct rtgui_dc* dc, const char ch,
        rtgui_rect_t* rect)
{
        const rt_uint8_t* font_ptr;
        rt_uint16_t x, y, w, h,cnt;
        register rt_base_t i, j, k;
        x = rect->x1;
        y = rect->y1;

        /* check first and last char */
        if (ch < font->first_char || ch > font->last_char) return;
        //font_ptr = font->bmp + (ch - font->first_char) * font->height;
        cnt =(font->width/8);
        if(font->width%8 != 0)
                cnt++;

        font_ptr = font->bmp + (ch - font->first_char) * cnt * font->height;

        w = (font->width + x > rect->x2)? rect->x2 - rect->x1 : font->width;
        h = (font->height + y > rect->y2)? rect->y2 - rect->y1 : font->height;

        for (i = 0; i < h*cnt; i ++ ){
                for (k=0; k<cnt;k++){
                        w-=(8*k);
                        for (j = 0; j < w; j ++){
                                if(j>=8)
                                        break;
                                        if (((font_ptr[i+k] >> (7-j)) & 0x01) != 0){
                                        /* draw a pixel */
                                        rtgui_dc_draw_point(dc, k*8+j + x, i/cnt + y);
                                        }
                        }
                       
                }
                i+=(cnt-1);
        }
       
}

出0入0汤圆

发表于 2010-9-10 12:07:27 | 显示全部楼层

(原文件名:font.jpg)


第一行是tahoma W8 H14
第二行是tahoma W9 H16
第三行是tahoma W12 H24

我的屏是寛 480 的

出0入0汤圆

发表于 2010-9-10 12:11:09 | 显示全部楼层
mark!

出0入0汤圆

 楼主| 发表于 2010-9-10 12:18:10 | 显示全部楼层
回复【7楼】appele  

(原文件名:font.jpg)
第一行是tahoma w8 h14
第二行是tahoma w9 h16
第三行是tahoma w12 h24
我的屏是寛 480 的
-----------------------------------------------------------------------

只支持8位宽的吗?我试过了,svn trunk的版本是支持24、32点阵的。

因为目前还是支持等宽的字体,所以最好还是采用等宽的字体来转换。

出0入0汤圆

发表于 2010-9-10 12:34:41 | 显示全部楼层
看來我得更新了 哈哈,
看了trunk
不過好像只有一整Byte的更新??

出0入0汤圆

发表于 2010-9-10 15:21:50 | 显示全部楼层
支持一下,也来好好研究下

出0入663汤圆

发表于 2010-9-10 15:43:27 | 显示全部楼层
回复【10楼】appele
看來我得更新了 哈哈,
看了trunk
不過好像只有一整byte的更新??
-----------------------------------------------------------------------

按常用的字体宽度考虑,整byte的为多,最内层循环按整byte处理,减少循环中的if判断。即宽度为8的倍数的字体,渲染效率最高,不为8的倍数的,会有少许多余指令。

出0入0汤圆

发表于 2010-9-10 18:02:52 | 显示全部楼层
请问appele 回复【7楼】appele
-----------------------------------------------------------------------

请问你这个是在什么上调试的?我用 bbs上那个vc工程就没显示出来

出0入0汤圆

发表于 2010-9-11 00:32:36 | 显示全部楼层
謝謝 gzhuli 咕唧霖 的說明,
長知識了


nibia

我用VS 2010 ,也是bbs上那个vc工程

出0入0汤圆

发表于 2010-9-11 09:57:39 | 显示全部楼层
回复【14楼】appele
-----------------------------------------------------------------------

bbs上的vc例程是比较旧的代码了,我更改了svn上trunk 下的gui 和example部分 。一直都不行,改成你的代码可以了,是宽度不对的问题。

出0入0汤圆

发表于 2010-10-25 22:20:18 | 显示全部楼层
好东西,用不用rtgui都要顶;

出0入0汤圆

发表于 2011-4-25 16:07:27 | 显示全部楼层
怎么回事,这个程序有问题吧,导入size为12的字体,结果是正常的,导入size为16的字体,生成数据的长度却远大于16,如下

/*---char:   ---*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    /*---char: ! ---*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    /*---char: " ---*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x7e,0x00,0x7c,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

struct rtgui_font_bitmap microsoft_sans_serif10_16 =
{
        (const rt_uint8_t*)font_data,                 /* bmp */
        8,                                         /* width */
        16,                                 /* height */
        32,                                         /* first char */
        127                                        /* last char */
};

struct rtgui_font microsoft_sans_serif10_16_font =
{
        "microsoft sans serif",                                 /* family */
        16,                                 /* height */
        1,                                         /* refer count */
        &bmp_font_engine,         /* font engine */
        &micro;soft_sans_serif10_16,                                /* font private data */
};


已解决,原因是版本升级了

出0入0汤圆

发表于 2011-6-20 17:53:04 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-12-20 16:34:16 | 显示全部楼层
mark!!学习

出0入0汤圆

发表于 2012-2-12 20:58:29 | 显示全部楼层
mark等着下来用下看

出0入0汤圆

发表于 2012-3-29 16:59:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-4-11 15:10:19 | 显示全部楼层
好像这个软件只能产生英文,不支持汉字,请问要怎么做才能生成历程里hz16font.c文件呢???

出0入0汤圆

发表于 2012-10-30 16:35:31 | 显示全部楼层
没明白是做什么 用的。

出0入0汤圆

发表于 2012-11-5 11:11:40 | 显示全部楼层
cool                                          
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 23:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表