首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问原生Android矢量数据以获取字体?

问访问原生Android矢量数据以获取字体?
EN

Stack Overflow用户
提问于 2015-09-30 18:17:20
回答 1查看 1.1K关注 0票数 1

我在Android中使用矢量图像,我需要访问实际的字形数据。就像构成字体的贝塞尔曲线一样。有什么方法可以访问这些数据吗?我一直在讨论将字体转换为SVG和阅读这些字体,因为我已经具备了这种能力。或者编写自定义的TTF解析器。但是,这些解决方案还需要下载或添加一堆额外的TTF或SVG资产。也许还有很多可能不需要的工作。

有什么方法可以访问给定字体的字形数据吗?

如果失败了,有没有办法访问实际的ttf (或Android使用的任何字体类型)文件?

​

​

我正在直接处理矢量图像,并操纵用于构建矢量图像的实际曲线。这意味着需要实际访问曲线。为了构建这个特殊的字母,哪条曲线在哪里。我不想要一个位图或者Android中的harfbuzz最终想出并推入GL的东西,我想要访问用于制作字体的实际曲线。这意味着我可以编写自己的字体解析器并包含自己的字体资产,但所有这些都内置在Android中,但都是在C级别。

我不希望包含一个字体解析器或一堆字体。Android包含了这两种功能,它们是从java级别无法访问的,还是可能存在一些技巧?

我需要字体中的矢量图像。例如字母A的矢量图像。用于构建字母的直线和曲线。我不需要任何字距调整或em数据,或者丢失的字形信息。我想要访问它,而不必将整个解析器和一堆字体资源导入到我的程序中,只是为了获得矢量图像,字体的字母是由这些矢量图像组成的。

EN

回答 1

Stack Overflow用户

发布于 2018-04-01 17:08:20

以下是针对您的需求的解决方案。请继续阅读。

字体大多只是轮廓。也就是说,在你的帖子中,字母"H“上面的虚线是字形的路径。如果你给笔画一种颜色,你就会看到该颜色的字母轮廓。如果您填充它,则字母将以该颜色实心显示。

您可以使用fontforge组织的“字体编辑器”来获取路径数据。fontforge的软件是免费的(他们接受捐赠)。如果你想要中心线,而不是轮廓,那么你必须绘制中心线,然后将其导出为SVG文件。您将一次导出单个字母。您可以在写字板中打开SVG文件并获取中心线的路径数据。无论字形如何弯曲,你都可以很容易地画出中心线。有时你甚至可以改进中心线上字形的形状。如果它是中心线,那么当您再次绘制时,笔划将具有均匀的粗细。不像原来的字形那样,线条(中心线)的粗细逐渐变化。你可以在几天内掌握字体编辑器。

请参见下面的字形。将下面的代码复制并粘贴到Android Studio中的xml文件中,可以看到以蓝色color.That绘制的字形是厚度为32dp的中心线,而不是轮廓和填充。

代码语言:javascript
复制
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="600dp"
        android:height="600dp"
        android:viewportWidth="800.0"
        android:viewportHeight="800.0">

    <path
        android:pathData="M  162   8
        q    -07    00   -41    26
        q    -34    27   -50    64
        q    -25    59   -19   117
        q     07    70    53   121
        q     57    63   151    62
        q     87   -01   140   -66
        q     46   -55    48  -142
        q     01   -56   -34  -105
        q    -38   -52   -77   -70
        l    -29   -11
        q     16   -01    31   -02
        q     59   -01   119   -02  "

        android:strokeLineCap="round"
        android:strokeColor="#f00f"
        android:fillColor="#00000000"
        android:strokeWidth="32"/>



</vector>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32863554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档