4

NB: 私のシナリオ全体は、android バージョンの ICS のみを対象としています。

私の目標は、複雑なスクリプト/インド語スクリプトを含むテキストをレンダリングすることです。ICS では、この機能が WebView (およびブラウザ) に追加されました。Indic テキストが Browser または WebView でレンダリングされる場合、正しくレンダリングされます。しかし、他のウィジェット (TextView、EditText) ではレンダリングが壊れています。

私の目標は、Webcore で適切にインド語テキストを描画するためのコードを再利用し、そのコードを使用してカスタム ウィジェットでインド語テキストを描画することです。

また、ブラウザーで HTML5 キャンバスを使用してテストしたところ、インド語テキストを適切にレンダリングできます。Android の android.graphics.Canvas をテストしましたが、インド語テキストを適切にレンダリングできませんでした。

libskiaにはドキュメントが深刻に不足しているため、これを使用してテキストをレンダリングする方法がわかりません。

libwebcore.so の objdump を確認したところ、lib "skia" "libicu" に依存していることがわかりました。したがって、これらのライブラリを使用してインド語のテキストを描画できると想定しています。

skia と icu を使用してインド語のテキストを描画する方法を提案できますか? または libwebcore の特定のコード セグメントを指定できる人はいますか?

4

1 に答える 1

1

一般的に使用されている代替テキストスタックがいくつかありますが、どちらもAndroidNDKを介して直接公開されていません。基本レベルでは、次のことを行う必要があります。

  1. テキストを1つのスクリプト、1つのフォント、1つの方向、1行に分割します。
  2. 各実行の文字のシーケンスをグリフのシーケンスに変換します。
  3. これらのグリフを2D空間に配置します。改行がうまくいかなかった場合は、手順(1)に戻る可能性があります。
  4. 選択した位置でグリフをラスタライズします。

このための最も人気のあるスタックは、およそ(1)fribidi、(2)harfbuzz-ng、(3)more harfbuzz-ng、(4)libfreetypeです。これらのプロジェクトはすべて、Androidで実行するのは非常に簡単です。ドキュメントの品質はさまざまです。

Pangoプロジェクトもあります。これは、今説明したスタックの一番上にありますが、より高いレベルのインターフェイスを提供します。残念ながら、Pangoにはかなりの数の依存関係があるため、スタックを直接使用するよりもPangoを組み込む方が手間がかかる可能性があります。他に何もないとしても、Pangoはスタックの使用方法に関する優れたドキュメントとして機能します。

代替スタックとして、libicuのさまざまな部分で、fribidi、harfbuzz-ng、およびPango(最後の部分はほとんど文書化されていないParagraphLayoutクラス)を置き換えることができます。フォントとラスタライズを実際に処理するには、libfreetypeが必要です。libicuの一部がharbuzz-ngに移動されているため、これらのスタックは完全に区別されていないことに注意してください。また、libicuの一部は優れており、定期的に更新されますが、他の部分はあいまいです。

于 2013-02-23T04:39:50.290 に答える