Aexi(4)-字体

2024-08-24 00:32
文章标签 字体 aexi

本文主要是介绍Aexi(4)-字体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

已经好久都没有更新博客了,确实最近本大二狗学校里面的事情比较多,终于处理完了,下面更新博客的速度也会加快的.而且这个项目确实拖了比较长的时间了,我也给自己设置一个DeadLine吧.下月10号将PC平台上的Aexi完成,下月20号之前将其移植到Android平台上,并抽象出主要部分,封装成一个库发到Github上面.

    下面就开始这次博客的内容,这次博客的主要想写一个开发过程中的小问题—字体.下面先简单介绍一下目前的项目主要类结构.


UML简图一张(本人没有系统的学过UML,各位看官不要深究细节哈).

可以看到,每个继承自GlyphImpl的对象都有一个frame属性,frame属性(命名来自iOS),记录了该Glyph的位置以及宽高信息.这个frame的值由compositor对象中的compose方法中进行赋值.然后在compose方法执行完毕排版结束之后,调用每个Glyph的drawme()方法绘制自身.其中,drawMe()方法中就会使用赋值过的frame中存储的信息进行绘制.

    主要的过程都介绍完了,在实际开发过程中,我们遇到了一个非常令人费解的现象.请看图:


可以清楚的看到,我们的Caret对象跑到了文字的下面.

为什么会出现这种问题呢?是我们的参数传递的有问题吗?为了验证,我又新建了一个项目,绘制了几个图形,请看图.


在Y值传入的参数相同的情况下,drawString方法绘制的文字和其他图形绘制方法绘制的图形的位置就是不一样.

    根据图上显示的位置,其实很容易就认为其实文字绘制的起始点坐标在文字的左下角,因为图上很明显,传入相同的Y 值,而文字绘制在上,图形绘制在下面.但是实际上这样想很接近了,但是还是不对.我们将图片放大了看,请看图:


放大了看,其实还是有几个像素伸下来的,所以并不是整个文字的左下角.

    那么这到底是怎么回事呢?

    遇到这样的问题,我们就要去查找万能的API文档了.首先我们想到的是Font类.在搜索遍了font类后,笔者找到了关键所在,那就是fontMetrics类.


    实际上,Graphics的DrawString()方法中给出的x参数和Y参数就是字体文件的baseLine的左顶点的坐标.


看不清楚baseLine看上面这张图就可以了.

    那么在代码中如何获取到asent和desent的数据呢?废话不多说上代码.

.

通过sun.font.FontDesignMetrics这个类的getMetrics方法,可以获取到一个现成的font类的fontmetrics对象,这个对象就封装了该font的这些信息.调用相应的方法就可以获取到了

    最后一个问题,我们在排版时,显然不希望对frame赋值时需要计算相应的数值而对character区别对待,并且每个文字的大小显然不能由外部来决定,而应该由该character的字体的大小来决定.为了能对外提供统一访问的对待,我们仍然把frame的x,y当成该字体的左上角来对待,而在字符的绘制方法时,将其转换为基线坐标.代码如下.


这样我们就可以实现文字和图形的统一排版了

 

这篇关于Aexi(4)-字体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100938

相关文章

【超简单】1分钟解决ppt全文字体一键设置

省流 ppt的全部字体需要在“幻灯片母版”里面,“自定义字体”去设置好标题与正文的字体之后才算全部设置完毕 “视图”---“幻灯片母版” 找到“字体”---“自定义字体” 设置好中文和西文的字体,都可以按照自己的选择来,保存即可 吐槽 之所以发这么一个基础的帖子是因为,之前全网到处搜都没看到成功设置了的,其实才发现在自定义里面得多一步这个才可以,还好早发现了,希望能

【字体反爬虫】woff字体反爬虫实战

目标:http://www.porters.vip/confusion/movie.html 目标是抓取用户评分,评分人数,累计票房,三个字段。简单一看很简单是不是,我们查看源代码,发现不是那么容易。 跟我们看到的并非如此啊。这是什么操作,仔细分析网络请求,我们发现这是使用了字体反爬虫的技术,那么我们如何破解呢? 首先我们得用网络请求这个字体文件,然后下载下来。 woff_url

Linux中Ubuntu系统安装Windows得字体

背景 安装了geoserver 然后geoserver中需要用到微软雅黑字体 所以需要安装一下Linux系统安装Windows中的字体 创建字体目录 cd /usr/share/fonts/mkdir winfont 在Windows找到对应字体 C:\Windows\Fonts 复制该字体到桌面 Linux系统中上传字体 root@test-server03:/usr/s

eclipse中设置中文字体变大,注释字体变大,不跟代码字体一起变大

windows-preferences-general-appearance-colours and fonts 在basic里面找到最后TEXT FONT,点edit,在右下角脚本里面将西欧语言改成中欧语言 解决

Python xlwt设置excel单元格字体及格式

本文根据自己初学经验编写的使用xlwt模块设置单元格的一些基本样式,如设置单元格的背景颜色,下框线,字体,字体的颜色,设置列宽行高,插入简单的图片,详细程序如下: #!/usr/bin/env python# -*- coding: utf-8 -*-” #只对当前文件的中文编码有效 #C

Qt给字体设置下划线

使用如下的代码即可将字体初始化为带下划线的格式 lb_register = new QLabel("<u>没有账号?注册一个</u>",this);

Qt 设置QLabel的字体为斜体

QFont font("Microsoft YaHei", 8, 50, true);//第一个参数是字体(微软雅黑),第二个是字体大小,第三个是加粗(50代表正常),第四个是斜体(true代表斜体)lb_register->setFont(font);` 或者是 QFont font("Microsoft YaHei", 8, 50);//第一个参数是字体(微软雅黑),第二个是字体大小,第

【数据应用案例】通过字体识别国籍

案例来源:@量子位 案例地址:https://mp.weixin.qq.com/s/m8IQNuCZUCHUUzw1OZEJpg   1. 目标:基于字体,识别国籍(中国、印度、马来西亚、孟加拉国、伊朗五个国家)   2. 数据预处理     1)处理文本图像中的噪点     2)抽取行文本图像   2. 特征工程     1)字母间距离     2)Cloud of

会声会影2024是一款功能强大的专业视频制作软件及会声会影字体怎么安装

字幕在视频中扮演着多重角色,对于不同类型的观众都有重要意义。通过提供文字信息,字幕帮助观众更好地理解视频内容,特别是对于那些听力受损或不懂视频语言的观众来说,字幕是他们获取信息的重要途径。这篇文章就一起来看看会声会影字体怎么安装,会声会影字体怎么导入。 一、会声会影字体怎么安装  视频编辑软件如会声会影通常内置了许多字体供用户选择使用。这些内置字体具有不同的风格和特点,可以根据视频的主题和

div+css之CSS 文本设置 CSS 字体设置 CSS 列表设置 CSS 表格设置 css outline轮廓

1、CSS 文本设置: CSS 文本属性    属性             描述 color          设置文本颜色 direction      设置文本方向。 line-height      设置行高。 letter-spacing  设置字符间距。 text-align      对齐元素中的文本。 text-decoration  向文本添加修饰。 text-indent