用原生c在android ics中绘制复杂文本

用原生c在android ics中绘制复杂文本,android,android-ndk,icu,skia,indic,Android,Android Ndk,Icu,Skia,Indic,注:我的整个senario仅适用于android版本 我的目标是呈现具有复杂脚本/索引脚本的文本。在ICS中,此功能已添加到WebView(以及其他浏览器)中。如果在浏览器或WebView中呈现任何索引文本,则会正确呈现。但在其他小部件(TextView、EditText)中,它呈现的是断开的 现在,我的目标是重新使用代码在webcore中正确绘制索引文本,并使用该代码在自定义小部件中绘制索引文本 我还在浏览器中使用HTML5画布进行了测试,它可以很好地呈现印度文字。 我已经测试了android

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

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

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

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

严重缺乏文档,因此我无法解决如何使用此工具渲染文本

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


有人能建议我如何使用skia和icu绘制印度文字吗?或者有人能指出libwebcore中的特定代码段吗?

有两个常用的替代文本堆栈,但都不是通过Android NDK直接公开的。在基础级别,您需要:

  • 将文本拆分为单个脚本、单个字体和 单方向,在一条线上
  • 将每次运行中的字符序列转换为 字形
  • 在二维空间中布置这些图示符,可能返回到步骤(1) 如果你的断线没有成功
  • 在选定位置栅格化轮廓
  • 最流行的堆栈大约是(1)fribidi,(2)harfbuzz ng,(3)更多harfbuzz ng,(4)libfreetype。所有这些项目都很容易在Android上运行;文件质量各不相同

    还有Pango项目,它位于刚才描述的堆栈顶部,但提供了更高级别的接口。不幸的是,Pango有很多依赖项,因此合并Pango可能比直接使用堆栈更费力。如果没有其他东西的话,Pango是如何使用堆栈的优秀文档


    作为一个替代堆栈,libicu的各个部分可以替换fribidi、harfbuzz ng和Pango(最后一个部分是几乎没有文档记录的ParagraphLayout类);您仍然需要libfreetype来实际处理字体和光栅化。请注意,libicu的部分内容正在转移到harbuzz ng,因此这些堆栈不是完全不同的;尽管libicu的某些部分非常优秀,并且定期更新,但其他部分则比较模糊。

    您可能不想发布与库的非公开细节相关的特定于构建的代码。虽然Android供应商/运营商推送更新的速度通常较慢,但当他们推送更新时,他们往往是强制性的。此外,您可能会发现,它不能跨供应商工作。你可以使用webview进行渲染吗?@ChrisStratton使用webview实际上有些过分。这会减慢速度。我想我可以用我的应用程序打包这些库,或者想出一些办法。我现在不想发布/分发,我想先做一些事情。ICU建议使用harfbuzz做harfbuzz做的事情。(icu图书馆)。我不确定这堆东西有什么不清楚的地方——我很好奇你的意思。