gpt4 book ai didi

android - 在 native c 的 android ics 中绘制复杂文本

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:38 25 4
gpt4 key购买 nike

注意:我的整个 senario 仅适用于 android 版本的 ICS。

我的目标是呈现具有复杂脚本/印度脚本的文本。在 ICS 中,此功能已添加到 WebView(以及浏览器)中。如果在浏览器或 WebView 中呈现任何印度文字,则它会正确呈现。但在其他小部件(TextView、EditText)中它呈现损坏。

现在我的目标是重新使用代码在 webcore 中正确绘制印度文本,并使用该代码在自定义小部件中绘制印度文本。

我还在浏览器中使用 HTML5 canvas 进行了测试,它可以很好地呈现印度文本。我已经测试了 android 的 android.graphics.Canvas,但它未能正确呈现印度文本。

libskia严重缺乏文档,所以我不知道如何使用它来呈现文本。

我检查了 libwebcore.so 的 objdump,发现它依赖于库“skia”“libicu”。所以我假设我可以使用这些库绘制印度文字。

谁能建议我如何使用 skia 和 icu 绘制印度文本?或者任何人都可以指向 libwebcore 中的特定代码段吗?

最佳答案

有几个常用的备用文本堆栈,但都没有直接通过 Android NDK 公开。在基层,您需要:

  1. 将您的文本分成单个脚本、单个字体、单向,单线。
  2. 将每次运行中的字符序列转换为字形。
  3. 在二维空间中布置这些字形,可能会回到步骤 (1)如果你的换行符没有成功。
  4. 栅格化所选位置的字形。

最流行的堆栈大约是 (1) fribidi,(2) harfbuzz-ng,(3) more harfbuzz-ng,(4) libfreetype。所有这些项目都非常容易在 Android 上运行;文档质量参差不齐。

还有 Pango 项目,它位于刚刚描述的堆栈之上,但提供了更高级别的接口(interface)。不幸的是,Pango 有很多依赖项,因此合并 Pango 可能比直接使用堆栈更费力。如果不出意外,Pango 可以作为有关如何使用堆栈的出色文档。

作为备用堆栈,libicu 的各个部分可以替换 fribidi、harfbuzz-ng 和 Pango(最后一个具有几乎未记录的 ParagraphLayout 类);您仍然需要 libfreetype 来实际处理字体和光栅化。请注意,部分 libicu 正在移至 harbuzz-ng,因此这些堆栈并不完全不同;虽然 libicu 的某些部分非常出色并且会定期更新,但其他部分却比较模糊。

关于android - 在 native c 的 android ics 中绘制复杂文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com