(57)【要約】【課題】  文字列を、視認性の低減を抑えつつ規定の範囲内に収まるように描画するための技術を提供すること。【解決手段】  領域の高さをＲＨとすると、０＜θ＜１を満たす規定のθを用いて、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝を第１の縮小率として求める。文字列中の各文字について、該文字を第１の縮小率で縮小した縮小文字の高さが領域の高さを超えているか否かを判断し、超えていれば対象文字として特定する。対象文字を第１の縮小率で縮小した縮小文字の高さをＨとすると、第１の縮小率×ＲＨ／Ｈを第２の縮小率として求める。非対象文字は第１の縮小率で縮小して描画し、対象文字は、高さを第２の縮小率で縮小してから描画する。【選択図】図１
2014142789.tif 000002
【特許請求の範囲】
【請求項１】
文字列を規定の領域内に描画する情報処理装置であって、
前記文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する手段と、
前記領域の、前記文字列を構成する各文字の並び方向に対して垂直方向におけるサイズをＲＨとすると、０＜θ＜１を満たす規定のθを用いて、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝を第１の縮小率として求める計算手段と、
前記文字列中の各文字について、該文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する特定手段と、
前記対象文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズをＨとすると、前記第１の縮小率×ＲＨ／Ｈを第２の縮小率として求める手段と、
前記文字列を構成する各文字のうち、非対象文字は第１の縮小率で縮小して前記領域内に描画し、前記対象文字は、前記垂直方向のサイズを前記第２の縮小率で縮小してから前記領域内に描画する描画手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記計算手段は、
ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔがθ以上であれば、ＲＨ／（ｃａｐＨｅｉｇｈｔ＋ｄｅｓｃｅｎｄ）を前記第１の縮小率として求め、
ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔがθ未満であれば、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝を前記第１の縮小率として求める
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記描画手段は、
前記対象文字の前記並び方向のサイズを前記第１の縮小率で縮小することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記特定手段は、前記文字列中の各文字について、該文字を包含する外接矩形を前記第１の縮小率で縮小した縮小外接矩形の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された外接矩形の文字を対象文字として特定することを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
更に、
前記文字列を構成する各文字に対して求めた縮小率のうち最大の縮小率を求めた文字と同じ文字種の文字の縮小率を該最大の縮小率に変更する手段を備え、
前記描画手段は、前記変更の後の各文字に対する縮小率を用いて該文字を縮小して前記領域内に描画する
ことを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
文字列を規定の領域内に描画する情報処理装置が行う情報処理方法であって、
前記情報処理装置の取得手段が、前記文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する工程と、
前記情報処理装置の計算手段が、前記領域の、前記文字列を構成する各文字の並び方向に対して垂直方向におけるサイズをＲＨとすると、０＜θ＜１を満たす規定のθを用いて、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝を第１の縮小率として求める計算工程と、
前記情報処理装置の特定手段が、前記文字列中の各文字について、該文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する特定工程と、
前記情報処理装置の第２の縮小率を求める手段が、前記対象文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズをＨとすると、前記第１の縮小率×ＲＨ／Ｈを第２の縮小率として求める工程と、
前記情報処理装置の描画手段が、前記文字列を構成する各文字のうち、非対象文字は第１の縮小率で縮小して前記領域内に描画し、前記対象文字は、前記垂直方向のサイズを前記第２の縮小率で縮小してから前記領域内に描画する描画工程と
を備えることを特徴とする情報処理方法。
【請求項７】
コンピュータを、請求項１乃至５の何れか１項に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【請求項８】
文字列を規定の領域内に描画する情報処理装置であって、
前記文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する手段と、
前記領域の、前記文字列を構成する各文字の並び方向に対して垂直方向におけるサイズ、前記ｍａｘＨｅｉｇｈｔ、前記ｃａｐＨｅｉｇｈｔ、前記ｘＨｅｉｇｈｔ、前記ｄｅｓｃｅｎｄを用いて、第１の伸縮率を求める計算手段と、
前記文字列中の各文字について、該文字を前記第１の伸縮率で伸縮した伸縮文字の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する特定手段と、
前記対象文字を前記第１の伸縮率で伸縮した伸縮文字の前記垂直方向のサイズを用いて、第２の伸縮率を求める手段と、
前記文字列を構成する各文字のうち、非対象文字は第１の伸縮率で伸縮して前記領域内に描画し、前記対象文字は、前記垂直方向のサイズを前記第２の伸縮率で伸縮してから前記領域内に描画する描画手段と
を備えることを特徴とする情報処理装置。
【請求項９】
文字列を規定の領域内に描画する情報処理装置が行う情報処理方法であって、
前記情報処理装置の取得手段が、前記文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する工程と、
前記情報処理装置の計算手段が、前記領域の、前記文字列を構成する各文字の並び方向に対して垂直方向におけるサイズ、前記ｍａｘＨｅｉｇｈｔ、前記ｃａｐＨｅｉｇｈｔ、前記ｘＨｅｉｇｈｔ、前記ｄｅｓｃｅｎｄを用いて、第１の伸縮率を求める計算工程と、
前記情報処理装置の特定手段が、前記文字列中の各文字について、該文字を前記第１の伸縮率で伸縮した伸縮文字の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する特定工程と、
前記情報処理装置の第２の伸縮率を求める手段が、前記対象文字を前記第１の伸縮率で伸縮した伸縮文字の前記垂直方向のサイズを用いて、第２の伸縮率を求める工程と、
前記情報処理装置の描画手段が、前記文字列を構成する各文字のうち、非対象文字は第１の伸縮率で伸縮して前記領域内に描画し、前記対象文字は、前記垂直方向のサイズを前記第２の伸縮率で伸縮してから前記領域内に描画する描画工程と
を備えることを特徴とする情報処理方法。
【請求項１０】
コンピュータを、請求項８に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字の描画技術に関するものである。
【背景技術】
【０００２】
所定の範囲に文字列を収めるには、文字列全体を縮小させるか、所定の範囲からはみ出した文字だけをはみ出した方向に縮小させるのが一般的である。従来、所定の領域内に文字を収めるために、平仮名やアルファベット、漢字のような種類や、文字の複雑さに応じて縦横の伸縮率を独立して変倍することで所定の矩形内に文字列を収める方法が提案されている（特許文献１）。この方法では、入力された文字列によっては個々の文字の大きさにばらつきが生じ、読みにくくなる場合がある。そのため、表示する際の仮倍率を決定し、第１の種類の文字コードのみからなる文字列に関しては表示する際の倍率を統一し、仮倍率と統一された倍率にしたがって描画する方法が提案されている（特許文献２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−４７９４２号公報
【特許文献２】特開２０１０−１６０２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、所定の範囲内に文字列を収めるために文字列全体を縮小させると、文字によっては所定の範囲と比べてかなり小さくなる場合がある。また、所定の範囲からはみ出す文字だけをはみ出す方向に縮小させると、例えば大文字と小文字のような本来の文字の大小関係が崩れてしまい、入力した文字列によっては違和感のある描画結果となり得る。特に、入力する文字列にダイアクリティカルマークが付された文字が含まれていると、これらの課題は顕著なものとなる。ダイアクリティカルマークとは、ラテン文字等の文字で、同じ字形の文字であるが発音が区別されるべき場合に、母音を表す文字の上や下に付される記号のことである。従来技術ではこれらの課題を十分に解決できていない。
【０００５】
本発明はこのような問題に鑑みてなされたものであり、文字列を、視認性の低減を抑えつつ規定の範囲内に収まるように描画するための技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の目的を達成するために、例えば、本発明の情報処理装置は、文字列を規定の領域内に描画する情報処理装置であって、前記文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する手段と、前記領域の、前記文字列を構成する各文字の並び方向に対して垂直方向におけるサイズをＲＨとすると、０＜θ＜１を満たす規定のθを用いて、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝を第１の縮小率として求める計算手段と、前記文字列中の各文字について、該文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズが前記領域の前記垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する特定手段と、前記対象文字を前記第１の縮小率で縮小した縮小文字の前記垂直方向のサイズをＨとすると、前記第１の縮小率×ＲＨ／Ｈを第２の縮小率として求める手段と、前記文字列を構成する各文字のうち、非対象文字は第１の縮小率で縮小して前記領域内に描画し、前記対象文字は、前記垂直方向のサイズを前記第２の縮小率で縮小してから前記領域内に描画する描画手段とを備えることを特徴とする。
【発明の効果】
【０００７】
本発明の構成により、文字列を、視認性の低減を抑えつつ規定の範囲内に収まるように描画することができる。
【図面の簡単な説明】
【０００８】
【図１】装置１００の機能構成例を示すブロック図。
【図２】情報処理装置の機能構成例を示すブロック図。
【図３】従来方法における問題点を説明する図。
【図４】情報処理装置が行う処理のフローチャート。
【図５】フォントメトリクス情報について説明する図。
【図６】ステップＳ４０６における処理の詳細を示すフローチャート。
【図７】第１の実施形態による文字列描画を説明する図。
【図８】新たな課題について説明する図。
【図９】第２の実施形態に係る処理のフローチャート。
【図１０】第３の実施形態による文字列描画を説明する図。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００１０】
［第１の実施形態］
先ず、文字列を描画する装置（文字描画処理装置）として機能する情報処理装置の機能構成例について、図２のブロック図を用いて説明する。なお、図２に示した構成は、以下に説明する各処理に関係する構成であり、本実施形態に係る情報処理装置の全ての構成を示したものではない。また、以下に説明する各処理を実行可能な構成であれば、図２に示した構成は適宜変更／変形させてもよい。
【００１１】
文字列取得部２０１は、規定の領域（描画領域）内に描画する文字列を取得する。この「規定の領域」とは、例えば、情報処理装置に接続されている不図示のモニタ上の領域であってもよい。
【００１２】
文字種分類部２０２及び文字種情報取得部２０５は本実施形態では使用せず、後述するケースにおいて使用する。然るに本実施形態では文字種分類部２０２及び文字種情報取得部２０５は情報処理装置に組み入れる必要はない。
【００１３】
形状情報取得部２０３は、文字列取得部２０１が取得する文字列を構成する各文字の形状を表す形状情報をフォントデータ２０４（実際にはメモリ中のフォントデータ２０４）から取得する。本実施形態では、文字列のフォントメトリクス情報を取得する。
【００１４】
描画範囲取得部２０６は、文字列取得部２０１が取得した文字列を描画する領域（上記の規定の領域に相当）を示す情報（例えば描画する領域の左上隅の位置と右下隅の位置や、該領域の高さと幅）を取得する。
【００１５】
閾値取得部２０７は、後述する閾値を取得する。この閾値は予め定められたものを外部から若しくは情報処理装置内のメモリから取得するようにしてもよいし、ユーザ操作により適宜設定されたものを取得するようにしてもよい。
【００１６】
第１伸縮率決定部２０８は、形状情報取得部２０３が取得したフォントメトリクス情報、描画範囲取得部２０６が取得した情報、閾値取得部２０７が取得した閾値、を用いて、文字列取得部２０１が取得した文字列に対する伸縮率（第１の伸縮率）を求める。
【００１７】
収まり判定部２０９は、第１の伸縮率で伸縮した文字列（伸縮文字列）を描画範囲取得部２０６が取得した情報によって規定される描画領域内に描画した場合に、該描画領域からはみ出している文字があるか否かをチェックする。そして収まり判定部２０９は、はみ出している文字があると判断した場合には、その旨を第２伸縮率決定部２１０に通知する。なお、収まり判定部２０９は、はみ出している文字はないと判断した場合には、その旨を描画処理部２１１に通知する。
【００１８】
第２伸縮率決定部２１０は、収まり判定部２０９がはみ出している文字として特定した文字（対象文字）を描画領域内に納めるための伸縮率（第２の伸縮率）を求める。そして第２伸縮率決定部２１０は、求めた第２の伸縮率を、描画処理部２１１に対して送出する。
【００１９】
描画処理部２１１は、文字列を構成する各文字を、該文字に対する伸縮率で伸縮して描画領域内に描画する。即ち、対象文字は、第２の伸縮率で伸縮して描画し、非対象文字は、第１の伸縮率で伸縮して描画する。実施形態としては、対象文字や非対象文字は、伸長してもよいし、縮小してもよいが、以降の説明では、縮小する場合の例を説明する。
【００２０】
ここで、従来の方法で文字列を描画領域内に描画する場合に発生する問題点について、図３を用いて説明する。図３（ａ）〜（ｃ）の描画領域３０１はいずれも同じサイズである。
【００２１】
ここで、文字列３０２にはアルファベットの大文字と小文字が混在しており、左から１文字目の大文字「Ａ」と７文字目の小文字「ｏ」にはそれぞれ、ダイアクリティカルマークであるリング記号とウムラウト記号が上部に付されている。ダイアクリティカルマークとは、ラテン文字などの文字で同じ字形の文字であるが発音が区別されるべき場合に母音を表す文字の上や下に付される記号のことである。ダイアクリティカルマークにはリングやウムラウトのほかにセディーユ、チルダなどがある。
【００２２】
図３（ａ）には、描画領域３０１の高さ１００ピクセルと同じフォントサイズ１００ピクセルで描画した文字列３０２が示されている。図３（ａ）では、ダイアクリティカルマークの付された文字「Ａ」や「ｏ」の上部が描画領域３０１からはみ出している。図３（ｂ）には、１００ピクセルの高さに全て収まるように文字列３０２全体を縮小して描画した結果を示している。図３（ｂ）では、文字列３０２の全ての文字が描画領域３０１内に収まるが、小文字の大きさが描画領域３０１に対してかなり小さくなる。大文字の上にダイアクリティカルマークのような記号が付される文字と、小文字が混在する文字列においては、このような課題が顕著になる。図３（ａ）においてはみ出している文字（ここではダイアクリティカルマークの付された「Ａ」と「ｏ」）だけを、はみ出した方向（この場合高さ方向）に縮小して描画領域３０１に収めた結果を図３（ｃ）に示す。図３（ｃ）に示した描画結果では、文字「Ａ」が小文字の高さ３０３よりも低くなってしまい、違和感のある表示となる。これは、はみ出した方向にさらに縮小させたときの縮小率が大きい場合にこのような課題が生じる。
【００２３】
本実施形態ではこのような問題を解消すべく以下に説明する各処理を実行し、文字列を違和感なく描画領域内に納めて描画する。本実施形態に係る情報処理装置が、与えられた文字列を規定のサイズ（高さ）の描画領域内に描画するために行う処理について、同処理のフローチャートを示す図４を用いて説明する。
【００２４】
ステップＳ４０１では、文字列取得部２０１は、描画領域に描画する文字列を取得する。以下の説明では、文字列取得部２０１が図３に示した文字列３０２を取得したケースについて説明するが、以下の説明はこのようなケースに限るものではない。また、本実施形態では、この文字列３０２において左端の文字から右端の文字までの各文字を順に描画する。文字列３０２は大文字と小文字で構成されたラテン文字である。
【００２５】
ステップＳ４０２では、描画範囲取得部２０６は、文字列３０２の描画領域を示す情報を取得する。本実施形態では、描画領域の高さ（文字列３０２を構成する各文字の並び方向（ここでは水平方向）に対して垂直方向）である「１００ピクセル」の情報を取得する。しかし、文字の並び順によっては、取得するものは水平方向の幅でもよく、その両方による矩形領域でも構わない。
【００２６】
ステップＳ４０３では、形状情報取得部２０３は、文字列３０２のフォントメトリクス情報をフォントデータ２０４（実際にはメモリ中のフォントデータ２０４）から取得する。取得するフォントのメトリクス情報について図５を用いて説明する。
【００２７】
フォントデータ２０４に格納されているメトリクス情報の種類は多数あるが、本実施形態ではアウトラインフォントのフォントデータに対し、図５に示す各高さの情報を取得する。
【００２８】
ｂａｓｅｌｉｎｅ５０１は、欧文に限らず様々な文字体系に存在する仮想的なラインであり、アルファベットの場合では大文字の下端が揃う水平線である。ｍａｘＨｅｉｇｈｔ５０２は、フォントデータに格納されている文字の中で最大の高さである。ｃａｐＨｅｉｇｈｔ５０３は、欧文書体での大文字の高さを指す。ｘＨｅｉｇｈｔ５０４は、小文字の高さを指す。ｄｅｓｃｅｎｄ５０５は、小文字におけるｂａｓｅｌｉｎｅ５０１よりはみ出た部分の下端の高さである。これらの高さは全てｂａｓｅｌｉｎｅ５０１からの高さである。
【００２９】
図４に戻って、次に、ステップＳ４０５では、閾値取得部２０７は、閾値θを取得する。本実施形態では、この閾値θは、大文字の高さに対する小文字の高さの比率の閾値であり、図５に示したｃａｐＨｅｉｇｈｔに対するｘＨｅｉｇｈｔの比率の閾値である。ここでは一例としてこの閾値θは０．９（９０％）とする。これは、小文字の高さが大文字の高さに対して９０％より大きくなるような縮小を文字列に対して行ってはいけないことを示している。
【００３０】
そして、ステップＳ４０６では、第１伸縮率決定部２０８は、第１の縮小率を求める。ステップＳ４０６における処理の詳細を、図６のフローチャートを用いて説明する。もちろん、図６のフローチャートにおける各ステップの処理の主体はいずれも、第１伸縮率決定部２０８である。
【００３１】
ステップＳ６０１では、フォントメトリクス情報からｃａｐＨｅｉｇｈｔとｘＨｅｉｇｈｔとを取得する。そしてステップＳ６０２では、ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔが閾値θ以上であるか否かを判断する。この判断の結果、ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔが閾値θ以上であれば、処理はステップＳ６０３に進み、ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔが閾値θ未満であれば、処理はステップＳ６０４に進む。
【００３２】
本実施形態では、描画領域の高さ（１００ピクセル）に文字を収めることが目的であるため、はみ出すような文字があることを前提としており、はみ出した場合には描画領域に収まるようにその文字をはみ出した方向に縮小させる。そのため、比率（ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔ）が閾値θ以上であれば、縮小させるとその比率はさらに大きくなる。よってこの比率が閾値θ以上であれば、閾値θを考慮する必要がなくなる。
【００３３】
そのため、ステップＳ６０３では、ｃａｐＨｅｉｇｈｔとｄｅｓｃｅｎｄとの和が、描画領域の高さとなるように第１の縮小率を決定する。即ち、第１の縮小率は、描画領域の高さ／（ｃａｐＨｅｉｇｈｔ＋ｄｅｓｃｅｎｄ）を計算することによって求める。
【００３４】
一方、比率（ｘＨｅｉｇｈｔ／ｃａｐＨｅｉｇｈｔ）が閾値θ未満の場合、それは仮にはみ出す文字があってもそれを更に縮小できる余地があることを意味する。前述した課題の１つでもある「文字が小さくなりすぎる」ことを抑制するためには、はみ出した文字に対する縮小率を、小文字の大文字に対する高さの比率が９０％を超えない最大の値にすることが望ましいことになる。
【００３５】
以下では説明上、ｍａｘＨｅｉｇｈｔが２１７１ピクセル、ｃａｐＨｅｉｇｈｔが１４９３ピクセル、ｘＨｅｉｇｈｔが１１２０ピクセル、ｄｅｓｃｅｎｄが４８３ピクセルであるとする。しかし、これらの値はあくまでも一例であり、以下の説明は、このケースに限るものではない。
【００３６】
大文字の高さに対して小文字の高さが９０％となるような大文字の高さ、即ち、大文字の最大縮小高さは、１１２０／０．９＝約１２４５ピクセルである。然るに、大文字に対して適用できる最大縮小率は１２４５／１４９３＝約０．８４倍となる。これは、たとえ大文字が描画領域からはみ出したとしてもこの値までは垂直方向（高さ方向）に縮小できることを表す。
【００３７】
然るに、ｍａｘＨｅｉｇｈｔの０．８４倍の高さである約１２８４ピクセルと、ｄｅｓｃｅｎｄの和（ここの例では約０．０４３３５倍）である１８２３ピクセルが、描画領域の高さ（１００ピクセル）に収まるような縮小率が第１の縮小率となる。具体的には、描画領域の高さ／（ｍａｘＨｅｉｇｈｔ×０．８４＋ｄｅｓｃｅｎｄ）を計算することで第１の縮小率を求める。ステップＳ６０４では、このような計算を行うことで、第１の縮小率を求める。
【００３８】
図７（ａ）には、描画領域７０１の高さ１００ピクセルと同じフォントサイズ１００ピクセルで描画した文字列が示されている。図７（ａ）〜（ｃ）の描画領域７０１はいずれも同じサイズである。この文字列に対してステップＳ６０４で求めた第１の縮小率を用いた縮小処理を行うと、図７（ｂ）に示す如くの結果となる。
【００３９】
図３（ｂ）の文字列は、ｍａｘＨｅｉｇｈｔの２１７１ピクセルとｄｅｓｃｅｎｄの４８３ピクセルの和である２６５４ピクセルが描画領域３０１の高さ１００ピクセルに収まるような縮小率で縮小して描画したものである。この縮小率は１００／２６５４＝約０．０３７６８倍である。そのため、図３（ｂ）の小文字に比べると図７（ｂ）の小文字は若干大きい。
【００４０】
図７（ａ）の文字列はｃａｐＨｅｉｇｈｔの１４９３ピクセルとｄｅｓｃｅｎｄの４８３ピクセルの和である１９７６ピクセルが描画領域７０１の高さ１００ピクセルに収まるような縮小率で縮小して描画したものである。この縮小率は１００／１９７６＝約０．０５０６１倍である。そのため図７（ｂ）は図７（ａ）と比べると全体的に小さくなっているが、それでもリング記号が付された文字「Ａ」の上部は描画領域７０１から少しはみ出している。このリング記号が付された文字「Ａ」はこのフォントの最大の高さを有する文字である。このはみ出した部分を描画領域７０１に収めるためには、大文字の高さを、先に算出した大文字に適用できる最大縮小率である０．８４倍に縮小すればよい（この処理は後述する図４のＳ４０８に相当する）。そのときの描画結果が図７（ｃ）である。このときの「Ａ」部分の高さは、１４９３×０．０４３３５×０．８４＝約５４．３６６ピクセルであり、小文字の高さは１１２０×０．０４３３５＝４８．５５２ピクセルである。大文字に対する小文字の高さの比率は４８．５５２／５４．３６６×１００＝約８９．３％となり、閾値である９０％より小さく、かつ描画領域に文字列が収まっている。然るに、ステップＳ６０４で求めた第１の縮小率で縮小した文字であれば、描画領域からはみ出た方向に対して収まるようにさらに縮小しても、比率に関する閾値９０％を超えないことが示される。
【００４１】
ステップＳ４０７では、収まり判定部２０９は、文字列３０２の先頭文字から順に参照し、未選択の文字を１つ選択する。そしてこの選択した文字を包含する外接矩形をステップＳ４０６で求めた第１の縮小率で縮小した縮小外接矩形の高さが描画領域の高さを超えているか否かを判断する。この判断の結果、超えていると判断した場合には、処理はステップＳ４０８に進み、超えていないと判断した場合には、処理はステップＳ４０９に進む。
【００４２】
ステップＳ４０８では、第２伸縮率決定部２１０は、縮小外接矩形の高さが描画領域の高さを超えていると判断された文字を対象文字とし、該対象文字に対する縮小率である第２の縮小率を求める。
【００４３】
第２の縮小率は水平方向と垂直方向それぞれ独立して決めることができるが、本実施形態では、垂直方向のはみ出しだけを考慮しているため、垂直方向の縮小率のみが変更される。第１の縮小率をＳ、対象文字を包含する外接矩形の高さをＨピクセルとすると、水平方向の第２の縮小率ＳｘはＳｘ＝Ｓ、垂直方向の第２の縮小率ＳｙはＳｙ＝Ｓ×（描画領域の高さ）／Ｈとなる。
【００４４】
第２の縮小率Ｓｙを大文字の垂直方向にかけても、小文字の高さが大文字の高さに対して９０％より大きくならないのは、前述の説明より明らかである。このＳｘ，Ｓｙを、対象文字に対する第２の縮小率とする。
【００４５】
ステップＳ４０９では描画処理部２１１は、ステップＳ４０７で選択した文字が対象文字であれば、この対象文字を第２の縮小率に従って縮小して描画する。一方、描画処理部２１１は、ステップＳ４０７で選択した文字が非対象文字であれば、この非対象文字を第１の縮小率に従って縮小して描画する。
【００４６】
ステップＳ４１０では、収まり判定部２０９は、文字列３０２を構成する全ての文字を選択したか否かを判断する。この判断の結果、全ての文字を選択した場合には、図４のフローチャートに従った処理は終了し、まだ未選択の文字が残っている場合には、処理はステップＳ４０７に戻り、未選択の文字について以降の処理を行う。
【００４７】
本実施形態では、欧文を例に横書きの文字列に対して文字列全体を縮小後、垂直方向にはみ出した文字を垂直方向にさらに縮小することで文字列を構成する全ての文字を描画領域内に収めた。しかし、縦書きの文字列に対しても、はみ出す方向および縮小させる方向が水平方向に変わるだけで、はみ出す方向に対してさらに縮小させる本実施形態で示した方法が成り立つことは言うまでもない。
【００４８】
ここで、第１の実施形態をまとめると、第１の実施形態に係る情報処理装置は、ようは、文字列を規定の領域内に描画する情報処理装置である。先ず、文字列のフォントメトリクス情報で定義されているｍａｘＨｅｉｇｈｔ、ｃａｐＨｅｉｇｈｔ、ｘＨｅｉｇｈｔ、ｄｅｓｃｅｎｄを取得する。そして、この領域の、文字列を構成する各文字の並び方向に対して垂直方向におけるサイズをＲＨとすると、０＜θ＜１を満たす規定のθを用いて第１の縮小率を求める。第１の縮小率は、ＲＨ／｛ｍａｘＨｅｉｇｈｔ×ｘＨｅｉｇｈｔ／（θ×ｃａｐＨｅｉｇｈｔ）＋ｄｅｓｃｅｎｄ｝である。
【００４９】
そして、文字列中の各文字について、該文字を第１の縮小率で縮小した縮小文字の上記垂直方向のサイズが領域の垂直方向のサイズを超えているか否かを判断し、該判断により超えていると判断された文字を対象文字として特定する。そして、対象文字を第１の縮小率で縮小した縮小文字の上記垂直方向のサイズをＨとすると、第１の縮小率×ＲＨ／Ｈを第２の縮小率として求める。
【００５０】
そして、文字列を構成する各文字のうち、非対象文字は第１の縮小率で縮小して領域内に描画し、対象文字は、上記垂直方向のサイズを第２の縮小率で縮小してから領域内に描画する。
【００５１】
［第２の実施形態］
大文字と小文字とが混在する文字列を規定のサイズの描画領域内に納めて描画する場合における新たな課題について、図８を用いて説明する。図８（ａ）は描画領域８０１の高さ１００ピクセルに基づき、フォントサイズ１００ｐｘで文字列８０２を描画した結果を示している。文字列８０２は図３で用いた文字列３０２のうち左から４文字目の小文字「ｓ」が大文字「Ｓ」に変更されている。図８（ｂ）は、この文字列８０２を第１の実施形態に従って描画領域８０１内に描画した結果を示している。図８（ａ）ではみ出していた１文字目のリング記号の付された「Ａ」は描画領域８０１に収まるように垂直方向に縮小されている。しかし、４文字目の「Ｓ」は図８（ａ）ではみ出していないのではみ出しを修正する垂直方向への縮小がなされていない。そのため、この２文字は同じ文字種（大文字）であるにも関わらず、高さが異なっていて若干の違和感を覚える。線８０３は１文字目のリング記号の付された文字の「Ａ」部分の高さを示している。
【００５２】
この課題の解決方法の一例である処理について、同処理のフローチャートを示す図９を用いて説明する。なお、本実施形態においてもこの処理は図２に示した機能構成例を有する情報処理装置が行うものとする。
【００５３】
ステップＳ９０１では、図４，６を用いて説明した上記処理を実行することで、第１の縮小率、第２の縮小率を求める。なお、第２の縮小率は必ず求まるものではないが、ここでは第１の縮小率及び第２の縮小率が求まったとして説明する。これにより、各文字の縮小率が得られたことになる。
【００５４】
ステップＳ９０２では、文字列（図８の場合は文字列８０２）を構成する各文字のうち、最大の縮小率を求めた文字と、該最大の縮小率と、を特定する。特定する文字は、文字列の中で最も大きな文字である。
【００５５】
ステップＳ９０３では、文字列を構成する各文字を順に参照し、未選択の文字を１つ選択する。そしてこの選択した文字の文字種が、ステップＳ９０２で特定した文字種と同じであるか否かを判断する。ここでは文字種として大文字、小文字を用いるので、例えば、ステップＳ９０２で特定した文字が大文字である場合には、ステップＳ９０３では、選択した文字が大文字であるか否かを判断する。
【００５６】
そしてこの判断の結果、選択した文字の文字種が、ステップＳ９０２で特定した文字種と同じである場合には、処理はステップＳ９０４に進み、同じではない場合には、処理はステップＳ９０５に進む。
【００５７】
ステップＳ９０４では、選択した文字に対する縮小率を、ステップＳ９０２で特定した最大の縮小率に変更する。そしてステップＳ９０６では、文字列を構成する全ての文字をステップＳ９０３で選択したか否かを判断する。この判断の結果、全ての文字を選択した場合には、図９のフローチャートに従った処理は終了し、まだ未選択の文字が残っている場合には、処理はステップ９０３に戻り、未選択の文字について以降の処理を行う。
【００５８】
このように、図９のフローチャートに従った処理によれば、最大の縮小率を求めた文字と同じ文字種の文字は全て最大の縮小率を有することになり、それぞれ同じ縮小率となる。従って、このように、第１の実施形態で決定した各文字の縮小率をこのようにして更新すると、この更新した縮小率に従って文字列を構成する各文字を縮小して描画領域内に描画する。
【００５９】
本実施形態では、入力された文字列全てにおいてステップＳ９０３での判断を行ったが、例えば同じ行、あるいは規定の文字数やピクセル数、幅などの範囲内において、同じ文字種かどうかを判断してもよい。
【００６０】
図９のフローチャートに従った処理により決まった縮小率で文字列８０２を縮小して描画領域８０１内に描画した文字列８０２を図８（ｃ）に示す。線８０４は小文字の高さを示している。大文字である１文字目の「Ａ」部分の高さと４文字目の「Ｓ」の高さが揃い、かつ他の小文字の高さは大文字の９０％より大きくならず、描画領域に収める事ができる。
【００６１】
［第３の実施形態］
第１，２の実施形態では、欧文で使用されるダイアクリティカルマークが付された大文字と小文字が混在する文字列を例に説明したが、本実施形態においては、日本語のルビ文字についても本手法が適用できることを説明する。
【００６２】
図１０（ａ）はルビを含む文字列１００１を、従来の方法で、描画領域１００２（高さ１００ｐｘ）に対し、フォントサイズ１００ｐｘで描画したときの描画結果である。ルビ文字１００３が描画領域１００２からはみ出している。このルビ文字１００３までを描画領域１００２に収めるために文字列１００１全体を縮小した結果を示したものが図１０（ｂ）である。点線１００４は文字「憂鬱」のルビ文字を含まない部分の高さを示している。全体は収まり文字のバランスもよいが、全体が小さくなりすぎてしまう。図１０（ａ）ではみ出しているルビ文字１００３を含む文字「憂鬱」だけを垂直方向に縮小した結果を示したものが同図１０（ｃ）である。平仮名の高さとルビの親文字である「憂鬱」の高さがかなり違うため、これも違和感を覚える。
【００６３】
そこで本実施形態では、文字種分類部２０２は、文字列取得部２０１が取得した文字列を構成する各文字を第１の文字（第１の文字種）と第２の文字（第２の文字種）とに分類する。即ち、ルビ文字がふられている文字とルビ文字がふられていない文字とに分類する。文字種情報取得部２０５は、この分類内容を第１伸縮率決定部２０８に通知する。以降の処理は第１の実施形態で説明したとおりである。即ち、ルビ文字がふられている文字を、ダイアクリティカルマークの付された「Ａ」や「ｏ」と同様にして取り扱う。
【００６４】
ルビ文字をＨＴＭＬで表記する場合、文字列１００１を例に挙げると、図１０（ｆ）のようになる。また、Ｕｎｉｃｏｄｅで表記する場合は以下に示すルビ表示のための制御文字を使用する。ルビを乗せる文字を親文字と呼び、その親文字の開始指定文字であるＵ＋ＦＦＦ９、ルビの開始指定文字であるＵ＋ＦＦＦＡ、ルビの終止指定文字であるＵ＋ＦＦＦＢの３つである。これらを用いて文字列１００１を表記すると図１０（ｇ）のようになる。
【００６５】
第１、第２の文字種を識別するためには、ルビのためのＨＴＬＭタグやルビ表示制御文字を解析し、どの文字にルビがふられているかを判別する必要がある。第１の実施形態では、図４のステップＳ４１０での処理にこの処理が含まれることになる。なお、親文字の上にどの程度の大きさや幅（図１０の幅１００５に相当する）でルビをふるかは描画装置に依存するため、ルビ文字を振るのに必要な幅やフォントサイズを取得する構成が図６のステップＳ６０１で必要となる。これにより、ルビ文字及び親文字を、ダイアクリティカルマークの付された「Ａ」や「ｏ」と同様にして取り扱うことができる。
【００６６】
図４のステップＳ４０６で決定された文字列全体にかける縮小率で描画した結果が図１０（ｄ）であり、第２の縮小率を用いてルビ文字を含む親文字を縮小した結果が図１０（ｅ）となる。図１０（ｂ）、（ｅ）を比べると、後者の方が、全体が大きく読みやすい。また、図１０（ｃ）、（ｅ）を比べると、ルビ文字無しの文字とルビ文字有りの文字の高さは図１０（ｅ）の方が、図１０（ｃ）と比べると差が無く、違和感を低減できていると言える。
【００６７】
なお、第１〜３の実施形態は、例えば次のような状況に適用が可能である。例えば、情報処理装置上で動作するＧＵＩ（グラフィカルユーザインターフェース）をユーザが操作することで描画対象となる文字列を選択すると共に、描画領域を設定する。この選択する文字は、第１の実施形態で説明したような「ダイアクリティカルマークが付された大文字と小文字が混在する文字列」であってもよい。また、第２の実施形態で説明したような「ダイアクリティカルマークが付された大文字と付されていない大文字と小文字が混在する文字列」であってもよい。また、第３の実施形態で説明したような、「ルビ文字がふられている文字を含む文字列」であってもよい。また、ユーザはＧＵＩを操作して、上記のθなどのパラメータを設定／再設定してもよい。そして、ユーザがＧＵＩを操作して文字列の描画指示を与えると、情報処理装置は該文字列を構成する各文字を該文字に対応する縮小率で縮小し、設定した描画領域内に描画する。また、第１〜３の実施形態のうち２以上を適宜組み合わせて用いてもよい。
【００６８】
［第４の実施形態］
図２に示した各部はハードウェアで構成してもよいが、ソフトウェアで構成してもよい。その場合、このソフトウェアを実行する装置には、例えば、図１に示した構成を有する装置１００が適用可能である。
【００６９】
ＣＰＵ１０１は、ＲＯＭ１０２やＲＡＭ１０３に格納されているコンピュータプログラムやデータを用いて処理を実行することで、本装置１００全体の動作制御を行うと共に、各種の処理を実行する。
【００７０】
ＲＯＭ１０２には、本装置の設定データやブートプログラムなどが格納されている。ＲＡＭ１０３は、外部記憶装置１０６からロードされたコンピュータプログラムやデータを一時的に記憶するためのエリアや、ＣＰＵ１０１が各種の処理を実行する際に用いるワークエリアも有する。即ち、ＲＡＭ１０３は各種のエリアを適宜提供することができる。
【００７１】
表示部１０５は、ＣＲＴや液晶画面などにより構成されており、ＣＰＵ１０１による処理結果を画像や文字などでもって表示することができる。例えば、上記のＧＵＩなどを表示してもよい。
【００７２】
描画処理部１０４は、画像や文字を描画するためのもので、例えば、図２の描画処理部２１１をハードウェアで構成する場合には、描画処理部１０４がこの描画処理部２１１に相当する。
【００７３】
外部記憶装置１０６は、ハードディスク装置などの大容量情報記憶装置である。この外部記憶装置１０６には、ＯＳ（オペレーティングシステム）や、第１〜３の実施形態において情報処理装置が行うものとして説明した各処理をＣＰＵ１０１に実行させるためのコンピュータプログラムやデータが保存されている。また、第１〜３の実施形態において予め定められている情報として説明したものも、この外部記憶装置１０６に保存されている。また、描画対象の文字のデータやフォントデータ２０４もこの外部記憶装置１０６に保存されている。
【００７４】
外部記憶装置１０６に保存されているコンピュータプログラムやデータは、ＣＰＵ１０１による制御に従って適宜ＲＡＭ１０３にロードされ、ＣＰＵ１０１による処理対象となる。然るに、ＣＰＵ１０１が「第１〜３の実施形態において情報処理装置が行うものとして説明した各処理をＣＰＵ１０１に実行させるためのコンピュータプログラムやデータ」を用いて処理を実行することで、図２の各部の機能が実現されることになる。これにより、装置１００は、第１〜３の実施形態において説明した情報処理装置として機能することになる。上記の各部はいずれも、バス１０７に説明されており、互いにこのバス１０７を介して通信可能である。
【００７５】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2014142789.tif 000003
【図２】
2014142789.tif 000004
【図３】
2014142789.tif 000005
【図４】
2014142789.tif 000006
【図５】
2014142789.tif 000007
【図６】
2014142789.tif 000008
【図７】
2014142789.tif 000009
【図８】
2014142789.tif 000010
【図９】
2014142789.tif 000011
【図１０】
2014142789.tif 000012