JP2017116859A - 文字描画装置および文字描画方法、コンピュータプログラム - Google Patents
文字描画装置および文字描画方法、コンピュータプログラム Download PDFInfo
- Publication number
- JP2017116859A JP2017116859A JP2015254757A JP2015254757A JP2017116859A JP 2017116859 A JP2017116859 A JP 2017116859A JP 2015254757 A JP2015254757 A JP 2015254757A JP 2015254757 A JP2015254757 A JP 2015254757A JP 2017116859 A JP2017116859 A JP 2017116859A
- Authority
- JP
- Japan
- Prior art keywords
- glyph
- path
- target
- character
- subsequent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
【課題】文字の一部が書字方向に重複する文字列をメモリ使用量を抑制しながら描画することができる文字描画方法を提供する。【解決手段】境界設定部25は、書字方向において前後となるグリフの重複領域の直前の位置に境界を設定する。パス管理部16は、対象グリフを構成するパスのうち境界内のパスを描画パス、境界を越えるパスを後続グリフの描画のために用いる越境パスとして情報保持部11に保持しておく。描画処理部17は、描画パス及び一つ前のグリフについて保持されている越境パスを描画する。【選択図】図2
Description
本発明は文字の一部が書字方向に重複する文字列を描画するための文字描画装置及び文字描画方法に関する。
アウトラインフォントの中には、例えば筆記体のアルファベットを手書したようなデザインのスクリプト系フォントのように、前後の文字が部分的に重なるようにデザインされたものがある。また、ヒンディー語やアラビア語などのフォントでは、前後の文字が描画時に接続するようにデザインされているのが一般的である。こうした文字を描画するときに、描画条件によって、前後の文字の接続部が不自然な描画結果となることがある。例えば、文字の描画色として透明度が設定されていると、重なりが生じる部分が濃く描画されてしまうことがある。また、文字の輪郭にジャギが発生しないようにアンチエイリアス処理を行う場合、半透明の画素が重なりあうと、濃い色になる画素が生じることがある。また、前後の文字の形状が重ならず接するようにデザインすると、描画位置によっては文字の間に隙間が空いてしまうことがある。
このような問題を解決する技術として、文字を構成する各グリフの輪郭線を合成してから塗り潰し処理を行うフォント描画装置が特許文献1に開示されている。このフォント描画装置では、各文字のアウトラインを合成してから塗り潰し処理が行われるため、上記の問題が解消される。
特許文献1に開示されたフォント描画装置では、書字方向に重複部分が存在する文字列を描画する際、合成されたアウトラインのデータ量が多くなる。そのため、一時的にメモリ使用量を圧迫するという新たな課題を残す。
本発明は、文字の一部が書字方向に重複する文字列を、メモリ使用量を抑制しながら描画領域に描画させる文字描画装置を提供することを主たる課題とする。
本発明は、文字の一部が書字方向に重複する文字列を、メモリ使用量を抑制しながら描画領域に描画させる文字描画装置を提供することを主たる課題とする。
本発明が提供する文字描画装置は、文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する取得手段と、描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する重複判定手段と、前記対象グリフと前記後続グリフとが重複する場合にグリフ間に境界を設定する境界設定手段と、前記対象グリフを構成するパスのうち前記境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を前記後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリに登録するパス管理手段と、前記対象グリフについて登録された前記描画パス及び当該対象グラフの一つ前のグリフについて登録された前記越境パスを用いて前記対象グリフを描画する描画処理手段と、を有することを特徴とする。
本発明によれば、文字の一部が書字方向に重なる文字列を、メモリ使用量を抑制しながら描画領域に描画することができる。
以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施形態例は特許請求の範囲に関る本発明を限定するものではなく、また、実施形態例で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
[第1実施形態]
図1は本実施形態に係る文字描画装置のハードウェア構成図である。図1において、文字描画装置100は、バス101にCPU102、ROM103、RAM104および表示コントローラ105を接続したコンピュータをハードウェアとして含む。CPU(Central Processing Unit)102は、本発明のコンピュータプログラムを実行することにより種々の機能ブロックを構築する。ROM(Read Only Memory)103は、変更を必要としないプログラムや各種パラメータを格納する。RAM(Random Access Memory)104は外部装置などから供給されるプログラムやデータを一時記憶する。RAM104は、SDRAM(Synchronous Dynamic RAM) 、DRAM(DynamicRAM)などで構成される。表示コントローラ105は描画領域であるフレームバッファに描画したグラフィックスを図示しない表示デバイスなどに出力する。
図1は本実施形態に係る文字描画装置のハードウェア構成図である。図1において、文字描画装置100は、バス101にCPU102、ROM103、RAM104および表示コントローラ105を接続したコンピュータをハードウェアとして含む。CPU(Central Processing Unit)102は、本発明のコンピュータプログラムを実行することにより種々の機能ブロックを構築する。ROM(Read Only Memory)103は、変更を必要としないプログラムや各種パラメータを格納する。RAM(Random Access Memory)104は外部装置などから供給されるプログラムやデータを一時記憶する。RAM104は、SDRAM(Synchronous Dynamic RAM) 、DRAM(DynamicRAM)などで構成される。表示コントローラ105は描画領域であるフレームバッファに描画したグラフィックスを図示しない表示デバイスなどに出力する。
図2は、文字描画装置100に形成される機能ブロックの構成図である。文字描画装置100は、取得部10、情報保持部11、重複判定部12、境界設定部15、パス管理部16及び描画処理部17として機能する。これらの機能ブロックは、CPU102が、ROM103に格納されたプログラムをRAM104に展開し、後述する各フローチャートに従った処理を実行することで実現される。
以下、文字描画装置100の各機能ブロックの内容について説明する。第1実施形態では、書字方向が横書きで、隣り合う文字との重複が多いヒンディー語の文字列をフレームバッファに描画する場合の例を示す。また、ヒンディー語の文字列を個々の文字毎に分割していくが、その際、予め作成された、文字の骨組みとなる形であるグリフと、各グリフの描画情報とを用いて描画処理を行うものとする。グリフは複数のパス(線分など)で構成される。グリフの描画情報には、描画対象となる文字を表すグリフ(「対象グリフ」と呼ぶ)の形状が含まれる。また、当該対象グリフの次に描画対象となるグリフ(「後続グリフ」と呼ぶ)の描画開始位置までの送り幅、グリフの形状を内包する最小矩形であるバウンディングボックスの情報などが含まれる。コンピュータなどに表示されるときは、フォント(グリフに一定のスタイルでデザインを施したもの)に変換される。
取得部10は、フレームバッファ情報、すなわち描画領域の画素領域の座標のほか、上記の文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する。具体的には、予め文字毎に作成されたグリフの描画情報を識別するためのグリフインデックスを取得し、このグリフインデックスを通じて対象グリフ、後続グリフ及びこれらのグリフについての描画情報を取得する。文字列は図示しない入力装置などから取得する。グリフインデックスは図示しない外部記憶装置などから取得する。取得した文字毎のグリフの描画情報は、情報保持部11に一時的に保持される。
ここで、文字列(データ)について説明する。文字列は、Unicodeスカラ値(コードポイント)の配列を用いて表現される。Unicodeスカラ値は、16進数表記を“U+”の後に続けて記述される。図3(a)は、書字方向に重複する部分が多い文字列の一例となるヒンディー語のコードポイントの例示図である。図示の例では、Unicodeスカラ値で表現された値が5個並んだ文字列となっている。グリフインデックスと上記のUnicodeスカラ値とは1対1に対応するとは限らず、複数のUnicodeスカラ値で1つのグリフインデックスに対応していることもある。例えば良く知られている「TrueType」のように、「cmapテーブル」および「GSUBテーブル」の情報を用いてコードポイントとグリフインデックスとの対応付けを行う場合もある。
なお、コードポイントとグリフインデックスとを対応付けるデータは、グリフ毎に外部記憶装置などに記憶されているが、任意の領域を参照するようにしても構わない。この対応付けるデータの一例を図3(b)に示す。本実施形態において入力される文字列に対応した部分だけを図示しているが、この限りでない。なお、図3(b)の例では、コードポイントU+0928とU+094Dは、組み合わせて1つのグリフインデックスに対応していること、つまり、文字列が4つのグリフの列(4つのグリフインデックス列)で表現されることを示している。
なお、コードポイントとグリフインデックスとを対応付けるデータは、グリフ毎に外部記憶装置などに記憶されているが、任意の領域を参照するようにしても構わない。この対応付けるデータの一例を図3(b)に示す。本実施形態において入力される文字列に対応した部分だけを図示しているが、この限りでない。なお、図3(b)の例では、コードポイントU+0928とU+094Dは、組み合わせて1つのグリフインデックスに対応していること、つまり、文字列が4つのグリフの列(4つのグリフインデックス列)で表現されることを示している。
図3(a)の4つのグリフインデックスに対応したグリフの具体例を図4(a)に示す。図3(a)右側のグリフインデックス220は、図4(a)では左側のグリフ401に対応する。このグリフ401は、2つのコードポイント(U+0928とU+094D)に対応する。フレームバッファへの描画開始位置をXY直交座標系の座標値(100,100)とすると、グリフの形状は、それぞれバウンディングボックスの原点(0,0)を基準にデザインされ、指定された描画開始位置がグリフデザインの原点に一致するように描画される。XY直交座標系の座標は対象グリフを描画するフレームバッファ(描画領域)の画素毎に定められている。フレームバッファには正方形の画素がタイル状に並んでおり、1画素の幅、高さがXY座標の長さ「1」に相当する。また、画素の境界(画素境界)がXY座標では整数座標の位置となっている。整数座標とは、X座標、Y座標がともに整数になることをいう。
グリフは、例えば1000を単位としてデザインされる。描画時に文字サイズがSに指定された場合はS/1000にスケールして描画される。第1実施形態では、文字サイズが「30px」で描画されるものとする。そのため、グリフ401では、30/1000、すなわち0.03倍にスケールして描画される場合の数値が表記されている。図4(a)において、「送り幅」は当該グリフ401を対象グリフとしたときに、当該対象グリフの描画位置から後続グリフの描画位置までの幅である。この幅は360であるが、0.03倍では10.8となる。「X最小値」は、書字方向(X方向)における当該グリフ401の描画位置の最小値である。「X最大値」は、書字方向における当該グリフ401の描画位置の最大値である。つまり、当該グリフ401の描画位置から送り幅ずらした位置が後続グリフの描画位置となる。図4(a)の他のグリフ402〜404についても同様の内容となる。すなわち、グリフ402は図3(b)に示されたグリンインデックス140に対応したグリフ、グリフ403は図3(b)に示されたグリンインデックス540に対応したグリフである。同様に、グリフ404は図3(b)に示されたグリンインデックス49に対応したグリフである。各グリフ402〜404には、それぞれ、グリフ401と同様、描画開始位置などを含む描画情報が関連付けられている。
重複判定部12は、描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する。重複するかどうかを判定する基準としては以下のような基準を用いることができる。
(a)対象グラフを構成するパスと後続グリフを構成するパスとが交差するかどうかをパスの座標を基に解析し、交差するときは重複すると判定する。
(b)対象グリフと後続グリフとについてそれぞれの上記バウンディングボックスの位置及び対象グリフの書字方向の送り幅に基づいて重複の有無を判定する。例えば、書字方向における対象グリフのバウンディングボックスの最大座標が、当該対象グリフの描画開始位置から後続グリフの描画開始位置までの送り幅と、後続グリフのバウンディングボックスの最小座標との合算値以上の場合に重複すると判定する。数式で表すと下記の式(1)のようになる。なお、文字列の最後のグリフを描画するときは後続グリフが存在しないので重複しないと判定することになる。
(対象グリフのX最大値)≧(対象グリフの送り幅)
+(後続グリフのX最小値)…(1)
(a)対象グラフを構成するパスと後続グリフを構成するパスとが交差するかどうかをパスの座標を基に解析し、交差するときは重複すると判定する。
(b)対象グリフと後続グリフとについてそれぞれの上記バウンディングボックスの位置及び対象グリフの書字方向の送り幅に基づいて重複の有無を判定する。例えば、書字方向における対象グリフのバウンディングボックスの最大座標が、当該対象グリフの描画開始位置から後続グリフの描画開始位置までの送り幅と、後続グリフのバウンディングボックスの最小座標との合算値以上の場合に重複すると判定する。数式で表すと下記の式(1)のようになる。なお、文字列の最後のグリフを描画するときは後続グリフが存在しないので重複しないと判定することになる。
(対象グリフのX最大値)≧(対象グリフの送り幅)
+(後続グリフのX最小値)…(1)
境界設定部15は、対象グリフと後続グリフとが重複する場合にグリフ間に境界を設定する。境界線の設定は以下のようにして行う。例えば、図5に示すように、対象グリフのバウンディングボックス(実線で表記)501と後続グリフのバウンディングボックス(破線で表記)502とが重複し、重複領域503が生じているとする。図5において、5011は対象グリフの描画開始位置、5021は後続グリフの描画開始位置である。また、X方向の直線とY方向の線で囲まれるタイル状の輪郭は画素領域であり、それぞれ整数座標で特定される。境界設定部15は、重複領域503に至る直前の整数座標の画素領域に、書字方向と垂直方向に延びる境界線504を設定する。この境界線504は、重複領域503のX最小値以下のうち最大の整数座標となるX座標を基点として設定される。
境界線のX座標を求める式は、FLOOR(x)関数(実数xに対して、x以下の最大の整数を求める関数)を用いて式(2)のようになる。
X=FLOOR((対象グリフの描画位置)
+(対象グリフの送り幅)+(後続グリフのX最小値))…(2)
境界線のX座標を求める式は、FLOOR(x)関数(実数xに対して、x以下の最大の整数を求める関数)を用いて式(2)のようになる。
X=FLOOR((対象グリフの描画位置)
+(対象グリフの送り幅)+(後続グリフのX最小値))…(2)
パス管理部16は、対象グリフを構成するパスのうち境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリ(情報保持部11)に保持(登録)する。ここでは、境界が例えば図5に示した要領で設定された境界線であるものとする。
図6(a),(b)は描画パスと越境パスの説明図である。これらの図において、破線で示される線は境界線609である。この境界線609を跨っているパスは分割され、境界線609を超えない部分が描画パス、越える部分が越境パスとなる。情報保持部11に保持(登録)されるのは、各パスの始端座標と終端座標である。図6(a)のパス610,612は境界線609を跨っているので、図6(b)のようにパス615とパス614、618とパス617とに分割される。そして、パス615,617が越境パスとして登録される。パス611はもともと境界線609を越えた位置に存在するので、そのまま越境パス616として登録される。パス613については描画パス619として登録される。なお、対象グリフの一つ前のグリフの越境パスが既に登録されている場合、対象グリフではそれが描画パスとして登録される。
図6(a),(b)は描画パスと越境パスの説明図である。これらの図において、破線で示される線は境界線609である。この境界線609を跨っているパスは分割され、境界線609を超えない部分が描画パス、越える部分が越境パスとなる。情報保持部11に保持(登録)されるのは、各パスの始端座標と終端座標である。図6(a)のパス610,612は境界線609を跨っているので、図6(b)のようにパス615とパス614、618とパス617とに分割される。そして、パス615,617が越境パスとして登録される。パス611はもともと境界線609を越えた位置に存在するので、そのまま越境パス616として登録される。パス613については描画パス619として登録される。なお、対象グリフの一つ前のグリフの越境パスが既に登録されている場合、対象グリフではそれが描画パスとして登録される。
描画処理部17は、対象グリフについて登録された描画パス及び当該対象グラフの一つ前のグリフについて登録された越境パスを用いて対象グリフを描画する。描画に際しては、様々な描画パラメータが用いられる。詳しくは第2実施形態で説明するが、ここでは、5階調のアンチエイリアスを有効にして描画するものとする。描画色が黒、不透明度が50%で、背景色が白なので、パスの被覆率が100%の画素は50%の灰色(#808080)に、被覆率が25%の画素は12.5%の灰色(#202020)となる。被覆率とは、画素に対し、パスの内部に含まれる割合を示す。パスの内部に一部が含まれている画素に対してはアンチエイリアス処理を行われているが、境界線を越えた位置にある画素の色は変更されない。
<文字描画方法>
次に、文字の一部が書字方向に重複する文字列を描画領域に描画する文字描画装置100が実行する文字描画方法について説明する。この方法では、まず、パスで構成される各文字に対応するグリフのうち相対的に前となる対象グリフと後ろとなる後続グリフとの間に境界を設定する。また、対象グリフのパスのうち境界内の部分を描画パス、越える部分を越境パスとして所定のメモリに保持しておく。そして、対象グリフについて保持された描画パス及び当該対象グラフの一つ前のグリフについて保持された越境パスを用いて対象グリフを描画することを特徴とする。
次に、文字の一部が書字方向に重複する文字列を描画領域に描画する文字描画装置100が実行する文字描画方法について説明する。この方法では、まず、パスで構成される各文字に対応するグリフのうち相対的に前となる対象グリフと後ろとなる後続グリフとの間に境界を設定する。また、対象グリフのパスのうち境界内の部分を描画パス、越える部分を越境パスとして所定のメモリに保持しておく。そして、対象グリフについて保持された描画パス及び当該対象グラフの一つ前のグリフについて保持された越境パスを用いて対象グリフを描画することを特徴とする。
図7は、この文字描画方法の詳細手順を示すフローチャートである。ここでは、図4(a)に示した4つのグリフ401〜404を実際に描画する場合の例に即して説明する。
文字描画装置100は、取得部10において、描画対象となる文字列を取得する(S101)。この文字列は、図3(a)で示されるコードポイントに対応するものである。また、文字列から図3(b)に示した4つのグリフインデックスを取得する(S102)。さらに、グリフインデックスに対応した4つのグリフ、すなわち、図4(a)に示したグリフ401〜404及びそれらの描画情報を取得する(S103)。そして、グリフ401からグリフ404まで、順次対象グリフとし(S104)、以下の処理を行う。
パス管理部16は、前のグリフの越境パスが登録されているかどうかを判定する(S105)。最初のグリフはグリフ401なので、越境パスが登録されていない(S105:N)。そのため、処理はS108へ進む。S108では、重複判定部12が、次のグリフ402と重複するかどうかを判定する。対象グリフのX最大値は11.4、対象グリフの送り幅は10.8、後続グリフのX最小値は0.0である(「30」のスケール換算前)。そのため式(1)を満たすので、重複すると判定される(S108:Y)。そのため、境界設定部15が境界線を設定する(S109)。境界線はX座標で対象グリフの描画位置が100、対象グリフの送り幅が10.8、後続グリフのX最小値が0.0なので、式(2)から110と求まる。
文字描画装置100は、取得部10において、描画対象となる文字列を取得する(S101)。この文字列は、図3(a)で示されるコードポイントに対応するものである。また、文字列から図3(b)に示した4つのグリフインデックスを取得する(S102)。さらに、グリフインデックスに対応した4つのグリフ、すなわち、図4(a)に示したグリフ401〜404及びそれらの描画情報を取得する(S103)。そして、グリフ401からグリフ404まで、順次対象グリフとし(S104)、以下の処理を行う。
パス管理部16は、前のグリフの越境パスが登録されているかどうかを判定する(S105)。最初のグリフはグリフ401なので、越境パスが登録されていない(S105:N)。そのため、処理はS108へ進む。S108では、重複判定部12が、次のグリフ402と重複するかどうかを判定する。対象グリフのX最大値は11.4、対象グリフの送り幅は10.8、後続グリフのX最小値は0.0である(「30」のスケール換算前)。そのため式(1)を満たすので、重複すると判定される(S108:Y)。そのため、境界設定部15が境界線を設定する(S109)。境界線はX座標で対象グリフの描画位置が100、対象グリフの送り幅が10.8、後続グリフのX最小値が0.0なので、式(2)から110と求まる。
パス管理部16は、グリフ401の越境パスを登録する(S110)。登録されるのはパスのID、始端座標、終端座標である。図4(b)の模式図の例では、X座標=110に設定された境界線405を跨いでいるか、あるいは越えている2つのパスがそれぞれ越境パス406となる。パス管理部16は、また、図4(b)において破線で示す境界内のパスを描画パスとして登録する(S111)。
描画処理部17は、登録された描画パスをフレームバッファに描画する(S112)。グリフ401の描画パスを描画した結果を図4(c)に示す。パスの内部に一部が含まれている画素に対してはアンチエイリアス処理が行われているが、境界線405を越えた位置にある画素の色は変更されない。
その後、S104に戻り、対象グリフをグリフ402として再び同様の処理を行う。すなわち、パス管理部16が、前のグリフ401の越境パス406を取得する(S105)。グリフ401についてはS110において越境パス406が登録されているので、前のグリフの越境パスが登録されている(S105:Y)と判定される。そのため、パス管理部16は、前のグリフ401の越境パス406をグリフ402の描画パスとして登録する(S106)。描画パスの登録を完了した場合、それまで登録されていた越境パスの情報をクリアする(S107)。
次に、重複判定部12が、後続グリフと重複するかを判定する(S108)。グリフ402の後続グリフはグリフ403であり、図4(a)より、グリフ402のX最大値は12.0、送り幅は11.4、グリフ403のX最小値は−5.7である。これらの値は式(1)を満たすので、重複すると判定される(S108:Y)。そのため、境界設定部15は境界線を設定する(S109)。境界線の位置は、グリフ402の描画位置が110.8、グリフ402の送り幅が11.4、後続グリフであるグリフ403のX最小値が−5.7なので、式(2)を用いて116と求まる。
次に、パス管理部16は、越境パスを登録する(S110)。図4(d)は、グリフ402から越境パスを生成する処理の模式図である。X座標=116にある境界線407を跨いでいるか、あるいは越えているパスから越境パス408を生成し、登録する。パス管理部16は、また、破線で示した境界内のパスを描画パスとして登録する(S111)。描画処理部17は、パス管理部16で登録された描画パスをフレームバッファに描画する(S112)。登録された描画パスは、図4(d)における、グリフ402の点線部と、前のグリフ401の越境パス406であり、これらを合わせて描画する。図4(e)はグリフ401,402について、パス管理部16で登録された描画パスを描画した結果を示した図である。
S104に戻り、対象グリフをグリフ403とした場合についても同様に処理を行う。すなわち、S105において越境パスが登録されていると判定され(S105:Y)、S106、S107の処理を行う。次に、S108において、後続グリフと重複するかどうかを判定する。グリフ403の後続グリフはグリフ404であり、グリフ403のX最大値は6.3、グリフ403の送り幅は5.7、後続グリフであるグリフ404のX最小値は2.4である。これらの値は式(1)を満たさないから、書字方向では重複しないと判定される(S108:N)。この場合、パス管理部16は、グリフ403を構成するパスをすべて描画パスとして登録する(S113)。
パス管理部16は、登録された描画パスを描画する(S112)。登録された描画パスは、図4(f)における、グリフ403の点線部と、前のグリフ402の越境パス408であり、これらを合わせて描画する。図4(g)はグリフ403について、パス管理部16で登録された描画パスを描画した結果を示した図である。
S104に戻り、グリフ404を対象グリフとして、S105〜S113の処理を行う。グリフ404の場合、S105において越境パスが登録されていないと判定され(S105:N)、S108に進む。S108では、グリフ404が最後のグリフなので重複しないと判定され(S108:N)、S113に進む。S113では、すべてのパスを描画パスとして登録する。最後にS112で描画処理を行い、文字描画処理を終了する。
このように、第1実施形態によれば、書字方向に前後する文字が重なるようにデザインされた文字列であっても、対象グリフの描画領域を越えるパスについては越境パスとして次のグリフを描画するときの描画パスとして扱うことができる。そのため、重なり合ったまま描画処理する場合に比べてメモリ使用量を格段に抑制することができる。
なお、第1実施形態では、S110の越境パスを登録する際に、境界線を跨っているパスについてもそのまま登録しても構わない。この場合、図6(a)において、パス610、パス611、パス612をそのまま越境パスとして登録することになる。しかし、例えば描画処理時に境界線でクリッピングすることで、越えた部分のパスを生成するのと同じ描画結果を得ることができる。
なお、第1実施形態では、S110の越境パスを登録する際に、境界線を跨っているパスについてもそのまま登録しても構わない。この場合、図6(a)において、パス610、パス611、パス612をそのまま越境パスとして登録することになる。しかし、例えば描画処理時に境界線でクリッピングすることで、越えた部分のパスを生成するのと同じ描画結果を得ることができる。
また、第1実施形態では、S109の境界設定処理において、書字方向(X方向)に垂直な画素境界で、重複領域に最も近い直線を境界線とする場合について説明したが、必ずしも重複領域に最も近い直線でなくても良い。例えば、式(2)で求めたX座標からさらに−1した直線を境界線としても良い。ただし、この場合、境界線の位置はなるべく重複領域に近い直線を選択する方が望ましい。
また、境界線は、X座標のみならずY座標を考慮して決定しても構わない。例えば図8(a)は、スクリプト系フォントで文字が重複する例を示す模式図である。隣り合うグリフ820とグリフ821とは重複しているが、接続部の輪郭は、書字方向(X方向)にもそれと垂直の方向(Y方向)にも平行ではない。このような例の場合、重複領域、対象グリフ及び後続グリフの形状を解析し、越境パスがなるべく多くなるように、かつ、画素境界を通るように、境界線を設定することが望ましい。図8(a)に示される文字列をフレームバッファに描画するときの様子を示したのが図8(b)である。図8(b)では、グリフ821とグリフ822の重複部分を中心に図示されている。タイル状の各マスは画素境界である。
図8(b)を参照すると、境界線は、画素境界の書字方向に対して垂直方向(Y方向)の輪郭同士を接続することを基本としつつ、隣り合う画素が有値(無色でない)場合は、当該画素を避けるように補正する。つまり、隣り合う画素が有値になるまで書字方向に対して平行方向(X方向)の輪郭を接続した線の集合となっている。境界線をこのように設定することで、対象グリフについての越境パスが少なくなり、メモリ使用量の増大を防止することができる。
図8(b)を参照すると、境界線は、画素境界の書字方向に対して垂直方向(Y方向)の輪郭同士を接続することを基本としつつ、隣り合う画素が有値(無色でない)場合は、当該画素を避けるように補正する。つまり、隣り合う画素が有値になるまで書字方向に対して平行方向(X方向)の輪郭を接続した線の集合となっている。境界線をこのように設定することで、対象グリフについての越境パスが少なくなり、メモリ使用量の増大を防止することができる。
なお、第1実施形態では、書字方向が横書きであることを前提にして説明したが、縦書きの場合にも同様に適用することが可能である。横書きのときは書字方向がX軸方向なので境界線を書字方向に垂直なY軸に平行に設定したが、縦書きでは書字方向がY軸方向となり、境界線を書字方向に垂直なX軸に平行に設定することになる。
[第2実施形態]
次に、本発明の第2実施形態について説明する。第2実施形態では、第1実施形態の例に加え、前後のグリフの重複形状と描画パラメータによって文字描画処理を効率化させる例について説明する。ハードウェア構成については、第1実施形態と同じである。第2実施形態における文字描画装置のブロック構成図を図9に示す。第2実施形態の文字描画装置は、取得部20、情報保持部21、重複判定部22、パラメータ判定部23、交差判定部24、境界設定部25、パス管理部26及び描画処理部27を有する。取得部20、情報保持部21、重複判定部22、境界設定部25、パス管理部26及び描画処理部27は、それぞれ第1実施形態における取得部10、情報保持部11、重複判定部12、境界設定部15、パス管理部16及び描画処理部17と同じである。これらの機能ブロックは、第1実施形態と同様、CPU102が、ROM103に格納されたコンピュータプログラムをRAM104に展開し、後述する各フローチャートに従った処理を実行することで実現される。
次に、本発明の第2実施形態について説明する。第2実施形態では、第1実施形態の例に加え、前後のグリフの重複形状と描画パラメータによって文字描画処理を効率化させる例について説明する。ハードウェア構成については、第1実施形態と同じである。第2実施形態における文字描画装置のブロック構成図を図9に示す。第2実施形態の文字描画装置は、取得部20、情報保持部21、重複判定部22、パラメータ判定部23、交差判定部24、境界設定部25、パス管理部26及び描画処理部27を有する。取得部20、情報保持部21、重複判定部22、境界設定部25、パス管理部26及び描画処理部27は、それぞれ第1実施形態における取得部10、情報保持部11、重複判定部12、境界設定部15、パス管理部16及び描画処理部17と同じである。これらの機能ブロックは、第1実施形態と同様、CPU102が、ROM103に格納されたコンピュータプログラムをRAM104に展開し、後述する各フローチャートに従った処理を実行することで実現される。
パラメータ判定部23は、重複領域での色の濃淡が目立つ描画パラメータかどうかを判定する。この判定の内容を、図10を参照して説明する。
図10(a)は対象グリフと後続グリフの重複領域について説明した図である。対象グリフ801と後続グリフ802の重複領域に対して、被覆率が0%でない画素の集合を重複領域画素803とする。重複領域内部の色の濃淡が目立つのは、描画パラメータのうち、不透明度が100%でないケースである。これは、不透明度が100%ではない図形を重ねて描画すると、アルファブレンドの処理によって重複領域の色が濃くなることが理由である。色成分(事前にアルファを乗算した値)をC、不透明度をAとし、合成される側のパラメータをd、合成する側のパラメータをs、合成結果のパラメータをrという添字を付加して表すと、アルファブレンドの式は式(3)および式(4)のように表される。
Cr=Cd(1−As)+Cs … (3)
Ar=As+(1−As)Ad … (4)
図10(a)は対象グリフと後続グリフの重複領域について説明した図である。対象グリフ801と後続グリフ802の重複領域に対して、被覆率が0%でない画素の集合を重複領域画素803とする。重複領域内部の色の濃淡が目立つのは、描画パラメータのうち、不透明度が100%でないケースである。これは、不透明度が100%ではない図形を重ねて描画すると、アルファブレンドの処理によって重複領域の色が濃くなることが理由である。色成分(事前にアルファを乗算した値)をC、不透明度をAとし、合成される側のパラメータをd、合成する側のパラメータをs、合成結果のパラメータをrという添字を付加して表すと、アルファブレンドの式は式(3)および式(4)のように表される。
Cr=Cd(1−As)+Cs … (3)
Ar=As+(1−As)Ad … (4)
Crの計算結果はCdに依存する。そのため、Asが100%あるいは0%(所定値)でない場合、重複領域と重複領域外の色は異なった値となる。そこで、パラメータ判定部23は、描画パラメータが重複領域内部での色の濃淡が発生するものかどうか、例えば不透明度が所定値、例えば100%かどうかを判定する。グリフの接続部が不自然にならないようにするための描画処理を行えるようにした。
また、交差判定部24は、グリフが交差する交差領域においてアンチエイリアス部分の色の濃淡が目立つ形状かどうかを判定する。例えば文字列を背景色が白、描画色が黒、不透明度100%で描画したとする。交差領域のアンチエイリアス部分の濃淡は、直線上に連続した画素において、同じ色になることが期待されているにも関わらず、所々に濃い画素が挟まるようなケースもある。アンチエイリアス部分は灰色で表現され、灰色を明度(0が黒、100が白)で表現したとすると、図10(b)に示した例では、画素804の明度は50が期待されるのに37.5になってしまう。一方、図10(c)のように、交差領域においてグリフが連続的につながらない場合には、交差領域において明度が低くなる(灰色が濃くなる)ことはあまり気にならない。これは、各グリフの交差領域にあたる画素805のグリフに対する被覆率は、隣接する画素806のグリフに対する被覆率より上昇するためである。画素805の明度は、本来ならば明度は37.5にならなければならないが、アンチエイリアス部分が重なった結果、明度が25.0になることは、視覚的には大きな違和感を生じるものではない。
そこで、交差判定部24は、対象グリフと後続グリフとが交差領域を挟んで連続するかどうか、つまりパスが重複領域において一致するかどうかを判定する。一致する場合、交差領域におけるアンチエイリアス部分の濃淡が目立つ形状と判定することとした。一方、対象グリフと後続グリフのパスが重複領域において一致しない場合は、交差部分におけるアンチエイリアスの濃淡が目立たない形状と判定することとした。
次に、第2実施形態における文字描画方法を図11のフローチャートを参照して説明する。図7に示した第1実施形態のフローチャートと相違するのは、S108とS109との間に、パラメータ判定部23による処理S201と、交差判定部24による処理S202とが挿入されている点である。そこで、これらの相違する処理を中心に説明し、第1実施形態と同じ内容の処理については重複記載及び説明を割愛する。
第2実施形態では、S108において、対象グリフが後続グリフと重複すると判定された場合、パラメータ判定部23で、重複領域での色の濃淡が目立つ描画パラメータかどうかを判定する(S201)。例えば描画パラメータが不透明度100%のために重複領域内部での色の濃淡が発生するものかどうかを判定する。不透明度が100%でなければ(S201:N)、S109に進み、第1実施形態で説明したとおりの処理を実行する。
第2実施形態では、S108において、対象グリフが後続グリフと重複すると判定された場合、パラメータ判定部23で、重複領域での色の濃淡が目立つ描画パラメータかどうかを判定する(S201)。例えば描画パラメータが不透明度100%のために重複領域内部での色の濃淡が発生するものかどうかを判定する。不透明度が100%でなければ(S201:N)、S109に進み、第1実施形態で説明したとおりの処理を実行する。
他方、不透明度が100%の場合(S201:Y)、交差判定部24において、交差部分のアンチエイリアスの濃淡が目立つ形状かどうか、例えば対象グリフと後続グリフのパスが重複部分において一致するかどうかを判定する(S202)。一致する場合、交差部分におけるアンチエイリアスの濃淡が目立つ形状であるため(S202:Y)、S109に進む。一方、対象グリフと後続グリフのパスが重複部分において一致しない場合は、交差部分におけるアンチエイリアスの濃淡が目立たない形状と判定し(S202:N)、S113に進む。S109、S113以降の処理については、第1実施形態で説明したとおりであるため、ここでは説明を省略する。
なお、S202の処理において、交差部分のアンチエイリアスの濃淡が目立つ形状かどうかを判定する際に、第2実施形態では前後のグリフの交差状態に基づいて判定する処理について説明したが、他の情報を用いて判断しても良い。例えば、ヒンディー語では、各グリフが水平線(シローレーカー)を持ち、その水平線がつながって描画されることが言語の特徴として存在する。こういった言語的特徴に基づき、交差領域を挟んで直線上に連続するときにアンチエイリアス部分の色の濃淡が目立つ形状と判定しても良い。具体的には、前後のグリフが同じフォントデータに含まれ、そのフォントデータがヒンディー語のフォントであれば、前後のグリフが重複領域を挟んで連続していることを推定しても良い。また、前後のグリフのグリフインデックスからUnicodeスカラ値を取得し、それらがデーヴァナーガリー文字のブロックに含まれているかどうかを判定するようにしても良い。さらに、ヒンディー語の文字には、例外的にシローレーカーを含まないグリフや、途切れて繋がらないグリフもあるので、繋がるグリフかどうかを別データとして登録し、そのデータを参照するようにしても良い。
なお、ヒンディー語に限らず、アラビア語など、他の言語で同じような特徴を持つ言語でも、同様の処理を行うようにして良い。
また、S202の処理では、グリフの交差部分のアンチエイリアスの濃淡が目立つ形状かどうかを判定しているが、アンチエイリアス機能がOFFになっている場合は、直ちにS113に進むようにしても良い。
また、S202の処理では、グリフの交差部分のアンチエイリアスの濃淡が目立つ形状かどうかを判定しているが、アンチエイリアス機能がOFFになっている場合は、直ちにS113に進むようにしても良い。
以上説明した処理制御を行うことで、重複による濃淡が目立たないときは通常の描画処理をさせることで、効率的に接続部において不自然にならないような描画結果を得ることができる。
[他の実施形態]
本発明は、プログラム若しくは記録媒体(記憶媒体)等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード(コンピュータプログラム)を記録した記録媒体(または記憶媒体)を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
本発明は、プログラム若しくは記録媒体(記憶媒体)等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード(コンピュータプログラム)を記録した記録媒体(または記憶媒体)を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
Claims (14)
- 文字列及び当該文字列の個々の文字を表すグリフの描画情報を取得する取得手段と、
描画対象となる対象グリフと当該対象グリフの次に描画対象となる後続グリフとが描画時に重複するかどうかを各グリフの描画情報を基に判定する重複判定手段と、
前記対象グリフと前記後続グリフとが重複する場合にグリフ間に境界を設定する境界設定手段と、
前記対象グリフを構成するパスのうち前記境界を越えない部分を当該対象グリフの描画に用いる描画パス、越える部分を前記後続グリフの描画に用いる越境パスとしてそれぞれ所定メモリに登録するパス管理手段と、
前記対象グリフについて登録された前記描画パス及び当該対象グラフの一つ前のグリフについて登録された前記越境パスを用いて前記対象グリフを描画する描画処理手段と、
を有することを特徴とする文字描画装置。 - 前記取得手段は、予め文字毎に作成されたグリフの前記描画情報を識別するためのグリフインデックスを前記文字列と共に取得し、このグリフインデックスを通じて前記対象グリフ、前記後続グリフ及びこれらのグリフについての描画情報を取得することを特徴とする、
請求項1に記載の文字描画装置。 - 前記重複判定手段は、前記対象グラフを構成するパスと前記後続グリフを構成するパスとが交差するかどうかを解析し、交差するときは重複すると判定することを特徴とする、
請求項2に記載の文字描画装置。 - 前記重複判定手段は、前記対象グリフと前記後続グリフとについてそれぞれの形状を内包する最小矩形であるバウンディングボックスの位置及び前記対象グリフの書字方向の送り幅に基づいて重複の有無を判定することを特徴とする、
請求項2に記載の文字描画装置。 - 前記重複判定手段は、書字方向における対象グリフのバウンディングボックスの最大座標が、当該対象グリフの描画開始位置から前記後続グリフの描画開始位置までの送り幅と、前記後続グリフのバウンディングボックスの最小座標との合算値以上の場合に重複すると判定することを特徴とする、
請求項4に記載の文字描画装置。 - 前記境界設定手段は、前記対象グリフのバウンディングボックスと前記後続グリフのバウンディングボックスとの重複領域に至る直前の整数座標の画素領域に、書字方向と垂直方向に延びる境界線を設定する、
請求項5に記載の文字描画装置。 - 前記境界線設定手段は、前記重複領域、前記対象グリフ及び前記後続グリフの形状を解析し、前記越境パスをより多くなるように、かつ、画素境界を通るように、前記境界線を設定することを特徴とする、
請求項6に記載の文字描画装置。 - 前記対象グリフ及び前記後続グリフの描画情報に基づいて、前記対象グリフと前記後続グリフのパスが重なる場合に前記描画パスの色の濃淡が生じるかどうかを判定するパラメータ判定手段をさらに備えることを特徴とする、
請求項1ないし7のいずれか一項に記載の文字描画装置。 - 前記パラメータ判定手段は、不透明度が所定値でないときに前記色の濃淡が生じると判定することを特徴とする、
請求項8に記載の文字描画装置。 - 前記対象グリフ及び前記後続グリフの描画情報に基づいて、各グリフが交差する交差領域において、アンチエイリアス部分の色の濃淡が目立つ形状かどうかを判定する交差判定手段をさらに備えることを特徴とする、
請求項8又は9に記載の文字描画装置。 - 前記交差判定手段は、前記対象グリフと前記後続グリフとが前記交差領域を挟んで連続するときに、前記アンチエイリアス部分の色の濃淡が目立つ形状であると判定することを特徴とする、
請求項10に記載の文字描画装置。 - 前記交差判定手段は、前記対象グリフと前記後続グリフとが、言語的特徴に基づき前記交差領域を挟んで直線上で連続するときに前記アンチエイリアス部分の色の濃淡が目立つ形状であると判定することを特徴とする、
請求項10に記載の文字描画装置。 - 文字の一部が書字方向に重複する文字列を描画領域に描画する装置が実行する方法であって、
パスで構成される各文字に対応するグリフのうち相対的に前となる対象グリフと後ろとなる後続グリフとの間に境界を設定するとともに、前記対象グリフのパスのうち前記境界内の部分を描画パス、越える部分を越境パスとして所定のメモリに保持しておき、
前記対象グリフについて保持された前記描画パス及び当該対象グラフの一つ前のグリフについて保持された前記越境パスを用いて前記対象グリフを描画することを特徴とする、
文字描画方法。 - コンピュータを請求項1乃至12のいずれか1項に記載の文字描画装置として機能させるためのコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015254757A JP2017116859A (ja) | 2015-12-25 | 2015-12-25 | 文字描画装置および文字描画方法、コンピュータプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015254757A JP2017116859A (ja) | 2015-12-25 | 2015-12-25 | 文字描画装置および文字描画方法、コンピュータプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017116859A true JP2017116859A (ja) | 2017-06-29 |
Family
ID=59234069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015254757A Pending JP2017116859A (ja) | 2015-12-25 | 2015-12-25 | 文字描画装置および文字描画方法、コンピュータプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2017116859A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114596389A (zh) * | 2022-05-10 | 2022-06-07 | 中国人民解放军海军工程大学 | 基于OpenGL实例化技术的大批量文字标牌绘制方法 |
-
2015
- 2015-12-25 JP JP2015254757A patent/JP2017116859A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114596389A (zh) * | 2022-05-10 | 2022-06-07 | 中国人民解放军海军工程大学 | 基于OpenGL实例化技术的大批量文字标牌绘制方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5759621B2 (ja) | 文字表示方法および文字表示装置 | |
JPS63271290A (ja) | 文字パタ−ン生成方式 | |
US8107729B2 (en) | Method for improving character outlines using multiple alignment zones | |
JP5172640B2 (ja) | ベクトル図形描画装置 | |
JP2010515131A (ja) | ベクトルグラフィックをラスター化するプロセスにおいて境界を発生させるための方法およびシステム、ならびに、システムを製造するための方法 | |
JP3547250B2 (ja) | 描画方法 | |
JP2017116859A (ja) | 文字描画装置および文字描画方法、コンピュータプログラム | |
JP4698709B2 (ja) | データ作成装置、データ作成方法、データ作成用プログラム、描画装置、描画方法、描画用プログラム、および、コンピュータ読取可能な記録媒体 | |
JPH02232690A (ja) | データ変換装置 | |
KR100361387B1 (ko) | 다각형 묘화 방법, 및 다각형 묘화 장치 | |
JP2009193308A (ja) | 情報表示装置及びプログラム | |
WO2013175520A1 (ja) | 文字描画装置 | |
KR100705188B1 (ko) | 문자 폰트 표시 방법 | |
JP5492911B2 (ja) | 文字作成方法、および文字作成装置 | |
JP2018019212A (ja) | 情報処理装置及び描画処理方法、コンピュータプログラム | |
US11216994B2 (en) | Method and apparatus for rendering a visual representation of a font glyph | |
EP2116946A1 (en) | Knit goods simulation device and knit goods simulation method | |
KR100719480B1 (ko) | 고속의 안티알리아싱 처리 방법 | |
JP4967934B2 (ja) | 画像処理装置及びプログラム | |
JP2017125934A (ja) | 文字描画装置及び文字描画方法、コンピュータプログラム | |
CN113900746A (zh) | 灵动显示方法及家用电器 | |
TW466454B (en) | Overcast processing of graphics character | |
CN117911578A (zh) | 一种文字渲染方法、装置、计算机设备和存储介质 | |
JPH0727572B2 (ja) | 比較を行い信号を発生する装置およびその方法 | |
JPH02308375A (ja) | 図形ピッキング方法およびその装置 |