JP2017125934A - 文字描画装置及び文字描画方法、コンピュータプログラム - Google Patents
文字描画装置及び文字描画方法、コンピュータプログラム Download PDFInfo
- Publication number
- JP2017125934A JP2017125934A JP2016004766A JP2016004766A JP2017125934A JP 2017125934 A JP2017125934 A JP 2017125934A JP 2016004766 A JP2016004766 A JP 2016004766A JP 2016004766 A JP2016004766 A JP 2016004766A JP 2017125934 A JP2017125934 A JP 2017125934A
- Authority
- JP
- Japan
- Prior art keywords
- character
- control point
- adjacent
- characters
- spacing
- 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
【課題】文字間隔を縮める際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供する。【解決手段】隣り合う二つの文字である隣接文字を所定の描画領域に描画する際に、形状データ取得部303が、二つの文字の形状及び描画位置を含む形状データを取得し、隣接文字間隔算出部304が形状データを用いて隣接文字の文字間隔を算出する。隣接文字状態判定部305は、隣接文字の文字間の状態を所定基準との比較により検証する。文字間隔設定部306は検証の結果に応じて文字間隔を動的に調整し、文字描画部307は隣接文字を調整された文字間隔で描画領域に描画する。【選択図】図2
Description
本発明は、文字を所定の描画領域に描画する技術に関する。
近年、スマートフォンやスマートウォッチに代表される携帯デバイスが普及している。この種の携帯デバイスにおいて、サイズの小さい表示領域に文字列を表示する際に文字列の文字間隔を短くして表示する手段がとられる場合がある。
図12は、文字間隔を短く調整した例を示す。図12(a)は、平仮名文字列を通常の文字間隔で表示したものと文字間隔を詰めたものとを上下に並べた図である。図12(b)は、漢字を含む文字列をそれぞれ図12(a)と同じ文字間隔で表記し、上下に並べたものである。それぞれ矢印で示す通り、文字列の長さを短くすることができる。
文字間隔を調整する従来技術として、主にアルファベット表記などの欧文文字において用いられる「カーニング」(kerning)と呼ばれる手法が知られている。カーニングでは、予め文字同士の全組み合わせに対して文字間隔がどの位なのかを表す情報を予め取得しておく。そして、その組み合わせ文字が表示されたとき、該当する文字間隔で文字の表示を行う。また、特許文献1には、1文字毎に文字の余白部分を削り、削った文字同士を使って表示することで、文字間隔を調整した文字列を表示する手法が開示されている。
英語や仏語などの欧文に比べて、日本語や中国語で用いられる仮名文字や漢字は、文字数が格段に多い。そのため、カーニングの技術では、表示デバイスの描画領域に描画する際に、メモリ使用量が膨大となるため、そのままではリソースの小さい組み込み機器などに適用することができない。特許文献1に開示された技術では、画数が多い文字、例えば漢字では文字間隔が過度に詰まり、デザイン性あるいは可読性が劣化する場合がある。
本発明は、このような問題を解決し、文字間隔を調整する際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供することを主たる課題とするものである。
本発明を適用したある実施の態様では、描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得する取得手段と、取得した情報を用いて前記隣り合う二つの文字の文字間隔を算出する間隔算出手段と、前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証する検証手段と、前記検証の結果に応じて前記文字間隔を調整する調整手段と、前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画する描画手段と、を有することを特徴とする、文字描画装置が得られる。
本発明によれば、文字間隔を調整する際に、デザイン性あるいは可読性の劣化を低減しつつメモリ使用量の増加を抑制する文字描画装置を提供することが可能となる。
以下、隣り合う二つの文字である隣接文字を所定の描画領域、例えばフレームバッファに描画する文字描画装置の実施の形態例を、図面を参照して説明する。この文字描画装置は、従来技術のように文字毎にカーニング情報を紐付けておくのではなく、動的に最適な文字間隔を決定するものである。
[第1実施形態]
第1実施形態では、隣接文字の文字間の状態を所定基準との比較により検証し、検証の結果に応じて文字間隔を調整する場合の例を説明する。第1実施形態に係る文字描画装置のハードウェア構成例を図1に示す。この文字描画装置は、バス250を介してCPU200、主記憶装置210、描画装置220、入力装置240が接続されたコンピュータを有する。
第1実施形態では、隣接文字の文字間の状態を所定基準との比較により検証し、検証の結果に応じて文字間隔を調整する場合の例を説明する。第1実施形態に係る文字描画装置のハードウェア構成例を図1に示す。この文字描画装置は、バス250を介してCPU200、主記憶装置210、描画装置220、入力装置240が接続されたコンピュータを有する。
CPU(Central Processing Unit)200は、本発明のコンピュータプログラムを読み込んで実行することにより、文字間隔の決定に関する種々の機能を形成する。主記憶装置210は、RAM(Random Access Memory)、ROM(Read Only Memory)等を含むメモリである。主記憶装置210のうち、ROMは変更を要しないデータやパラメータ等が読み出し専用として記憶される。RAMは、CPU200が外部記憶装置230から取得したデータ等を一時的に保存する領域として用いられる。描画装置220は、ユーザに提示する表示デバイスであり、描画用の画素がマトリクス状に配列されたフレームバッファと、このフレームバッファに描画された文字列を表示する出力装置とを含んで構成される。出力装置は、LCD(Liquid Crystal Display)や有機EL(Electroluminescence)などのモニタを搭載する。外部記憶装置230は、文字列のデータや上記コンピュータプログラムを記録するストレージである。入力装置240は、キーボードやタッチパネル等であり、データの入力を外部から行うデバイスである。
図2は、CPU200が本発明のコンピュータプログラムを実行することにより形成される機能ブロックの構成図である。
文字列取得部300は、描画対象となる文字列を示す情報を取得する(以下、単に「文字列を取得する」という)。文字列は、外部記憶装置230又は入力装置240を通じて取得する。隣接文字抽出部301は、取得した文字列を分割し、隣接文字を抽出する。形状データ取得部303は、隣接文字の各々の文字の形状及び描画位置を含む形状データを取得する取得手段として機能する。形状データは、フォントデータ、文字形状及び制御点(座標データ)、制御点間の描画態様すなわち直線描画か曲線描画のどちらで結ぶかを指示するコマンドセットであるパスコマンド情報を含む。それ以外にも字形の最小矩形であるバウンディングボックス(Bounding Box)やフォントないしグリフの送り幅(Advanced width:AW)といった描画パラメータも形状データに含まれる。あるいは、形状データと関連付けられる。なお、送り幅は、隣接する文字の描画開始位置を示すパラメータである。形状データは、形状データ記憶部302に存在する。そのため、形状データ取得部303は、隣接する二つの文字についての形状データを形状データ記憶部302から読み込み、取得する。
文字列取得部300は、描画対象となる文字列を示す情報を取得する(以下、単に「文字列を取得する」という)。文字列は、外部記憶装置230又は入力装置240を通じて取得する。隣接文字抽出部301は、取得した文字列を分割し、隣接文字を抽出する。形状データ取得部303は、隣接文字の各々の文字の形状及び描画位置を含む形状データを取得する取得手段として機能する。形状データは、フォントデータ、文字形状及び制御点(座標データ)、制御点間の描画態様すなわち直線描画か曲線描画のどちらで結ぶかを指示するコマンドセットであるパスコマンド情報を含む。それ以外にも字形の最小矩形であるバウンディングボックス(Bounding Box)やフォントないしグリフの送り幅(Advanced width:AW)といった描画パラメータも形状データに含まれる。あるいは、形状データと関連付けられる。なお、送り幅は、隣接する文字の描画開始位置を示すパラメータである。形状データは、形状データ記憶部302に存在する。そのため、形状データ取得部303は、隣接する二つの文字についての形状データを形状データ記憶部302から読み込み、取得する。
隣接文字間隔算出部304は、取得した形状データを用いて隣接文字の文字間隔を算出する間隔算出手段として機能する。算出法については後述するが、ゼロ値を含む文字間隔を算出する点が特徴の一つである。
隣接文字状態判定部305は、隣接文字の文字間の状態を所定基準との比較により検証する検証手段として機能する。所定基準は、予め外部記憶装置230に設定されている。第1実施形態では、文字における所定の探索範囲を取得するとともに、当該探索範囲における当該文字が占める割合を算出する。そして算出した割合に応じた係数、より具体的には文字間隔の疎密判定の結果を検証の結果として出力する。文字間隔設定部306は、隣接文字状態判定部305による検証の結果に応じて文字間隔を動的に調整する調整手段として機能する。文字描画部307は、文字間隔設定部306で求めた文字間隔で文字を描画装置220の描画領域に描画する描画手段として機能する。
次に、上記文字描画装置が実行する文字描画方法について説明する。この方法は、二つの文字の形状及び描画位置を含む情報(便宜上「形状データ」という)を取得し、取得した形状データを用いて隣接文字の文字間隔を算出する。そして、隣接文字の文字間の状態を所定基準との比較により検証し、検証の結果に応じて文字間隔を動的に調整し、隣接文字を、調整された文字間隔で描画領域に描画することを特徴とする。
具体的な処理手順について、図3のフローチャートを参照して説明する。
まず、文字列取得部300が、文字列を取得し、それを主記憶装置210のRAMに一時的に保存する(S101)。本実施形態では、取得された文字列を構成する複数の文字のうち、隣接しあう2文字を順次処理対象として、文字間隔を決定する処理を進める。そのためにRAMには、取得された文字列のうち、次に注目する文字が文字列の何文字目かを表す数値Nが記憶される。文字列取得部300は、RAMに記憶されたNを「0」で初期化する(S102)。次に、隣接文字抽出部301が、取得した文字列の文字を先頭から一つずつ読み込む。そして、N文字目とN+1文字目が存在するかどうか、すなわち隣接文字が存在するかどうかを判定する(S103,S104)。隣接文字が存在しない場合(S103:N,S104:N)、処理を終了する。隣接文字が存在する場合(S103:Y,S104:Y)、隣接文字を構成する各文字に対する描画処理を開始する(S105)。
具体的な処理手順について、図3のフローチャートを参照して説明する。
まず、文字列取得部300が、文字列を取得し、それを主記憶装置210のRAMに一時的に保存する(S101)。本実施形態では、取得された文字列を構成する複数の文字のうち、隣接しあう2文字を順次処理対象として、文字間隔を決定する処理を進める。そのためにRAMには、取得された文字列のうち、次に注目する文字が文字列の何文字目かを表す数値Nが記憶される。文字列取得部300は、RAMに記憶されたNを「0」で初期化する(S102)。次に、隣接文字抽出部301が、取得した文字列の文字を先頭から一つずつ読み込む。そして、N文字目とN+1文字目が存在するかどうか、すなわち隣接文字が存在するかどうかを判定する(S103,S104)。隣接文字が存在しない場合(S103:N,S104:N)、処理を終了する。隣接文字が存在する場合(S103:Y,S104:Y)、隣接文字を構成する各文字に対する描画処理を開始する(S105)。
描画処理では、まず、形状データ取得部303が、注目する文字のコードポイントを取得する(S106)。コードポイント(code point)は文字を割り当て得る個々の点であり、良く知られているUnicodeではUnicodeスカラ値が該当する。形状データ取得部303は、また、コードポイントを通じて、外部記憶装置230から形状データを取得する(S107)。これらの情報を文字列を構成する文字のそれぞれで取得する(S108)。
形状データが取得されると、隣接文字間隔算出部304は、隣接文字について例えば送り幅などの描画パラメータを用いて文字間隔調整前の文字間隔を求める(S109)。文字列が横書き(書字方向がxy直交座標系のx軸方向)の場合、取得した形状データから、隣接文字の左側の文字の送り幅AWとその文字において最も右側にある制御点の座標値(x)を用いて文字間隔を求める。この処理を図5を参照して詳しく説明する。図5の例では「国」という文字について、左下が描画の原点(0)であり、横軸がx軸である。パスの制御点は、「国」という文字を構成する直線同士または直線と曲線が交わる部分(51,52,53)に存在する。この場合、その最も右側にある制御点は、丸で囲われた2つの制御点52,53となる。送り幅AWは、原点からx軸方向に所定幅で指定される値である。よって、文字間隔dは、送り幅AWと最も右側である制御点52,53のx座標値との差で表されるものとなる。隣接文字間隔算出部304は、このようにして文字間隔dを算出する。
文字間隔dが算出されると、隣接文字状態判定部305は、隣接文字の文字間の状態を検証する(S110)。この処理の内容を、図4を参照して詳しく説明すると次のようになる。
隣接文字状態判定部305は、まず、隣接文字における各文字の占める割合を求めるための所定の探索範囲の情報を取得する(S201)。探索範囲は、形状データに含まれるバウンディングボックスの座標から自動的に定めることができる。設計者が予め決めておいても良い。自動的に定める場合、隣接文字の1文字目のバウンディングボックスの横幅の1/4を、探索範囲の横幅にするといったもので良い。隣接文字が「国語」のときの探索範囲の例を図6に示す。図6では、バウンディングボックスを目立たせるために、便宜上、文字自身をグレーで示してある。この例では、「国」と「語」それぞれのバウンディングボックス71、72から横幅を求め、その横幅の1/4となる斜線部分を探索範囲711,721としている。それぞれの文字の縦方向の線は、バウンディングボックスの横幅を4分割したときの境界を表す。このように、第1実施形態では、それぞれ隣り合う他方の文字の領域に近い一方の文字の部分領域を探索範囲としている。なお、バウンディングボックス71,72に代えて、送り幅AWを使って探索範囲を設定しても構わない。
隣接文字状態判定部305は、まず、隣接文字における各文字の占める割合を求めるための所定の探索範囲の情報を取得する(S201)。探索範囲は、形状データに含まれるバウンディングボックスの座標から自動的に定めることができる。設計者が予め決めておいても良い。自動的に定める場合、隣接文字の1文字目のバウンディングボックスの横幅の1/4を、探索範囲の横幅にするといったもので良い。隣接文字が「国語」のときの探索範囲の例を図6に示す。図6では、バウンディングボックスを目立たせるために、便宜上、文字自身をグレーで示してある。この例では、「国」と「語」それぞれのバウンディングボックス71、72から横幅を求め、その横幅の1/4となる斜線部分を探索範囲711,721としている。それぞれの文字の縦方向の線は、バウンディングボックスの横幅を4分割したときの境界を表す。このように、第1実施形態では、それぞれ隣り合う他方の文字の領域に近い一方の文字の部分領域を探索範囲としている。なお、バウンディングボックス71,72に代えて、送り幅AWを使って探索範囲を設定しても構わない。
図4に戻り、隣接文字状態判定部305は、隣接文字の1文字毎に着目し(S202)、その文字に対する探索範囲を決定していく。すなわち、図3のS105において取得されている形状データより、制御点とパスコマンド情報を取得する(S203)。次に、制御点とパスコマンド情報からS201で取得した探索範囲で描画する画素の集合となる文字(「文字領域」と呼ぶ)の割合がどの程度かを特定するためにスキャン処理を行う(S204)。すなわち、制御点とパスコマンド情報から文字を所定のキャンバス上に出力し、キャンバス上に出力した文字に対してスキャンをすることで、文字領域を求める。この処理の概念図を図7に示す。
図7(a)は、「口」という文字に対する制御点81とパスコマンド情報とを矢線により視覚的に表したものである。この制御点とパスコマンド情報から、図7(b)に表す文字がキャンバス上に出力される。つまり、制御点とパスコマンド情報より、例えばスキャンライン毎にスキャン範囲内の文字領域を抽出する(S205)。その文字領域に対して、図7(b)に示すスキャンライン(スキャン位置を表す線)を上下に移動させ、塗りつぶされている(画素が存在する)文字領域を加算していく(S206〜S208)。このようにして、文字毎の文字領域と探索範囲とを求める(S209)。なお、第1実施形態において、文字領域を求める方法は、上記方法に限定されない。他には、制御点とパスコマンド情報とスキャンラインの位置関係から、どこが文字領域かを描画位置における座標値の比較で直接的に求めても良い。
文字領域と探索範囲が求まると、隣接文字状態判定部305は、探索範囲の面積(描画領域の面積)に対する文字領域の面積(有意な画素の領域の面積)の比較結果(比率など)を文字領域の割合として算出する。図5に示した「国」の文字の場合、文字領域の割合は0.61となる。以上が文字領域の割合を求める処理である。
図3に戻り、隣接文字状態判定部305は、上記のようにして各文字の文字領域の割合を閾値処理することで、隣接文字の関係を比較し(S111)、文字間隔の疎密判定を行う。閾値は、システム設計者が予め定めておくが、その限りでない。隣接文字状態判定部305は、文字領域の割合が閾値以上の場合、文字間隔の調整を要する密状態と判定し、それ以外は、文字間隔の調整を要しない疎状態と判定し、各状態に応じて異なる係数を出力する。
文字間隔設定部306は、疎密判定の結果に応じた係数を文字間隔に反映させ、該文字間隔を動的に調整する。調整量は、S106で求めた元々の文字間隔に対して係数を反映させることで決定される。具体的には次式より調整量を決定する。
調整量=α×interval (0≦α≦1)
intervalはS106で求めた元々の文字間隔である。αは係数(「文字間隔係数」と呼ぶ)であり、予め複数の値のものが用意され、主記憶装置210のROMなどに記憶されている。
文字間隔設定部306は、疎密判定の結果に応じた係数を文字間隔に反映させ、該文字間隔を動的に調整する。調整量は、S106で求めた元々の文字間隔に対して係数を反映させることで決定される。具体的には次式より調整量を決定する。
調整量=α×interval (0≦α≦1)
intervalはS106で求めた元々の文字間隔である。αは係数(「文字間隔係数」と呼ぶ)であり、予め複数の値のものが用意され、主記憶装置210のROMなどに記憶されている。
本実施形態では、密状態と判定された場合、α=0.5(文字間隔をある程度狭くする)とし(S112)、疎状態と判定された場合はα=0.1(より多くの文字間隔を狭くする)とする(S113)。検証結果は、密状態と判定された場合、α=0.5とした時の文字間隔が出力される(S19)。疎状態と判定された場合、α=0.1とした時の文字間隔が出力される(S114)。なお、文字間隔係数を閾値処理で求める代わりに、疎密判定の結果を変数とする関数の算出結果に応じた係数を文字間隔係数として出力しても良い。例えば、次式で文字間隔係数を求めても良い。
α=C1+1/(C2r)
ただし、C1とC2は任意定数、rは上記S209で求めた文字領域の割合である。
α=C1+1/(C2r)
ただし、C1とC2は任意定数、rは上記S209で求めた文字領域の割合である。
文字描画部307は、S109とS110で決定した文字間隔を描画パラメータに設定して文字を描画する。このように、本実施形態では、隣接文字における文字間隔の疎密判定を行い、文字間隔を動的に調整する。そのため、文字毎にカーニング情報を紐付けておく必要がなく、RAMに記憶させる情報量の増加を抑制しながら、デザイン性あるいは可読性を大きく劣化させない程度に文字列の長さを縮めることができる。そのため、描画処理時に記憶すべき情報の量をカーニングを行った場合よりも減少させることができるので、例えば組み込み機器で狭い描画領域に文字列を表示させる場合であっても可読性の高い文字列の描画が可能となる。
なお、本実施形態では1文字づつ描画する場合の例を説明したが、別の方法として全文字での処理が終わってから、文字列を1度の描画で出力しても構わない。また、文字列を例に挙げて説明したが、隣接文字の少なくとも一方がアイコンのような図形の場合であっても第2実施形態の描画方法は適用が可能である。また、第1実施形態では書字方向が左から右に向かう横書きの文字列を対象としていたが、縦書きの文字列での文字間隔にも同様に適用が可能である。
[第2実施形態]
第2実施形態では、隣接文字の接触状態を検証して文字間隔を調整する場合の例について説明する。文字描画装置のハードウェア構成および機能ブロックの構成は、第1実施形態と同様であるため割愛する。なお、第2実施形態の文字描画装置が行う処理は、図3のS101〜S106までと同一であるため、第1実施形態と異なる点を中心に説明する。
第2実施形態では、隣接文字の接触状態を検証して文字間隔を調整する場合の例について説明する。文字描画装置のハードウェア構成および機能ブロックの構成は、第1実施形態と同様であるため割愛する。なお、第2実施形態の文字描画装置が行う処理は、図3のS101〜S106までと同一であるため、第1実施形態と異なる点を中心に説明する。
図8は、第2実施形態で検知する隣接文字の接触状態の説明図である。第2実施形態では、隣接文字の接触状態を分類するために、まず隣接文字の接触量を考慮する。接触量とは、隣接文字の接触する箇所が、書字方向に垂直となる一次元方向に持つ幅の大きさをいう。図8(a)は、隣接文字が線幅以下の接触量で部分的かつ離散的に接触する離散接触状態のパターンである。図8(b)は、隣接文字が面接触状態のパターンである。ここでの面接触は、一般的にボルトとナットの接触方式を「点接触」あるいは「面接触」という場合の「面接触」の考え方に準じる。ただし、本実施形態で隣接文字の接触量を考えるのは書字方向に垂直となる一次元方向であり、奥行き方向の次元は存在しないため、見た目には図8(b)のように、線幅よりも長い「線」で接触している隣接文字が、面接触のパターンに相当する。従って、本実施形態で面接触とは、図8(b)のように、隣接文字が線幅よりも多くの接触量を持つパターンである。例えば、立体的にデザインされた装飾文字であれば、面接触のパターンは、文字通り「面」で接触することが見た目にも理解され易い。図8(c)は隣接文字が部分的(接触量が線幅以下)で、かつ、同じ高さで連続的に接触する部分連続接触状態のパターンである。ここでいう高さとは、図5に示すy軸方向を言う。すなわち同じ高さとは、少なくとも文字の境界付近において、y座標が略一致することを言う。第2実施形態では、このような書字方向に垂直となる方向の隣接文字の接触状態を検出し、検出した接触状態と所定基準状態とを比較することにより、接触状態に応じて異なる係数を検証の結果として出力する。また、文字間隔設定部306が、文字間隔に上記係数を反映させることにより当該文字間隔を調整する。
例えば、デザイン性あるいは可読性にそれほど影響を与えない図8(a)のような接触状態であれば、接する程度まで文字詰めをしてもそれほど問題ないとして文字間隔を短めにする。一方、デザイン性あるいは可読性にある程度、影響を与えるような図8(b),(c)のような場合は、文字詰め量を緩めて文字間隔を設定する。なお、接触状態は、図8(a)〜(c)以外の状態を含めて分類しても良い。
例えば、デザイン性あるいは可読性にそれほど影響を与えない図8(a)のような接触状態であれば、接する程度まで文字詰めをしてもそれほど問題ないとして文字間隔を短めにする。一方、デザイン性あるいは可読性にある程度、影響を与えるような図8(b),(c)のような場合は、文字詰め量を緩めて文字間隔を設定する。なお、接触状態は、図8(a)〜(c)以外の状態を含めて分類しても良い。
第2実施形態における文字描画方法の手順を図9のフローチャートを参照して説明する。 第2実施形態において、各文字の形状データは、当該文字を構成するパスの制御点と該パスの描画態様を指示する1つ以上のコマンドを含むパスコマンド情報とを含む。また、各文字の形状データが、当該文字を構成するパスの制御点と該パスの描画態様を指示する1つ以上のコマンドを含むパスコマンド情報とを含み、かつ、書字方向がxy直交座標系において左から右に向かうものとする。また、隣接文字状態判定部305が、隣接する最初の文字の右端と次の文字の左端の1つ以上の制御点のxy座標値をデータとして持つ端部制御点リストを生成し、この端部制御点リストを用いて接触状態を検証するものとする。図9において、S301からS319までを隣接文字状態判定部305が実行し、S320からS323までを文字間隔設定部306が実行する。
図9を参照して説明する。隣接文字状態判定部305は、隣接文字の1文字目、2文字目というように、順次描画処理を行う(S301)。まず、対象とする文字について、制御点およびパスコマンド情報を取得する(S302)。また、端部制御点リストを「0」で初期化する(S303)。端部制御点リストは、1文字目であれば最右端であり、2文字目であれば最左端の制御点の座標値をデータとして持つ配列である。例えば図8(a)の「圏」という文字の場合、端部制御点リストは、国構えの右側の上下の点の座標値のセットとなる。
隣接文字状態判定部305は、取得した制御点に1つずつアクセスするループ制御を行う(S304)。すなわち、端部制御点リストの最初の要素のx座標(xy[0].x)と制御点(xy.x)の1つとを比較する(S305)。ここで、座標系は図5と同じく、横方向をx軸、縦方向をy軸である。制御点のx座標値が大きい場合、端部制御点リストの要素0番目に制御点座標を代入し、次の制御点を読み込む(S307)。一方、制御点のx座標値が、端部制御点リストの要素0番目のx座標より大きくはない場合は、端部制御点リストの要素0番目のx座標と制御点のx座標値が一致するかの判定を行う(S306)。一致する場合、制御点データの座標値を端部制御点リストに追加する(S308)。一方、一致しない場合は、次の制御点データを読み込む。最終的に、端部制御点リストの生成が終わったのち、リスト内の制御点のy座標をもとに制御点データを昇順又は降順で並べ替えておく。これを利用して、上記いずれかの接触状態を判別可能にする。
次に、端部制御点リスト内の制御点について、連続する制御点同士を結ぶパスコマンド情報から、それらが同じ文字(隣接文字のうち何れか片方の文字)の周囲を成す面のうち、同一平面上の制御点かどうかを判別するための平面情報を付加する(S309)。ここで端部制御点リストに含まれる制御点は、S306において、x座標が一致していることが既に確認された制御点である。従って、S309の処理で判定される同一平面とは、少なくともy軸に平行な面である。ただし、立体的な装飾がないような平面的な文字の描画では、奥行き方向の次元は意味を持たないため、ここではy軸に沿った直線で考えることができる。S309で判定される内容は、対象となっている2つの制御点が、同じ文字の周囲のうちy軸方向に平行な線分状の部分に存在する2点であるかを判定することに相当する。言い換えれば、処理中の文字のエッジの中で、その該制御点同士を接続する部分が、y軸に平行な線分であるかを判定する。
本実施形態では、端部制御点リスト内の制御点について、連続する制御点同士を順次選んで上記判定を繰り返すことになる。そして、判定結果に応じて、同一平面にあると判定された制御点同士に、平面情報として、その制御点が属する平面毎に異なる識別子を付与する。そして、続く処理では、S309の判定結果に応じて付与された平面情報に基づいていずれかの状態(接触状態)を判別可能となる。
図10は、同一平面情報の付加を説明する概念図である。図10(a)は、S302で取得する制御点とパスコマンド情報の端部制御点リストを表している。また図10(b)は、S308で作成する端部制御点リストを表す。図10(a)は、制御点と各制御点をどう結ぶかのコマンドセットの例示図である。コマンドセットは、制御点Aと制御点Bをどう結ぶか(描画するか)を指示するコマンドないしその組み合わせであり、例えば直線描画であれば直線で結ぶというコマンドが付加される。一方、図10(b)の端部制御点リストは、S306〜S309の処理結果として、端部を構成する制御点としてA、B及びDが選択された場合を表す。制御点A、Bのパスコマンド情報を参照すると、「直線描画」とあるのでAとBは同一平面上と判断できる。よって、同一平面を表す平面情報を制御点A,Bそれぞれに付加する。平面情報は、一例として、平面毎に異なる番号であるとする。例えば、本実施形態では端点制御点リストに列挙されるうち、制御点A,Bが同一平面にあることから「0」を割り当てている。ここで、制御点Bの次に存在するはずの制御点Cは、端点制御点リスト(図10(a))に含まれない。これは、制御点Cのx座標が、制御点A,Bのx座標と一致しなかったことを意味する。すなわち、制御点Cは、制御点Bと同一平面上には存在しない。さらに言えば、制御点A,Bが存在した同一平面は、制御点Bで途切れたことが解る。よって、制御点Cの次の制御点Dは、端点制御点リスト(図10(a))に含まれるが、制御点Bと同一の平面上にある訳ではなく、x座標が同じ別の平面に存在すると言える。従って、制御点A,Bの平面情報「0」とは異なる、別の平面情報を意味する「1」(又は「2」でもよい)を割り当てる。以上の処理を、隣接文字を構成する文字それぞれで行う。
その後、これまでに求めた隣接文字を構成する各文字の端点制御点リストを参照する(S310,S311)。そして、隣接文字の接触面の長さを算出する(S312)。なお、接触面の長さとは、隣接文字の面接触する部分の、y軸方向の長さである。本実施形態で描画する文字は二次元であるので、見た目には縦線の長さに相当する。以下では、接触面の長さを「接触長」という。接触長は端部制御点リストの制御点と平面情報に基づいて算出する。算出方法について、図11に示す隣接文字の第1文字目と第2文字目の端部制御点リスト(図11(a)および図11(b))をもとに説明する。
図11(c)は、端部制御点リストの各制御点のy座標を数直線上に並べたものである。上の数直線が1文字目、下の数直線が2文字目である。図11(c)に示すようにy座標の大小関係から接触する部分を求めることができる。図11(c)では接触する部分の長さがL1とL2であり、最終的に1文字目と2文字目の接触長Lは、L=L1+L2となる。図11で説明したように、隣接文字それぞれの端部制御点リストを参照して、接触長を算出する。
図11(c)は、端部制御点リストの各制御点のy座標を数直線上に並べたものである。上の数直線が1文字目、下の数直線が2文字目である。図11(c)に示すようにy座標の大小関係から接触する部分を求めることができる。図11(c)では接触する部分の長さがL1とL2であり、最終的に1文字目と2文字目の接触長Lは、L=L1+L2となる。図11で説明したように、隣接文字それぞれの端部制御点リストを参照して、接触長を算出する。
隣接文字状態判定部305は、S312で求めた接触長を基に隣接文字の接触状態を検証する(S313〜S318)。例えば、接触長が所定の閾値Th以上の場合(S319:Y)は面接触状態にあると判定する。例えば図8(b)の状態と判定する。この場合、文字間隔係数α=0.5を文字間隔設定部306に出力する(S320)。面接触状態のときは接触する部分が多いため、なるべく文字間隔を空けて描画することになる。
また、接触長が閾値Th以下の場合(S319:N)、接触長と端部制御点(接触する部分のy方向の位置)とが一致するかどうかを判定する(S321)。一致する場合(S321:Y)、図8(c)で示したような部分連続接触状態と判定し、文字間隔係数α=0.3を文字間隔設定部306に出力する(S322)。
接触長と端部制御点とが一致しない場合(S321:N)、図8(a)で示したように線幅以下で離散的に接する部分離散接触状態と判定し、文字間隔係数α=0.1を文字間隔設定部306に出力する。文字描画部307は、これらの文字間隔係数αが反映された文字間隔で隣接文字をフレームバッファに描画する。
また、接触長が閾値Th以下の場合(S319:N)、接触長と端部制御点(接触する部分のy方向の位置)とが一致するかどうかを判定する(S321)。一致する場合(S321:Y)、図8(c)で示したような部分連続接触状態と判定し、文字間隔係数α=0.3を文字間隔設定部306に出力する(S322)。
接触長と端部制御点とが一致しない場合(S321:N)、図8(a)で示したように線幅以下で離散的に接する部分離散接触状態と判定し、文字間隔係数α=0.1を文字間隔設定部306に出力する。文字描画部307は、これらの文字間隔係数αが反映された文字間隔で隣接文字をフレームバッファに描画する。
なお、第2実施形態では文字間隔係数αを閾値処理により求める例について説明したが、これに限定されず、接触応対を変数とする関数の算出結果に応じた文字間隔係数αを用いても良い。例えば、次式で文字間隔係数αを決定する。
α=C1+L/(C2HB)
ここで、C1とC2は任意定数である。またHBは隣接文字のBounding
Boxの高さである。隣接文字でHBが異なることがあるが、そのときは小さい方の値をHBとすれば良い。Lは、上記した接触長である。
α=C1+L/(C2HB)
ここで、C1とC2は任意定数である。またHBは隣接文字のBounding
Boxの高さである。隣接文字でHBが異なることがあるが、そのときは小さい方の値をHBとすれば良い。Lは、上記した接触長である。
図9の処理で文字間隔係数αが決まった後は、図3と同様に文字間隔を定め、第1実施形態の図3のS112で説明した処理で文字を描画する。このような描画処理を行うことで、隣接文字の接し方で文字間隔を調整することができる。
このように、第2実施形態では、隣接文字の接触状態及び接触する部分の位置関係に応じて決定された文字間隔係数αを用いて文字間隔を動的に調整するので、第1実施形態と同様、文字毎にカーニング情報を紐付けておく必要がない。そのため、RAMに記憶させる情報量の増加を抑制しながらデザイン性あるいは可読性が劣化しない程度に文字列の長さを縮めることができる。
なお、縦書きの文字列にも適用可能である点、隣接文字の少なくとも一つが図形である場合にも適用可能である点は、第1実施形態と同じである。
このように、第2実施形態では、隣接文字の接触状態及び接触する部分の位置関係に応じて決定された文字間隔係数αを用いて文字間隔を動的に調整するので、第1実施形態と同様、文字毎にカーニング情報を紐付けておく必要がない。そのため、RAMに記憶させる情報量の増加を抑制しながらデザイン性あるいは可読性が劣化しない程度に文字列の長さを縮めることができる。
なお、縦書きの文字列にも適用可能である点、隣接文字の少なくとも一つが図形である場合にも適用可能である点は、第1実施形態と同じである。
[他の実施形態]
本発明は、コンピュータプログラム若しくは記録媒体(記憶媒体)等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード(コンピュータプログラム)を記録した記録媒体(または記憶媒体)を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
本発明は、コンピュータプログラム若しくは記録媒体(記憶媒体)等としての実施態様をとることも可能である。また、本発明の目的は、以下のようにすることによっても達成される。すなわち、前述した各実施形態の機能ブロックを実現するコンピュータプログラムのプログラムコード(コンピュータプログラム)を記録した記録媒体(または記憶媒体)を、端末に供給する。かかる記憶媒体は、コンピュータ読み取り可能な記憶媒体である。そして、その端末のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成する。
Claims (16)
- 描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得する取得手段と、
取得した情報を用いて前記隣り合う二つの文字の文字間隔を算出する間隔算出手段と、
前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証する検証手段と、
前記検証の結果に応じて前記文字間隔を調整する調整手段と、
前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画する描画手段と、
を有することを特徴とする、文字描画装置。 - 前記間隔算出手段は、ゼロ値を含む文字間隔を算出することを特徴とする、
請求項1に記載の文字描画装置。 - 前記取得手段が取得する情報は、当該文字を構成するパスの制御点と該パスの描画態様を指示する1つ以上のコマンドを含むパスコマンド情報とを含んでおり、
前記検証手段は、前記取得手段が取得する情報に含まれる前記制御点と前記パスコマンドの情報とに基づいて当該文字における所定の探索範囲を取得するとともに、当該探索範囲における当該文字が占める割合を算出し、算出した割合に応じた係数を前記検証の結果として出力するものであり、
前記調整手段は、前記間隔算出手段により算出された文字間隔に前記係数を反映させることにより当該文字間隔を調整することを特徴とする、
請求項1又は2に記載の文字描画装置。 - 前記探索範囲は、前記隣り合う二つの文字のうち、それぞれ隣り合う他方の文字の領域に近い一方の部分領域であることを特徴とする、
請求項3に記載の文字描画装置。 - 前記検証手段は、前記探索範囲の面積に対する前記文字の描画領域の面積の比較結果により前記割合を算出することを特徴とする、
請求項4に記載の文字描画装置。 - 前記検証手段は、前記割合に応じて前記文字間隔の疎密判定を行い、該疎密判定の結果を前記係数として出力する疎密判定手段を有することを特徴とする、
請求項3に記載の文字描画装置。 - 前記疎密判定手段は、前記割合が所定の閾値以上の場合は前記文字間隔の調整を要する密状態、それ以外は前記調整を要しない疎状態と判定し、各状態に応じて異なる前記係数を出力することを特徴とする、
請求項6に記載の文字描画装置。 - 前記疎密判定手段は、前記疎密判定の結果を変数とする関数の算出結果に応じた前記係数を出力することを特徴とする、
請求項6に記載の文字描画装置。 - 前記検証手段は、書字方向に垂直となる方向の前記隣り合う二つの文字の接触状態を判別し、判別した接触状態と所定基準状態とを比較することにより、接触状態に応じて異なる係数を前記検証の結果として出力するものであり、
前記調整手段は、前記間隔算出手段により算出された文字間隔に前記係数を反映させることにより当該文字間隔を調整することを特徴とする、
請求項1又は2に記載の文字描画装置。 - 前記取得手段が取得する情報は、当該文字を構成するパスの制御点と該パスの描画態様を指示する1つ以上のコマンドを含むパスコマンド情報とを含み、かつ、前記書字方向がxy直交座標系において左から右に向かう場合、
前記検証手段は、隣接する最初の文字の右端と次の文字の左端の1つ以上の制御点のxy座標値をデータとして持つ端部制御点リストを生成し、
生成された端部制御点リストに基づいて前記隣り合う二つの文字が面接触状態、面接触状態ではないが部分的かつ離散的に接触する状態、前記隣り合う二つの文字が部分的かつ同じ高さで連続的に接触する状態のいずれかまたはそれ以外の状態を判別し、判別した状態に応じて異なる前記係数を出力することを特徴とする、
請求項9に記載の文字描画装置。 - 前記検証手段は、前記端部制御点リストの最初の要素のx座標と前記制御点の1つとを比較して前記制御点のx座標値が大きい場合、前記端部制御点リストの要素0番目に制御点座標を代入して次の前記制御点を読み込み、
前記制御点のx座標値が小さい場合は、前記端部制御点リストの要素0番目のx座標と制御点のx座標値が一致するかを判定し、一致する場合は新たな制御点のx座標値を前記端部制御点リストに追加し、一致しない場合は、次の前記制御点を読み込み、最終的に、前記端部制御点リストの生成が終わった後、当該端部制御点リストの制御点のy座標をもとに前記制御点を昇順又は降順に並べ替え、これにより、前記いずれかの状態の判別を可能にすることを特徴とする、
請求項10に記載の文字描画装置。 - 前記検証手段は、前記端部制御点リストの制御点同士を直線又は曲線で描画するためのパスコマンド情報から同一平面の制御点かどうかを判別するための平面情報を当該端部制御点リストに付加し、該平面情報に基づいて前記いずれかの状態を判別可能にすることを特徴とする、
請求項11に記載の文字描画装置。 - 前記検証手段は、検出した接触状態を変数とする関数の算出結果に応じた前記係数を出力することを特徴とする、
請求項9に記載の文字描画装置。 - 前記隣り合う二つの文字の少なくとも一方の文字が図形であることを特徴とする、
請求項1ないし13のいずれか一項に記載の文字描画装置。 - 文字列を所定の描画領域に描画する装置が実行する方法であって、
描画対象の文字列のうち、隣り合う二つの文字の形状及び描画位置を含む情報を取得し、取得した前記情報を用いて前記隣り合う二つの文字の文字間隔を算出するとともに、前記隣り合う二つの文字の文字間の状態を所定基準との比較により検証し、前記検証の結果に応じて前記文字間隔を動的に調整し、前記隣り合う二つの文字を前記調整された文字間隔で前記描画領域に描画することを特徴とする、
文字描画方法。 - コンピュータを請求項1ないし14のいずれか一項に記載された文字描画装置として機能させるためのコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016004766A JP2017125934A (ja) | 2016-01-13 | 2016-01-13 | 文字描画装置及び文字描画方法、コンピュータプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016004766A JP2017125934A (ja) | 2016-01-13 | 2016-01-13 | 文字描画装置及び文字描画方法、コンピュータプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017125934A true JP2017125934A (ja) | 2017-07-20 |
Family
ID=59364185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016004766A Pending JP2017125934A (ja) | 2016-01-13 | 2016-01-13 | 文字描画装置及び文字描画方法、コンピュータプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2017125934A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020022253A1 (ja) * | 2018-07-26 | 2020-01-30 | 武蔵エンジニアリング株式会社 | 文字列表示装置および文字列表示方法 |
-
2016
- 2016-01-13 JP JP2016004766A patent/JP2017125934A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020022253A1 (ja) * | 2018-07-26 | 2020-01-30 | 武蔵エンジニアリング株式会社 | 文字列表示装置および文字列表示方法 |
JP2020016775A (ja) * | 2018-07-26 | 2020-01-30 | 武蔵エンジニアリング株式会社 | 文字列表示装置および文字列表示方法 |
US11361733B2 (en) | 2018-07-26 | 2022-06-14 | Musashi Engineering, Inc. | Character string display device and character string display method |
JP7090894B2 (ja) | 2018-07-26 | 2022-06-27 | 武蔵エンジニアリング株式会社 | 文字列表示装置および文字列表示方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8619333B2 (en) | Image forming apparatus, image forming apparatus control method, and program | |
TWI470490B (zh) | 手寫輸入之筆劃呈現方法與電子裝置 | |
JP2010055048A (ja) | 低解像度ディスプレイのためのストロークベースのフォント文字を生成する方法 | |
JP2009301206A (ja) | 情報表示装置及びプログラム | |
US20210081493A1 (en) | Aesthetic marking of text in digital typography | |
US9245361B2 (en) | Consolidating glyphs of a font | |
CN112765935B (zh) | 一种文字外形个性化处理方法及系统 | |
JP2017125934A (ja) | 文字描画装置及び文字描画方法、コンピュータプログラム | |
US20140258921A1 (en) | System and method for ergonomic placement of an object or cursor on a computer display | |
US9229608B2 (en) | Character display apparatus, character display method, and computer readable medium | |
CN110226183B (zh) | 信息提示装置、信息提示方法及程序 | |
CN115729503A (zh) | 界面显示方法、装置、计算机设备及存储介质 | |
US11887255B2 (en) | Method and system for rendering boundary of map area within game map, and computer-readable storage medium | |
CN115249303A (zh) | 基于图纸分割的布点绘制方法、装置、设备及存储介质 | |
US20100118323A1 (en) | Image forming apparatus | |
JPH02270019A (ja) | 高品質文字パターン発生方式 | |
JP6108105B2 (ja) | 記事画像再構成装置 | |
CN111782158A (zh) | 一种喷码设备点阵字体的生成方法及打印设备 | |
JPH06274303A (ja) | マルチウィンドウ表示方法 | |
CN101923724B (zh) | 一种页面裁剪方法 | |
US7821515B2 (en) | Method for automatic font character height restriction | |
WO2013175520A1 (ja) | 文字描画装置 | |
KR102616255B1 (ko) | 폰트 생성 시스템 및 이를 이용한 폰트 생성 방법 | |
JPH0723997B2 (ja) | 文字・図形描画装置 | |
JP5614953B2 (ja) | 画像処理装置および画像処理方法 |