精华内容
下载资源
问答
  • 解决方法:需要添加content size fitter组件 如下:选中需要自适应的text 对象,添加content size fitter组件水平适配和垂直适配都选择“最合适大小”(即选择Preferred Size)...

    解决方法:

    需要添加content size fitter组件 如下:

    选中需要自适应的text 对象,添加content size fitter组件

    水平适配和垂直适配都选择“最合适大小”(即选择Preferred Size)


    展开全文
  • LVGL Font 字体

    千次阅读 2020-09-17 09:57:15
    当我们要在单片机或其他一些小型系统中显示非英文字符如汉语、韩语,同时又不想整个字库刷到设备中时,我们就需要我们用到的这些字符一个个地使用取模软件取出字模数据放到我们的程序中,操作相当繁琐。...

    MCU_Font 自动字模提取工具

    1.做这个软件的初衷

    当我们要在单片机或其他一些小型系统中显示非英文字符如汉语、韩语,同时又不想将整个字库刷到设备中时,我们就需要将我们用到的这些字符一个个地使用取模软件取出字模数据放到我们的程序中,操作相当繁琐。

    因此我就想做一个工具,能够自动从我们的代码中提取需要显示的字符,自动的转换为字模数据,而且显示方便。

    2.软件原理

    软件先从我们的代码中取出需要显示的字符,然后将字符转为字模数据,再将字幕数据按照预定的格式存储为字体的.c文件,最后由单片机程序对字模数据解析并显示。

    • 取出需要显示的字符

      软件将自动提取所有被双引号""包围的字符,并会自动屏蔽掉被 // 和 /**/ 注释掉的字符,头文件包含的双引号也会屏蔽。

    • 将字幕数据按照预定的格式存储为字体的.c文件

      为了后期能和 littleVGL (LVGL)的UI库兼容,字体文件的格式和 LVGL 的字体格式一样,字体文件中主要存储两种信息,一种是字模数组数据另一种是对应的unicode编码数组数据。单片机解析字体时是根据unicode编码来找到对应字符点阵数据的。

    • 字体文件格式

      这里对未接触过 LVGL 字体格式的小伙伴做个提醒,生成的字体文件中的点阵数据不像我们平常在单片机中使用的字模。

      首先每个字符的点阵数据所占字节数不相等,比如单引号",“和”@"字符,他们所占的字节数是不相等的,这样做是为了节省空间将字符中空的行和列的地方不转化为点阵。这样的话就需要其他信息来控制字符的显示位置。因此字模数据中除了字模点阵数组、unicode数组外还有有个重要的数组 glyph_dsc[],其内容如下:

      .bitmap_index , 字符对应的字模数据索引

      .adv_w, 字符宽度

      .box_w, 字模宽度

      .box_h, 字模高度

      .ofs_x, 字模水平方向偏移(右边为正向)

      .ofs_y 字模竖直方向偏移(上边为正向)(当字符需要在基线以下显示时使用这个参数让字模下沉)

      /* U+5f "_" */  
      {.bitmap_index = 1974, .adv_w = 152, .box_w = 10, .box_h = 1, .ofs_x = 0, .ofs_y = -3},
      ...
      /* U+67 "g" */  
      {.bitmap_index = 5824, .adv_w = 264, .box_w = 14, .box_h = 19, .ofs_x = 1, .ofs_y = -4},
      
    • 解析字体文件

      程序会先得到待显示字符的 UTF-8 编码,然后将 UTF-8 转为 uncode 编码,再在字体文件中的 unicode 数组中查找对应的 unicode 编码的索引 ,再由索引查得 glyph_dsc 中相应字符的数据。由于 unicode 是按照升序排列可以使用中值查找法提高查找速度。

      如要详细了解如何解析字体文件,可查看 LVGL 源码。

    3.使用演示

    LVGL中同时显示中文、韩文、日文、以及图标字体

    这里我们使用LVGL的 lv_demo_printer_scr 仿真示例程序,我使用的环境为 Qt Creator。

    LVGL 官方 lv_demo_printer 示例运行后如下:

    1600237615029

    接下来使用我的小工具 MCU_Font 在上面界面中同时显示 中文、 韩文、日文、以及图标字体。

    首先打开 MCU_Font 工具,打开后界面如下:
    在这里插入图片描述

    导出字体名称:生成的字体文件名称 这里我们填 “lv_font_montserrat_22” LVGL 在本示例中 使用了这个字体

    导出字体路径:导出的字体文件存放的路径,这里根据你们的实际存放路径来填,我的路径是 D:/webPro/littlevGL/pc_sim_lvgl/pc_sim_lvgl/lvgl/src/lv_font

    读取路径添加:添加需要提取字符的程序代码路径,可以选文件也可以选文件夹。如是文件夹的话会遍历该文件夹内部所有文件,但不会递归继续读取下层文件夹。这里我直接选择 demo 的.c文件 lv_demo_printer.c,如下图

    1600240941517

    由于我们要显示多种字体,点击左上角多字体按钮后进入如下界面:

    1600239561528

    按照上图所示设置字体,软件会先从第一个字体查找字符,如查不到字符再从下一个字体查找,因此排在靠前的字体优先级高一些。当所有选择的字体都查不到该字符时会弹出提示。

    第二个为韩文字体,第三个为日文字体,这两个都是Window系统自带的,最后一个为图标字体,接触过前端的人应该都知道这种字体,需要到 FontAwesome 官网下载该图标字体的字体文件并安装后,便可在 MCU_Font 工具里选择该字体。

    这里设置字体大小时最好保证每种字体行高差不多。

    抗锯齿我们选择 4bpp 。

    接下来我们按如下所示修改 LVGL的 demo 代码来同时显示中、韩、日、及图标:

    icon = add_icon(box, &lv_demo_printer_img_copy, "加油", lv_color_hex(0xbf3ebf));
    lv_obj_align_origo(icon, NULL, LV_ALIGN_IN_LEFT_MID, 1 * (box_w - 20) / 8 + 10, -15);
    lv_obj_set_event_cb(icon, copy_open_icon_event_cb);
    
    icon = add_icon(box, &lv_demo_printer_img_scan, "努力", lv_color_hex(0x4b55c4));
    lv_obj_align_origo(icon, NULL, LV_ALIGN_IN_LEFT_MID, 3 * (box_w - 20) / 8 + 10, -15);
    lv_obj_set_event_cb(icon, scan_open_icon_event_cb);
    
    icon = add_icon(box, &lv_demo_printer_img_print, "奋斗", lv_color_hex(0x46b147));
    lv_obj_align_origo(icon, NULL, LV_ALIGN_IN_LEFT_MID, 5 * (box_w - 20) / 8 + 10, -15);
    lv_obj_set_event_cb(icon, print_open_event_cb);
    
    icon = add_icon(box, &lv_demo_printer_img_setup, "欧耶", lv_color_hex(0xe22e2f));
    lv_obj_align_origo(icon, NULL, LV_ALIGN_IN_LEFT_MID, 7 * (box_w - 20) / 8 + 10, -15);
    
    lv_obj_set_style_local_value_str(box, LV_CONT_PART_MAIN, LV_STATE_DEFAULT,
                "你好-열심히일-おはようご- -");//这里同时显示3种语言,最后2个是图标字体
    

    最后两个是图标字体的两个符号,在后面我再介绍如何使用 MCU_Font 工具获取图标字符,我们先继续,先让效果出来。

    修改完以上代码后,我们先保存下,再切换到 MCU_Font 工具,点击生成。

    1600240693195

    最后出来如下提示,表示生成成功。

    1600241359828

    最后我们再次运行 LVGL 的 demo 程序如下所示:(可以看到最后一行同时显示中、韩、日及图标)

    1600241514504

    4.图标字符提取

    要使用图标字体需要到 FontAwesome 官网下载该图标字体并安装后,便可在 MCU_Font 工具里选择该字体。

    安装完图标字体后,先选择图标字体、再点击字库浏览,如下图:

    1600241873071

    点击 “字库浏览” 后进入如下界面,图标字符的 unicode 编码是从 0xF000 开始的,我们在 “unicode编码” 输入框中输入 F000 后便跳到可用的图标字体页,如下图所示:

    1600242299902

    我们选择想要的图标后,便可以看到靠下侧的 “字符符号” 会显示相应符号。我们只要将该字符符号复制到我们的代码中保存后,再使用 MCU_Font 工具生成,便可显示该图标。

    5.后记

    当我们把字符符号拷贝到我们的代码中时会发现是个空格或框框,这其实不影响我们 MCU_Font 的使用,只是我们自己看不到而已。这是因为我们的 IDE 编辑器设置的不是图标字体,我们可以把编辑器选择为图标字体来显示图标。但是有的编辑器就不支持图标字体比如我们单片机开发者经常使用的 keil ,但这其实对字模的生成是没影响的 。

    Qt Creator的编辑器是支持图标字体的,下面我们来在 Qt Creator 编辑器中让他显示出来看看

    先要将 Qt Creator 的字体选择 图标字体 并应用如下图:

    1600243379865

    应用后可以看到编辑器中可以显示出图标字体的符号了,如下图:

    1600245429381

    但是其实使用图标字体后,编辑器的字体样式可能就不是我们喜欢的了,所以编辑器中还是选择我们自己喜欢的字体,图标看不到的话我们可以使用备注,或者做成宏定义就好了。

    后续将在战舰开发板上演示 MCU_Font 的使用,主要是需要在你的代码中修改字模数据的提取函数,可以参照 LVGL 的方式提取。

    6.软件获取地址

    本软件如对你有帮助,可以打赏我一下,哈哈(点击 MCU_Font 软件的右下角“打赏”,里面有我的二维码,1毛2毛也是对我的鼓励,哈哈)。你可以在 gitee 上查看使用说明,获取新版本或者给我留言,我会尽力把工具做的更好。

    MCU_Font 地址 https://gitee.com/WuBinCPP/MCU_Font_Release

    冷太阳(吴斌) 于 宁波 2020-9-16

    展开全文
  • Android TextView设置自定义字体

    万次阅读 2018-08-21 20:21:33
    前言:这个版本的开发中,伟大的ue们重新给了新的字体文件让我们给换上,做法很简单,我自然就给换上了,但是这次不同以往的是...1.下载好的字体 asset下面,类似下面图片: 2. 获取字体 : Constant...

    前言:这个版本的开发中,伟大的ue们重新给了新的字体文件让我们给换上,做法很简单,我自然就给换上了,但是这次不同以往的是出了一些效果的问题,所以就当记个笔记写出了这篇很low的文章。

    以下为笔记的写法,允许吐槽,欢迎吐槽。。。

    Android TextView怎么设置自定义字体呢?很简单:

    1.将下载好的字体库放入到 asset下面,类似下面图片:

    2. 获取字体 : Constants.fontFace = Typeface.createFromAsset(getAssets(), "fonts/DroidSans.ttf");

    3.给需要的控件设置字体:textview.setTypeface(Constants.fontFace);

    好了,就是上面这么简单!!

    但是上面的用法是次要的,只是顺便给写出来,下面是设置特殊字体后对textview控件的影响,我测试后罗列了几条,如果你碰见了类似的问题,可以参考参考:

    1. 自定义字体与android:ellipsize属性冲突,某些手机会造成行之间文字重叠。
    2. 用wrap_content时,textview设置自定义字体时view顶部和底部都会多出一部分留白的内间距。
    3. textview同时设置了maxLines时和自定义字体时,如果文字内容没有达到最大行数,view顶部和底部都会多出一部分留白的内间距;如果文字达到了最大行数,view只有顶部会多一部分留白的内间距。
    4. includeFontPadding="false"设置对留白效果有效,可以清理掉大部分设置自定义字体造成的view顶部和底部留白,但是不能全部清理,还会有一点间距。
    5. 当textview高度写成固定数值时,内容过长一直换行超过高度,则会只有顶部空出部分留白间距,如果内容长度换行不够view高度,则上下都会有留白间距。

     

    ok,到此就   see you   了

     

    展开全文
  • linux 字体模糊

    千次阅读 2017-06-14 01:21:44
    不得不说 linux 对中文字体 ,没有windows 那么专业; 看着很不舒服;虽然可以 安装windows 的字体 但由于渲染的方式不同,效果并不理想 字体种类  常用的是点阵字体和矢量字体,具体见Computer_font。 ...

    不得不说 linux 对中文字体 ,没有windows 那么专业;  看着很不舒服;虽然可以 安装windows 的字体 但由于渲染的方式不同,效果并不理想


    字体种类

            常用的是点阵字体和矢量字体,具体见Computer_font

            点阵字体:

            后缀名一般为fon或者是C语言头文件形式。看讲字体渲染文章都是吐槽的,但是没有人以身边例子说明一下。它的英语原型为Bitmap fonts,直译过来就是位图字体。所有的字都是一个个的图片。电脑上虽然已经不使用了,但是在其它地方还广泛使用。  

            它的应用场合有:

            1.Linux字符界面

            2.Windows启动过程中的字符显示

            3.Android的Recovery模式的字符显示 见《Android的Recovery中font_10x10.h字库文件制作

            4.路边商家门头上的滚动LED显示屏

            5.工业中常用的12864点阵显示屏

            矢量字体:

            后缀名一般为ttf。由于点阵字体不方便缩放的特点,就有了矢量字体。但是也会有一些其它问题需要解决,如果锯齿现象。在Windows中叫ClearType;在android中是FreeType.它们都是TrueType的衍生版本。后缀名都以TrueType头字母ttf为准。

     

    字体优化

            字体的优化是一般包括反锯齿和平滑。这里以比较常用的Win7系统中的雅黑字体来说明。结合Windows的“相对完美”的显示效果以及linux的“可订制性强”的特点来实验出同一字体在不同的渲染策略中将会呈现什么样的显示效果。

     

            这张Win7系统桌面的部分截图显示的雅黑字体的Windows风格的最佳效果了。如果想要看到反锯齿和平滑的不同参数组合带来的最直接的感受就要到Linux系统下来调整看看了。调试不同的渲染效果一般采用Ubuntu tweak工具来设置调试:

     

    参数中英对照

    Font hinting(微调/平滑):

    1.No hinting.   无微调

    2.Basic        一般

    3.Moterate     适中

    4.Maximum    最大

     

    Antialiasing(反锯齿_也指渲染策略):

    1.No antialiasing        无边缘平滑

    2.Grayscale antialiasing  灰度边缘平滑

    3.Subpixel antialiasing   次/像素平滑

     

    通过调节对比Windows上是Hinting:Maximum和Antialiasing:subpixel antialiasing是达到最好的效果的。

     

    这里也同时看看不现组合带来的不同效果:

    极端组合效果:


     

    个人评价:再好的字体不使用好的渲染也是渣。且会显明感觉到这个字体放到手中会产生剌手。这属于正锯齿,就需要反(抗)锯齿来修复。


     

    个人评价:Hinting作用比较大,效果明显。


     

    个人评价:字体模糊/发虚等问题的根本。反锯齿可以修复锯齿现象,却会产生边缘模糊的现象。


     

    个人评价:次像素是目前各个操作系统都在使用的方式,Hinting对字体的显示效果有很大的影响

     

    小结:字体最终的显示效果和字体的类型以及优化程度同时有很大的关系。是向以清晰为目的的Windows看齐还是以真实为效果的iOS/Android/Ubuntu看齐就要因地制宜了。在万恶的1366x768以及低PPI上显示器上我会选择前者,因为后者真心就是一坨。在今后的Retina显示屏会有第三个选项选择,那就是不再使用次像素反锯齿了。另:有些知识过了很长时间会被串起来的。


    (文章转载,仅是个人学习之用,如有侵犯;本人立即删除!)

    展开全文
  • 我在上一篇文章中写了一个最新版本的导出fnt字体的方式,主要就是uv和vert的变化。 这两天发现,有时候我们需要的艺术字体,并不是ttf这种字体格式的文件,而有可能是美术人员自己动手画的艺术字,这个时候就没法用...
  • uiw-iconfont v1.2.4 已发布,uiw-iconfont 是从 uiw 组件库抽离出来的图标字体,基于 svg 图片生成的图标字体。更新内容新增 environment, eye, folder, man, user-add, user-delete, usergroup-delete, woman, 等8...
  • 浅析Android字体加载原理

    千次阅读 2017-08-08 09:27:54
    浅析Android字体加载原理前言 之前在处理系统字体问题的时候,可借鉴的资料很少,遇到了很多坑,不得不了解Android字体加载原理,现抽空写一篇总结,来加深自己对这块的理解。内容概述 Android字体系统是由底层的...
  • Qt界面字体大小设置和更改字体

    千次阅读 2012-04-07 18:09:56
    在Qt中经常会涉及界面字体大小的设置,默认字体一般比较小,特别是在移植开发板上进行显示一般都要放大字体,因为开发板上液晶显示屏幕分辨率都是非常的小,跟电脑显示有很大差别。  一种整体界面字体设置的...
  • Android 自定义字体样式

    千次阅读 2016-05-18 10:14:32
    参考:http://www.2cto.com/kf/201501/367220.html ... 一、自定义字体 1.android Typeface使用TTF字体文件设置字体 我们可以在程序中入ttf字体文件,在程序中使用Typeface设置字体。 第一步,在assets目录下新
  • 本文介绍使用图标字体和SVG取代雪碧图的方法。雪碧图是很多网站经常用到的一种技术,但是它有缺点:高清屏会模糊、无法动态变化如hover时候反色。而使用图标字体可以完美解决上述问题...多张小图至一张大图 使
  •   在学习lvgl中,在英文字体上很多人都用过,但是中文字体往往需要靠取模去实现。那么我就在想,如何像windows那样加载动态的字体呢,这样想做多大字体都行。于是就开始了字体的移植。 什么是ttf字体:   字库是...
  • 浅谈字体渲染

    千次阅读 2014-08-10 01:59:16
    由于某个需求,我需要了解一下关于字体渲染相关知识,以前没有接触过这个,所以启蒙就只能靠Google了。我先后找到了《认识字体渲染》和《一笔一划间蕴藏的学问 浅谈计算机字体》,有一点明白了,但只是看文章感觉很...
  • 我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单许多。首先是定义一个TextBlock如下。 VerticalAlignment="Center" FontSize="68" Foreground="Green
  • 经过了之前大量mfc已经明白了许多功能,但是之前的项目一直没有使用mfc的菜单功能,菜单是Win32功能很常见的东西,这个也必须要懂。其实菜单的建立也很简单,配合之前的文件操作功能,已经能够把开始->附件->...
  • 设计元素——字体

    千次阅读 2011-05-25 10:23:00
    文字作为做常见、最大的信息传递方式,遍布我们生活的每个角落。也为此,注定了它是每一个设计中最主要的元素之一。大多数设计人员在页面上使用多种字体,往往是随机的,即兴的,完全依赖于自己的喜好或者感觉。然,...
  • OpenGL: 位图字体

    千次阅读 2014-06-30 13:43:59
    图像字体A: 这一课我们创建一些基于2D图像的字体,它们可以缩放,但不能旋转,并且总是面向前方,但作为基本的显示来说,我想已经够了。 使用位图字体比起使用图形字体(贴图)看起来不止强100倍。你可以随时改变...
  • 文字和字体

    千次阅读 2005-02-23 19:41:00
    显示文字是本书所要解决的首要问题,现在我们来研究Microsoft Windows中各种有效字体字体大小的使用方法以及调整文字的方式。Windows 3.1发表的TrueType使程式写作者和使用者以灵活的方式处理文字的能力大幅增强。...
  • Unity自定义字体的实现

    千次阅读 2018-10-31 10:15:33
    最后成功的同志们,要注意看回来这里,Color要设置为白色的,不然原来的字体颜色会受这个影响,如果看不到字体,请把字体UI拉大一点就能看到了。 准备一个图集,没有的话,可以去百度找找,然后设置为如下的图...
  • linux字体技术原理

    千次阅读 2011-10-10 23:44:29
    linux字体技术原理  2008-09-27 10:44:07| 分类: linux |字号 订阅 我们要理解X的字体引擎. X中支持Truetype字体(一种可放缩字体) 的主要有四种引擎. freetype, xtt, xfs和Xft.
  • 矢量字体字形分布图

    千次阅读 2016-06-28 07:46:49
    advance有x方向的,当然有y方向的,不过这里没有使用,使用y方向会使字体倾斜。 虽然有坐标基准线,但是英文字体不像汉字方方正正,如果把所有英文字体搞得像汉字一样,那么会很不好看,所以即使在已经订好基准线...
  • 计算字体大小及尺寸

    千次阅读 2013-08-01 18:22:35
    Computing Metrics for a Single Line of Text – sizeWithFont: 同下面,换行方式默认取...字符串入指定宽度,如果不够,就依据换行方式截断字符串,返回其大小。 – sizeWithF
  • 基于Qt的FreeType字体轮廓解析

    千次阅读 2013-09-12 14:22:06
    以前的文档中、详细的介绍了FreeType开源字体引擎库的基础知识、基本用法、但并未详细的阐明在TurboCG中、是如何解析出一个文字的轮廓的,本文集中阐述、怎么样使用FreeType开源字体引擎库、读取一个文字的轮廓、...
  • size属性:字体大小 取值:1-7 可以为负数,为负数字字体会变小,超出7以最大值为准 默认为3 (官方取值1-7,无特殊情况,不要使用负数) 加粗字:<b>...标签中的内容字体会加粗 斜体字:<i>...标签中的...
  • emacs 字体配置

    万次阅读 2013-07-27 10:20:29
    然后,把光标放到你所在的字体上,用命令 M-x describe-font 来查看你当前使用的字体名称、字号大小。 把其中的字体信息拷贝出来,写到 .emacs 文件里 (set-default-font “-outline-Courier New-normal-italic-...
  • 这一课我们创建一些基于2D图像的字体,它们可以缩放,但不能旋转,并且总是面向前方,但作为基本的显示来说,我想已经够了。 使用位图字体比起使用图形字体(贴图)看起来不止强100倍。你可以随时改变显示在屏幕...
  • 编码,字体与字库

    千次阅读 2011-04-02 10:24:00
    2010-08-27 16:41 字体 (就是font文件中内容)分为点阵字体与矢量字体两大类 点阵字体,是把每一个汉字分成 16 x 16 或者 24 x 24个点,然后用每个点的虚实来表示汉字的轮廓,常用来作为显示字库使用,这类点阵...
  • HTML字体大小的设置

    万次阅读 2014-10-22 11:57:36
    网页中常用的字体尺寸定义有7个号,1号字最小,7号字最大,定义字号的   指令代码是尖括号内:  为了便于正常显示,暂时用[ ]代替。   各种字号尺寸如下:   [font size=1]一号字尺寸式样 [/font...
  • Linux-Ubuntu 18.04主题美化及字体安装 Ubuntu18.04发布后,最大的改变估计就是桌面改版了,由原来16.04的untiy转变成了gnome。 1.安装美化管理器Tweaks (系统中文名为优化) ctrl+alt+t打开终端 安装...
  • 简介: 本文是 MiniGUI 体系结构系列文章的第三篇,重点介绍 MiniGUI 的逻辑字体支持,主要内容涉及 MiniGUI 中以面向对象技术为基础构建的多字体和多字符集支持,并举例说明了如何在 MiniGUI 中实现对新字符集和新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,360
精华内容 20,144
关键字:

怎样将字体放到最大