以下、図面を参照して本発明に係る画像出力制御装置およびその処理手順の実施形態について詳細に説明する。
<システム構成の概要>
図1は、本発明に係る画像出力制御装置の一実施形態を備えた画像処理システムの概要を示す図である。この画像処理システム1は、画像出力制御装置2とホストコンピュータ装置8とがネットワーク9により接続されて構成されている。
ホストコンピュータ装置8は、画像入力端末としての役割を持っており、デジタルドキュメント(以下電子ドキュメントという)DOCを作成し、また編集などの処理をする。なお、画像入力端末としては、画像出力制御装置2側で画像出力に供し得る画像情報を取得し得るものであればよく、ホストコンピュータ装置8に限らず、たとえばパソコン(パーソナルコンピュータ)、カラースキャナ、デジタルカメラ、またはハードディスク装置や光磁気ディスク装置あるいは光ディスク装置などのデータ格納装置、さらにはFAX装置など、任意数の画像入力ソースを含み得る。
ホストコンピュータ装置8を始めとする画像入力端末のそれぞれには、電子ドキュメントDOC作成用のアプリケーションプログラムなどが組み込まれる。ホストコンピュータ装置8側にて用意される電子ドキュメントDOCを表す電子データは、アプリケーション独自のフォーマットで画像出力端末の役割を持つ画像出力制御装置2側に送信されてもよいし、画像出力制御装置2で処理可能な画像フォーマット(たとえば、JPEG、BMP、PNGなど)で画像出力制御装置2に送信されてもよい。
画像出力制御装置2は、画像出力端末の役割を持っており、本体3の他に、画像表示システムとして稼働させるためのCRTや液晶(LCD)あるいは有機ELなどで構成されるディスプレイ4と、この画像出力制御装置2を操作するためのキーボード5やマウス6などの入力指示デバイスを備えている。
この画像出力制御装置2は、先ず、画像表示に関わる処理を行なう機能部分として、本体3内部に、描画展開処理機能をなす機能部分(詳細は後述する)が設けられている。この描画展開処理機能部分は、描画展開したデータに基づいて可視像をディスプレイ4にて表示出力する。描画展開処理機能部分は、ディスプレイ4とともに使用される本体3の内部に、ソフトウェアあるいは専用もしくは汎用のハードウェアで組み込むとよい。
描画展開処理機能部分は、電子ドキュメントDOCが入力されると、電子ドキュメントDOCに含まれている描画コマンドに基づいて、周知技術に従って、複数、好ましくは最低3つの分解色を表すデータを生成しレンダリング(ラスタデータに展開)する。たとえばYCrCb表色系から、たとえばRGB表色系へのマッピングをし、表示出力用に色分解されたラスタデータを生成する。また描画展開処理機能部分は、このようなラスタデータ化の処理に際して、オペレータの好みに応じた色補正処理など、所定の出力処理を行なってもよい。この構成により、画像出力制御装置2は、描画展開処理機能部分にて信号変換処理されたカラー画像をディスプレイ4にて可視像として出力する。
<画像出力制御装置の構成>
図2は、画像出力制御装置2の詳細な構成例を示すブロック図である。
本実施形態の画像出力制御装置2は、ホストコンピュータ装置8などの画像入力端末においてワードプロセッサアプリケーションなどを利用して作成された電子ドキュメントDOCを、そのホストコンピュータ装置8などの画像入力端末からネットワーク9を介して受信すると、受信した電子ドキュメントDOC中に記述された描画コマンド(直線、曲線、フォント、ラスタ画像、塗りつぶしなどの描画命令)を解釈して図形描画処理を行ない、描画された図形をビットマップイメージとして生成し、描画終了後に生成されたラスタ状の図形データを、ディスプレイ4にて表示するものである。
このために、画像出力制御装置2は、本体3内に、描画展開処理機能をなす機能部分が設けられている。本実施形態において、この描画展開処理機能部分は、ソフトウェアで組み込む構成としている。この場合、その機能を実現するプログラムコードに基づいて電子計算機(コンピュータ)を用いてソフトウェア的に実現するようになる。よって、本発明に係る画像出力制御方法や装置を、電子計算機(コンピュータ)を用いてソフトウェアで実現するために好適なプログラムあるいはこのプログラムを格納したコンピュータ読取可能な記憶媒体を発明として抽出することもできる。ソフトウェアにより実行させる仕組みとすることで、ハードウェアの変更を伴うことなく、処理手順などを容易に変更できる利点を享受できるようになる。
一連の表示制御処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ(組込マイコンなど)、あるいは、CPU(Central Processing Unit ;中央処理部)、論理回路、記憶装置などの機能を1つのチップ上に搭載して所望のシステムを実現するSOC(System On a Chip:システムオンチップ)、または、各種のプログラムをインストールすることで各種の機能を実行することが可能な汎用のパーソナルコンピュータなどに、記録媒体やネットワーク9を介してインストールされる。
記録媒体は、コンピュータのハードウェア資源に備えられている読取装置に対して、プログラムの記述内容に応じて、磁気、光、電気などのエネルギの変化状態を引き起こして、それに対応する信号の形式で、読取装置にプログラムの記述内容を伝達できるものである。たとえば、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD−ROM(Compact Disc-Read Only Memory )、DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini Disc )を含む)、または半導体メモリなどよりなるパッケージメディア(可搬型の記憶媒体)により構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM(Read Only Memory)やRAM(Random Access Memory)あるいはハードディスクなどで構成されてもよい。または、ソフトウェアを構成するプログラムが、有線あるいは無線などの通信網を介して提供されてもよい。
たとえば、表示制御に関わる描画展開処理機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、ハードウェアにて構成する場合と同様の効果は達成される。この場合、記憶媒体から読み出されたプログラムコード自体が描画展開処理の機能を実現することになる。
また、コンピュータが読み出したプログラムコードを実行することにより、描画展開処理を行なう機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム;基本ソフト)などが実際の処理の一部または全部を行ない、その処理によって描画展開処理を行なう機能が実現される場合であってもよい。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によって描画展開処理を行なう機能が実現される場合であってもよい。
なお、描画展開処理を行なう機能を実現するプログラムコードを記述したファイルとしプログラムが提供されるが、この場合、一括のプログラムファイルとして提供されることに限らず、コンピュータで構成されるシステムのハードウェア構成に応じて、個別のプログラムモジュールとして提供されてもよい。以下具体的に説明する。
図2に示すように、画像出力制御装置2は、画像出力制御装置2全体の動作制御やその他の演算や制御の各処理機能をなすCPU10と、不揮発性の記憶部の一例であるROM30と、書換可能な記憶部の一例であるRAM40と、ディスプレイ4との間のインタフェース(Inter Face)機能をなすディスプレイI/F(インタフェース)部50と、キーボード5やマウス6との間のインタフェース機能をなす入力I/F部52と、プリンタ7との間のインタフェース機能をなすプリンタI/F部54と、ネットワーク9との間のインタフェース機能をなすネットワークI/F部70と、これらを互いに接続する内部バス80とを備えている。
CPU10は、画像出力制御装置2全体の動作制御のほかに、ネットワークI/F部70を介して受け取った電子ドキュメントDOCを解釈して、その解釈結果に基づいて図形や文字やイメージの描画処理を行なう。この描画処理を行なうために、CPU10は、描画展開処理部12と、本実施形態特有の構成である文字描画処理制御部20とを有する。
描画展開処理部12は、電子ドキュメントDOCに含まれている描画コマンドを解釈する図形描画命令解釈部(電子ドキュメント解釈部)14と、描画処理を行なう図形描画処理部16およびラスタイメージ描画処理部18とを有する。
文字描画処理制御部20は、ネットワーク9を介してホストコンピュータ装置8から送られてきた電子ドキュメント中の文字描画命令を図形描画命令解釈部14より受け取り、文字描画処理を行なう文字描画命令処理部22と、カレントフォントの文字コードに該当する文字のビットマップイメージを生成するビットマップイメージ生成部24と、書体の選択を行なう書体選択部26と、フォント変形の実行を指示するフォント変形実行指定部28とを有する。なお、この図では、フォント変形実行指定部28を文字描画処理制御部20内に取り込んでいるが、文字描画処理制御部20とは別にフォント変形実行指定部28を設けてもよい。
ROM30は、内部に、CPU10が各種処理を行なうための制御プログラムが格納されるプログラム記憶領域32、文字描画のためのフォントデータを格納するフォントデータ記憶領域34、およびCPU10が各種処理を行なうために必要とするその他のデータ記憶領域を有する。
たとえば、ROM30は、CPU10が描画処理を行なうのに必要となる描画プログラムをプログラム記憶領域32に予め格納している。さらに、プログラム記憶領域32は、図示されないOS(Operating Systems ;基本ソフト)やGUI(Graphical User Interface)処理などのプログラムをも格納している。CPU10は、OSやGUI処理を利用しつつ、ROM30内の描画プログラムを実行することによって、上述した各部の機能を実現するようになっている。
RAM40は、CPU10が各種処理を実行する際のワークメモリとして用いられる作業領域であって、内部に、ドキュメント記憶領域42、ディスプレイ4に表示するためあるいはプリンタ7にて印刷出力するためのラスタデータ(ビットマップイメージ)を格納するページバッファ44、文字の拡縮率のを格納する拡縮率テーブル46、および個々の文字のビットマップイメージを格納するビットマップ領域48、あるいはその他のデータ記憶領域を有する。
ネットワークI/F部70は、図形や文字やイメージを描画する描画コマンドが含まれている電子ドキュメントDOCをホストコンピュータ装置8からネットワーク9を介して受信する。
たとえば、フォントデータ記憶領域34は、ビットマップイメージ生成部24が文字描画を行なう、すなわち文字のビットイメージデータを生成するためのフォントデータを1つもしくは複数格納している。このフォントデータは、少なくとも、フォント名(書体名)もしくはファミリ名と、文字の太さに関する情報、文字の傾きに関する情報、文字の大きさに関する情報などの、文字形状の変形に関わる仕様を示す属性情報とを含む(後述する図3を参照)。
書体選択部26は、文字描画命令処理部22により指定された文字列描画命令とフォント指定命令(後述する図3を参照)とフォントデータ記憶領域34に格納されているフォント情報とに基づいて使用する書体を選択する。具体的には、指定された形状情報を最も良く満足する書体を代替えのフォント(近似フォント)として選択し、カレントフォントとして、RAM40の所定の記憶領域に格納しておく。
フォント変形実行指定部28は、文字描画に際して文字サイズ変更処理(拡縮処理、変倍処理)を行なうか否か、文字太さ変更処理(太文字化処理もしくは細文字化処理)を行なうか否か、あるいは文字傾き変更処理(斜体化処理)を行なうか否か、あるいは装置が自動的に選択した置換フォントの変更の指示(以下纏めてフォント変形とも言う)をユーザから受け付け、その指示をビットマップイメージ生成部24に通知する。
ビットマップイメージ生成部24は、文字描画命令処理部22の指令の下で、書体選択部26で選択されたフォントデータをフォントデータ記憶領域34から読み出して、文字列描画命令に対応する文字(記号などの事実上文字のカテゴリーに含まれるものも含む)のビットマップイメージを生成し、生成したビットマップイメージをRAM40のビットマップ領域48に書き込む。このとき、ビットマップイメージ生成部24は、フォントの属性情報に従って展開文字(記号)の大きさを決定し、またフォント変形実行指定部28から通知されたフォント変形指示情報に基づいて、必要に応じて、回転や傾斜化あるいは太文字化など、公知の画像処理技術を利用した文字変形処理を加える。
文字描画命令処理部22は、フォントデータ記憶領域34にて生成されビットマップ領域48に格納された各文字のビットマップイメージを使用して、1画面分あるいは1ページ分のビットイメージデータを展開してページバッファ44に格納する。
ディスプレイI/F部50は、CPU10(詳しくは文字描画処理制御部20)による制御に従いつつ、RAM40内のページバッファ44に展開されたラスタデータを、ディスプレイ4に渡す。これにより、ディスプレイ4は、文字データに基づくラスタデータを表示するようになる。同様に、プリンタI/F部54は、文字描画処理制御部20による制御に従いつつ、RAM40内のページバッファ44に展開されたラスタデータを、プリンタ7に渡す。これにより、プリンタ7は、文字データに基づくラスタデータに従って、所定の記録媒体上に文字を印刷出力するようになる。
<文字描画命令>
図3は、電子ドキュメントDOCに含まれている文字描画命令を説明する図である。図3(A)に示すように、文字描画命令は、フォント指定命令と文字列描画命令とからなる。フォント指定命令は、フォント名(書体名)およびファミリ名と言った専らフォントそのものの基本情報に関わるフォント情報と、文字の太さ、文字の傾斜、あるいは文字のサイズと言った文字の出力形態(形状)やその変形に関わる情報である属性情報(一般にスタイル情報と言われる)とからなっている。文字のサイズは、図3(B)に示すように、各々の文字の横(行)あるいは縦(列)の各方向の幅を示すものである。
たとえば、フォント名としては、公知のように、明朝A、明朝B、ゴシックA、ゴシックB、ゴシックC、欧文X−Roman、欧文X−Bold、欧文X−Italic、欧文Y−Roman、欧文Y−Italicなどが該当する。ファミリ名は、そのフォントのデザインの属する系統を表す。
これら各フォント名に対して属性情報が格納される。属性情報としては、前述のように、たとえば、その書体の文字幅や太さや傾きなどを表す形状情報を含む。たとえば、日本語フォントおよび欧文フォントの如何に関わらず、形状情報として文字の太さを用い、さらに欧文フォントでは、Italic/Roman (直立/傾斜)の字形情報を利用する。
文字列描画命令は、文字数、描画位置、文字コード配列(文字コード×文字数)、および文字描画位置配列(文字描画位置×文字数)を含む。ここで、文字数は、横(行)および縦(列)のそれぞれに文字数であり、文字コード配列および文字描画位置配列に利用される。描画位置は、図3(B)に示すように、横(行)あるいは縦(列)の各方向における各々の文字の描画開始位置を示す。ここで、横(行)について各文字の描画開始位置を結ぶ線が横方向のベースラインである。なお、図示しないが、縦(列)について各文字の描画開始位置を結ぶ線が縦方向のベースラインとなる。
文字コード配列は、文字列情報の中に文字コードが文字数分格納されている、という配列の意味を表わしており、文字列情報が文字数分連続で格納されていて、それだけのデータの容量が必要である、ということを表わしている。文字描画位置配列に関しても、同様に、文字特有のピッチデータ(X方向の増分)が文字数分連続で格納されている、という配列の意味を表わしている。
文字描画処理制御部20は、図3に示したフォント指定命令をホストコンピュータ装置8から受け取ると、先ず書体選択部26が書体の選択を行なう。書体選択部26は、指定されたフォントが存在すればそのフォントをカレントフォントとしてRAM40の所定の記憶領域に設定し、存在しないのであれば、前述のようにして適切な近似フォントに置換して、すなわち指定された形状情報を良く満足する書体のものを近似フォントとして選択してカレントフォントとしてRAM40の所定の記憶領域に設定する。
続いて、文字描画命令処理部22は、文字列描画命令を受け取ると、ビットマップイメージ生成部24に対して、カレントフォントの文字コードに該当する文字についてビットマップイメージの生成を指示する。
なお、ビットマップイメージ生成部24は、カレントフォントの文字コードに該当する文字のビットマップイメージを生成するとき、フォント変形実行指定部28で指定された状態を元にビットマップイメージの変形を行なう。
続いて、ビットマップイメージ生成部24にて描画対象の文字列のビットマップイメージが生成されビットマップ領域48に記憶されると、文字描画命令処理部22は、生成されたビットマップイメージを所定の文字描画位置(後述する説明を参照)に描画する。この際、文字描画命令処理部22は、フォントの拡縮率とフォント変形実行指定部28で指定された状態とに基づいて文字描画位置を修正する。
文字描画処理制御部20は、以上の処理を全ての描画コマンドについて繰り返し実行し、全ての描画コマンドの描画が終了したら、ディスプレイI/F部50部を介してディスプレイ4にラスタデータを出力して1ページ分の表示出力処理を終了させる。あるいは、プリンタI/F部54を介してプリンタ7にラスタデータを出力して1ページ分の印刷出力処理を終了させる。
<拡縮率テーブル>
図4は、RAM40に登録される拡縮率テーブル46の一例を説明する図である。拡縮率テーブル46は、カレントフォントに対応する置換前のフォント指定命令、すなわち置換前のフォント情報と属性情報、並びに、出現した文字コードとそれに対応する拡縮率(変倍率)L1を含む拡縮率情報で構成されている。この拡縮率テーブル46は、文字列描画命令単位で生成し、描画終了後破棄してもよいし、ページ描画単位で生成し、ページ描画終了後に破棄してもよいし、ジョブ描画単位で生成し、破棄してもよい。また、拡縮率情報は、出現した文字コード分だけ存在する必要がある。
<フォントデータの一例>
図5は、フォントデータの一例を示す図である。ここでは前提として、フォントデータは、フォント名とファミリ名を含むフォント情報とその属性情報を含むフォント指定情報と、文字コード、文字を構成するアウトラインデータ、および文字の幅と高さを含むフォントボディとで構成される。
たとえば、フォント名と、ファミリ名と、属性情報で示されるフォントの傾き指定があるか否かのフラグ(一般的にItalicと呼ばれる)と、フォントの太さ指定があるか否かのフラグ(一般的にBoldと呼ばれる)とで表現され、各々のフォント内に含まれる文字は文字コードとその文字を描画するデータと文字の幅と高さで構成される。さらに、複数のフォントに対応するため、フォントボディは複数存在する。なお、図中では、フォントボディがアウトラインデータとなっているが、ビットマップデータやストロークデータの場合であってもよい。
<書体選択部の動作の詳細>
図6は、書体選択部26の処理手順の詳細例を示すフローチャートである。ここでは前提として、図5に示したフォントデータを対象として処理する。
書体選択部26は、先ず、フォント指定命令よりフォント名を取得する(S200)。続いて書体選択部26は、取得されたフォント名と一致するフォント名を持つフォントデータが存在するか否か検索し(S202)、検索したフォントデータについて、フォント名が一致したフォントがフォントデータ内に存在するか否か判定する(S204)。
書体選択部26は、一致したフォントが存在したなら(S204−YES)、フォント指定命令より指定されたフォント名をカレントフォントとしてRAM40の所定の記憶領域に登録し(S206)、また、フォント置換発生せずとしてRAM40の所定の記憶領域に登録し、書体選択処理を終了する(S208)。
一方、一致したフォントが存在しないならば(S204−NO)、書体選択部2、フォント指定命令よりファミリ名を取得する(S210)。続いて書体選択部26は、ROM30のフォントデータ記憶領域34に登録されているフォントデータ内に取得されたファミリ名と一致するファミリ名を持つフォントデータが存在するか否か検索し(S212)、検索したフォントデータについて、ファミリ名が一致したフォントがフォントデータ内に存在するか否かを判定する(S214)。
ファミリ名が一致したフォントが存在したなら(S214−YES)、書体選択部26は、ファミリ名が一致したフォントデータの中に、フォント指定命令より指定された太さおよび傾斜が等しいフォントが存在するか否かを判定する(S216)。太さおよび傾斜が等しいフォントが存在する場合には(S216−YES)、書体選択部26は、そのフォントデータを選択する(S218)。一方、太さおよび傾斜が等しいフォントが存在しない場合には(S216−NO)、書体選択部26は、ファミリ内で形状情報を最も良く満足する書体を選択する(S220)。そして、書体選択部26は、選択したフォントをカレントフォントとしてRAM40の所定の記憶領域に登録し(S222)、さらに置換前のフォントをカレント置換前フォントとしてRAM40の所定の記憶領域に登録する。そして最後に、書体選択部26は、フォント置換発生としてRAM40の所定の記憶領域に登録し、書体選択処理を終了する(S224)。
一方、ファミリ名が一致したフォントがフォントデータ内に存在しない場合には(S214−NO)、書体選択部26は、適当なフォントを選択する(S230)。ここで、「適当なフォント」とは、たとえば、形状情報を最も良く満足する書体のものである。続いて、書体選択部26は、選択したフォントをカレントフォントとしてRAM40の所定の記憶領域に登録し(S222)、さらに置換前のフォントをカレント置換前フォントとしてRAM40の所定の記憶領域に登録する。そして最後に、書体選択部26は、フォント置換発生としてRAM40の所定の記憶領域に登録し、書体選択処理を終了する(S224)。
<フォント変形実行指定部の動作の詳細>
図7は、フォント変形実行指定部28が利用するGUIの一例を示す図である。フォント変形実行指定部28は、図2には示さないOSやマルチウィンドウシステムなどのGUIを利用して、電子ドキュメントDOCの表示処理とは独立にフォント変形実行指定を実行する。
この際、フォント変形実行指定部28は、一般的なGUI処理により、たとえば図7に示すような、“FontのBoldを実行する”、“Fontのイタリックを実行する”、“Fontの拡大縮小を実行する”と言った選択メニューをディスプレイ4に表示させる。ユーザは、この表示に基づき、チェックボックスへの指定により希望の条件を指示する。フォント変形実行指定部28は、これらフォント変形に関わる可否の指示を受け付けると、ユーザより指定された状態をRAM40の所定の記憶領域に保存する。文字描画処理制御部20の各部(たとえばビットマップイメージ生成部24や書体選択部26)は、RAM40に保存されたフォント変形に関わるユーザ指示を電子ドキュメント表示処理の際に使用する。
たとえば、フォント変形実行指定部28は、“FontのBoldを実行する”にチェックマークが付与されたことを検知すると、文字の太文字化処理を許可する旨をビットマップイメージ生成部24に通知する。一方、チェックマークが付与されてなければ、太文字化処理を禁止する旨をビットマップイメージ生成部24に通知する。
同様に、フォント変形実行指定部28は、“Fontのイタリックを実行する”にチェックマークが付与されたことを検知すると、文字の斜体化処理を許可する旨をビットマップイメージ生成部24に通知する。一方、チェックマークが付与されてなければ、斜体化処理を禁止する旨をビットマップイメージ生成部24に通知する。
また、フォント変形実行指定部28は、“Fontの拡大縮小を実行する”にチェックマークが付与されたことを検知すると、文字の変倍処理を許可する旨をビットマップイメージ生成部24に通知する。一方、チェックマークが付与されてなければ、変倍処理を禁止する旨をビットマップイメージ生成部24に通知する。
ビットマップイメージ生成部24は、文字描画命令処理部22の指令の下で、書体選択部26で選択されたフォントデータをフォントデータ記憶領域34から読み出して、文字列描画命令に対応する文字(記号などの事実上文字の範疇に含まれるものも含む)のビットマップイメージを生成し、生成したビットマップイメージをRAM40のビットマップ領域48に書き込む。このとき、ビットマップイメージ生成部24は、フォントの属性情報に従って展開文字(記号)の大きさを決定し、またフォント変形実行指定部28がユーザより受け付けたフォント変形指示情報に基づいて、必要に応じて、回転や傾斜化あるいは太文字化など、公知の画像処理技術を利用した文字変形処理を加える。
たとえば、電子ドキュメントDOCにて指定されているフォントサイズを変更すると見難くなるケースがある。特に、ビットマップフォントのケースで顕著である。同様に、電子ドキュメントDOCでは太文字化されていないのに太文字化された文字に置換して出力する、イタリック指定がないのにイタリック体の文字に置換して出力するなど、電子ドキュメントDOCにて指定されているフォントデータが装置に搭載されていないときに、装置に搭載されているフォントデータの中から指定された形状情報を最も良く満足する書体を代替えのフォント(近似フォント)として使用するとしても、出力された文字の品位が崩れる。また、CPU10にて、自動的に近似フォントを判定する場合、判定ミスが生じることもあるし、フォント名を変えるだけでも見栄えが悪くなるケースがあり得る。
これに対して、本実施形態の構成では、ユーザは、拡縮処理を行なうか否か、太文字化処理を行なうか否か、斜体化処理を行なうか否かを、フォント変形実行指定部28を通じて文字描画処理制御部20に指示することができる。このことにより、ユーザの希望に応じて、指定されたフォントを別のフォントに置換して描画することを抑制して、視認性のよい文字表示とレイアウト通りの文字表示を両立させることができる。常に予め決められた条件で変形するのではないので、変形するか否かや、変形する際にはその条件を指定することができ、使い勝手がよい。
また、フォント変形実行指定部28は、太文字化、斜体化、あるいは変倍といったフォント変形に関わる可否の指示を受け付けると、その指示を書体選択部26にも通知するようにしてもよい。こうすることで、書体選択部26は、電子ドキュメントDOCにて指定されたフォントがフォントデータ記憶領域34に登録されていないときに近似フォントを選択する際、予め選択候補を絞り込むことができる。なお、この図7に示したGUIでは、フォント変形に対する指示とフォント選択に対する指示とが兼用されることになるが、これに限らず、それぞれを独立に指示できるような表示メニューにしてもよい。
たとえば、太文字化や斜体化の指定のないフォントが指定されているときに、ユーザより太文字化処理が禁止されていれば、近似フォントとしては、太字フォントを選択対象から外し、同様に、ユーザより斜体化処理が禁止されていれば、近似フォントとしては、斜体フォントを選択対象から外す。また、太文字化や斜体化が禁止されている場合において、指定されたフォントが存在しない場合に、フォントの属性情報のうち、指定されたフォントの太さや斜体を最優先として、次に、サイズを適用して、指定されたフォントに最も形状が近いフォントを近似フォントとして選択する。なお、太文字化や斜体化のないフォントが指定されている場合、近似フォントとしては、太文字化や斜体化のないフォントを選択するものとする。
また、変倍処理がユーザより禁止されている場合において、指定されたフォントが存在しない場合に、フォントの属性情報のうち、指定されたフォントのサイズを最優先として、次に、太さや斜体を適用し、指定されたフォントに最も形状が近いフォントを近似フォントとして選択する。
このように、近似フォントの選択条件をユーザにより指示できるようにすることで、ユーザの希望に応じて、指定されたフォントを別のフォントに置換して描画することを抑制して、視認性のよい文字表示とレイアウト通りの文字表示を両立させることができる。常に予め決められた条件のみで近似フォントを選択するのではなく、ユーザにより近似フォントの選択条件を指示できるので、たとえば見易さを考慮して過剰な文字変形が生じないようなフォントを近似フォントとして選択させることもでき、使い勝手がよい。
<文字描画命令処理部の詳細構成例>
図8は、文字描画命令処理部22の詳細構成例を示すブロック図である。図示するように、文字描画命令処理部22は、描画される文字や文字間の状態(纏めて描画文字の状態とも言う)を特定する描画文字状態特定部222と、描画文字状態特定部222が特定した描画文字の状態に基づいて、隣接する文字間の距離や各文字の傾きや太さなど、実際に描画する文字の描画状態を修正する描画状態修正部228とを有する。
なお、本明細書において、描画される文字や文字間の状態(描画文字の状態)には、メインの文字そのものやメインの文字同士の間隔の状態だけでなく、メインの文字に付与される、たとえば小さな文字と一緒に並べてレイアウトするいわゆる「ルビ」などの修飾文字や修飾文字同士の間隔も含む。
本実施形態においては、描画文字状態特定部222は、複数の文字からなる文字列について、隣接する描画文字の間隔を算出する文字間隔算出部226を有する文字間状態予測部224を備えている。文字間状態予測部224は、文字間隔算出部226が算出した算出結果を、予測した文字間の状態とする。描画状態修正部228は、必要に応じて、文字間状態予測部224が予測した文字間の状態、すなわち、文字間隔算出部226が算出した算出結果に基づいて、実際に描画する文字の描画状態(本例では描画位置)を修正する文字描画位置変更部229を有している。
ここで、「必要に応じて」とは、たとえば、指定されたフォントが装置に搭載されておらず、近似フォントで代用した際に、レイアウトが崩れないように、また間延びした状態とならないように、文字の重なりが生じないように、あるいは、文字列の後半部が出力エリアからはみ出さないようにする必要がある場合など、より見易いあるいは見栄えのよい状態となるようにする要求に応じることを意味する。これらの必要性の判断は、ユーザが判断して、装置に指示を与えてもよいし、予め判定条件を定義しておき、その判定条件に従って自動的に処理するようにしてもよい。
たとえば、電子ドキュメントDOCにて指定されているフォントと異なる、装置に搭載の何れかのフォントであって、指定されたファミリ名が一致する書体(概ね、指定フォントと形状情報を比較的良く満足する書体である)、あるいはファミリ名が異なるが指定された形状情報を良く満足する書体を近似フォントとして選択して代用(代替使用)すると、場合によっては、文字サイズ、太文字化の有無、あるいは斜体化の有無が、電子ドキュメントDOCで指定されたものと異なるものとなる。
これらの場合、描画される文字ピッチが電子ドキュメントDOCで指定されたものと異なる状態となり、1つ1つの文字だけで見れば比較的見易い状態であったとしても、文字列の全体として見れば、レイアウトが崩れたり、間延びした状態となったり、文字の重なりが生じたり、あるいは、文字列の後半部が出力エリアからはみ出して出力されない(以下尻切れ出力ともいう)などの不都合が生じ得る。
このような場合、描画状態修正部228の文字描画位置変更部229は、より見易い状態となるように、文字間隔算出部226が算出した算出結果に基づいて、実際の描画時の文字ピッチを調整する。
本実施形態の構成では、変形を行なう旨の指示を受け付けたときには置換するフォントである近似フォントに対して変形の処理を許可し、変形を行なう旨の指示を受け付けていないときには近似フォントに対して変形の処理を不許可にする、つまり、フォント変形の可否をユーザが自由に指定できるようにすることで、表示速度を上げるという利点を得るようにしている。ただし、こうすると、ページ内でレイアウトのずれが生じ得る。
この問題を解決するため、文字間状態予測部224は、文字間隔算出部226により描画文字と次回の描画文字との間の文字間隔を算出し、この算出結果を今回の描画文字と次回の描画文字との文字間の状態予測の予測結果とする。そして、描画状態修正部228の文字描画位置変更部229は、文字間隔算出部226が算出した文字間隔が基準値よりも小のとき、今回の描画文字を横書きの場合は横方向に、縦書きの場合は縦方向に文字描画位置を変更する。
ただし、このような文字描画位置の修正処理を行なうと、必要以上の文字列内レイアウトずれ(ページ内のレイアウトずれとは異なる)が発生し得る。この問題を解消するため、フォント変形実行指定部28は、文字描画に際して、太文字化処理を行なうか否かや斜体化処理を行なうか否かを指定することで、描画位置を修正する。この指示は、文字列内レイアウトずれを自動的に判断し、その判断結果に基づいて行なってもよいし、ユーザからの要求を受けて行なうようにしてもよい。
つまり、フォント置換を行なって文字描画すれば、文字の大きさが正しい大きさ(受け取ったデータで指定されている大きさ)で表示されないこととなるので、全体的なページ内のレイアウトを保つのか、局所的な文字の並び(文字列内レイアウト)を保つのか、相容れないどちらかを選ぶしかない。そこで、描画状態修正部228の文字描画位置変更部229は、文字間隔算出部226が算出した文字間隔が「基準位置よりも小さい」という単純な判断で、この相反する処理のうちより良い処理を選ぶことによって、中庸的な解決を見出している。
より具体的に説明すると、拡大や縮小を行なわないで、装置に搭載している自前のフォント(たとえばビットマップフォント)を使用すると、本来表示されるべきであったページ内のレイアウトのピッチ位置が不明になってしまう。描画文字と次回の描画文字との間の文字間隔を算出し今回の描画文字と次回の描画文字との文字間の状態を予測して描画位置を修正するという本実施形態の手法を採らなければ、文字変形を行なわなかった場合に、小さくなったら小さくなったなりに、大きくなったら大きくなったなりにピッチが変動するだけで、他にコントロールできなくなり、たとえば本来の位置よりはみ出して描画されてしまう。これに対して、本実施形態の手法を採り描画位置を修正可能にすることで、ページ内レイアウトを保持したり、間延びを防いだり、文字の重なりを防いだり、尻切れ出力を防いだりすることができる。
なお、文字間状態予測部224は、文字間隔算出部226による計算結果の他、たとえば、「等幅指定」や「均等割付け」などの隣り合う文字とは関係のないピッチ算出方法など、文字の状態や隣接するピッチ以外で文字やピッチに変化をつける要因となる文字のレイアウト系の処理を利用することで得た結果を予測結果として利用することもできる。これらは、各フォントの最大値にピッチを強制的に固定し、または文字列の表示領域の長さを文字数で割ってピッチを算出することにより、文字の間隔が均等になるような計算をする。
また、たとえば、「ルビ」などで文字に特別な修飾をつける場合も、その修飾文字(前例ではルビの小文字部分)のピッチなどを考慮してメイン文字のピッチを決めなければならないので、メインの文字についてのみ隣接文字を参考にする場合と、最終的なピッチの計算が違ってくる。修飾文字のピッチなどを考慮してメイン文字のピッチを決めるようにすれば、ユーザが指定したページ内の文字レイアウトをより良く反映した形で出力ができるようになる。
本実施形態では、上述のような観点から、描画文字状態特定部222と描画状態修正部228とが協働して、実際に文字描画を行なうに先立って、描画文字状態特定部222にて各描画対象の文字の状態を特定し、文字描画位置変更部229は、この描画文字状態特定部222が特定した描画文字の状態に基づいて、実際に描画する文字の描画状態を修正することで、レイアウトが崩れないように、また間延びした状態とならないように、文字の重なりが生じないように、あるいは、尻切れ出力がないように、それぞれの文字の描画位置、すなわち描画文字ピッチを調整する。
なお上記説明では、文字間隔算出部226が算出した算出結果に基づいて、文字描画位置変更部229にて、実際の描画時の文字ピッチを調整することについて述べたが、文字の描画状態の修正の態様は、必ずしもこれに限定されない。たとえば、1つ1つの文字について、傾きの度合いや太文字化の程度が文字サイズに拘わらず同じであっても、文字サイズとの兼ね合いで見難くなることも生じる。このような場合、文字描画命令処理部22の描画文字状態特定部222は、個々の文字の傾きや太字の程度を特定し、描画状態修正部228は、描画文字状態特定部222が特定した文字の傾きや太さの程度に基づいて、より見易い状態となるように、実際の描画時の文字の傾きや太さの程度を調整する。また、太文字化の程度によっては文字幅が変更される場合もある。このような場合、描画状態修正部228は、文字描画命令処理部22にて太さの程度を特定し、描画状態修正部228にて、事前に設定した描画文字ピッチを特定した太さの程度に応じて修正すればよい。
<文字描画状態修正処理の概要>
図9および図10は、描画文字状態特定部222と描画状態修正部228との協働作業による、文字描画状態修正処理の概要を示す図である。ここで、図9は、電子ドキュメントDOCにて指定されているフォントについて、そのフォントの属性情報として指定されているサイズよりも小さな文字サイズのフォントを近似フォントとして使用する場合を示している。これに対して、図10は、フォントの属性情報として指定されているサイズよりも大きな文字サイズのフォントを近似フォントとして使用する場合を示している。
また、何れも、図(A)は、指定されている元のフォントサイズで描画する際の各文字の描画位置を示す。図(B)は、近似フォントのフォントサイズで描画する際の各文字の描画位置、すなわち予め定められている基準の文字幅に従って計算された描画位置を示す。図(C)は、近似フォントのフォントサイズで描画した図(B)に示す文字位置を、所定の条件に従って修正した際の各文字の描画位置を示す。図(D)は、拡縮率を元にした、描画位置の修正後の状態を示す。
文字描画命令処理部22は、書体選択部26によって選択されたフォントに対応する文字を当該フォントの文字コードおよび文字描画位置情報を基に描画する。この際、先ず、文字間隔算出部226は、隣接する描画文字の間隔を算出する。文字間状態予測部224は、文字間隔算出部226が算出した算出結果を、予測の文字間の状態とする。
近似フォントを使用せずに指定されたフォントそのものを使用できる場合には、文字間隔算出部226が算出した描画文字の間隔は、指定された元の文字間隔(横方向はhx0、縦方向はhy0)と同じになる。これに対して、近似フォントを使用する場合には、文字間隔算出部226が算出した描画文字の間隔は、指定された元の文字間隔と同じにはならない。
そこで、近似フォントを使用する場合は、描画状態修正部228の文字描画位置変更部229は、文字間状態予測部224が予測した文字間の状態、すなわち、文字間隔算出部226が算出した算出結果に基づいて、実際に描画する文字の描画位置を、元の文字間隔(横方向はhx0、縦方向はhy0)で規定される描画位置とは異なる位置に修正する。
たとえば、指定された文字サイズよりも小さな文字サイズのフォントを近似フォントとして使用する場合、文字描画命令処理部22は、先ず、図9に示すように、横書きの場合、1つ前に描画する文字位置(x1@,y1@)(αは1つ前の描画対象文字の描画順;0が初期値)、横方向の文字幅hx1とし、それぞれの文字描画位置を(x1@+hx1,y1@)に修正する。たとえば、横方向の1番目の文字については、計算された描画位置(x11,y11)は、(x10+hx1,y10)となる。なお、見栄えのために何らかの修正項(定数xc)を加算して(x1@+hx1+xc,y1@)としてもよい。
また図では示さないが、縦書きの場合には、1つ前に描画された文字位置(x1@,y1@)、縦方向の文字幅hy1とすると、それぞれの文字描画位置を(x1@,y1@+hy1)とする。見栄えのために修正項(定数yc)を加算して(x1@,y1@+hy1+yc)としてもよい。
ここで、1つ1つの文字の出力品質に問題がなくて見栄えが良く、かつ文字列の全体としても、レイアウト崩れ、間延び、文字重なり、あるいは尻切れなどに、全体としての見栄えに不都合がなければ、文字描画命令処理部22は、このままの状態で1ページ分の描画処理を完結させてよい。
たとえば、指定された文字サイズよりも小さな文字サイズのフォントを近似フォントとして使用する場合において、元の文字間隔(横方向はhx0、縦方向はhy0)で規定される描画位置に、近似フォントの小さな文字サイズで描画すると、レイアウト崩れ、文字重なり、あるいは尻切れなどは生じないが、サイズを小さくした分だけ間延びした状態で出力される。これに対して、図9(B)から分かるように、文字間隔算出部226が算出した算出結果に基づいて実際に描画する文字の描画位置を修正することで、実際に使用する文字サイズに応じて描画位置を順次変更して(適正サイズで詰めて)描画するので、間延びした状態となるのを避けることができる。
なお、描画状態修正部228は、図9(B)に示した描画態様に限らず、所定の条件に基づいて、さらに描画位置を修正してもよい。たとえば、文字描画位置変更部229は、文字間隔算出部226が算出した文字間隔が基準値よりも小のとき、横書きの場合は横方向に、縦書きの場合は縦方向に、今回の描画文字の文字描画位置を変更する。図9(C)は、その一例を示している。
ここで、「基準値」は、元の文字における隣接描画位置の描画位置を指している。たとえば、図9に書き込まれている値で言うと、2文字目の基準値は前の文字の終了座標であるx01という値である。これは、後述する図10の場合でも同様である。
文字間隔算出部226が算出した2文字目の開始位置の値はx11になるので、「文字間隔算出部226が算出した文字間隔が基準値よりも小」であるのか否かに基づいて、描画位置を元の位置のものを使用するか否かを制御する。
たとえば、図9(C)に示すように、文字描画位置変更部229は、計算した1つ前に描画された文字位置を(x1n−1,y1n−1)とし、元々指定されていた文字描画位置を(x0n,y0n)としたとき、横書きであれば、x0n≧x1n−1であれば元々の文字描画位置(x0n,y0n)の位置へ描画し、x0n<x1n−1であれば、計算された1つ前に描画された文字位置(x1n−1,y1n−1)へ描画する。
図示しないが、縦書きであれば、y0n≧y1n−1であれば元々の文字描画位置(x0n,y0n)の位置へ描画し、y0n<y1n−1であれば、計算された1つ前に描画された文字位置(x1n−1,y1n−1)へ描画する。指定された文字サイズよりも小さな文字サイズのフォントを近似フォントとして使用する場合には、常にx0n≧x1n−1あるいはy0n≧y1n−1を満たすので、結局は、元々指定されていた文字描画位置に描画する。
こうすることで、指定された文字サイズよりも小さな文字サイズのフォントを近似フォントとして使用する場合に拡大処理を行なわなくても、必要以上に文字ピッチが小さくなることを防ぐことができる。実際よりもページ内の狭い範囲にレイアウトが固まってしまい本来の文字位置情報が失われるという状態を防ぐことができる。
図9(B)に示すようにすることで間延びした状態を防止するのがよいのか、狭い範囲にレイアウトが固まるのを防止するのがよいのか、あるいは後述する図10(C)のように飛出しが生じないようにするのがよいのかは、ページ全体のレイアウトを考慮して決めるのがよい。たとえば、元のページ内レイアウトを頑なに守った方が局所的な文字列内の文字の並び具合よりも優先される場合も考えられる。具体的には、グラフや図などに含まれる説明文字などは、その表示される位置が意味を表わしていたりして重要だったりするので、その位置がずれるよりも文字が間延びしていた方が良い例であると言える。位置情報と見栄えのどちらが優先なのかを装置にて自動で切り替えることは不可能ではないにしても困難であるから、この切替制御はユーザの指示に従うのがよい。
また、指定された文字サイズよりも大きな文字サイズのフォントを近似フォントとして使用する場合にも、同様にして描画の文字位置を修正すればよい。たとえば、文字描画命令処理部22は、先ず、図10(B)に示すように、横書きの場合、1つ前に描画する文字位置(x1@,y1@)(αは1つ前の描画対象文字の描画順;0が初期値)、横方向の文字幅hx1とし、それぞれの文字描画位置を(x1@+hx1,y1@)とする。縦書きの場合にも同様にして考えればよい。
ここで、1つ1つの文字の出力品質に問題がなくて見栄えが良く、かつ文字列の全体としても、レイアウト崩れ、間延び、文字重なり、あるいは尻切れなど、全体としての見栄えに不都合がなければ、文字描画命令処理部22は、このままの状態で1ページ分の描画処理を完結させてよい。
たとえば、指定された文字サイズよりも大きな文字サイズのフォントを近似フォントとして使用する場合において、元の文字間隔(横方向はhx0、縦方向はhy0)で規定される描画位置に、近似フォントの大きな文字サイズで描画すると、レイアウト崩れや間延びした状態などは生じないが、サイズを大きくした分だけ隣接部での文字重なりが生じ、また文字列が長いケースでは尻切れのある状態で出力され得る。
これに対して、図10(B)から分かるように、文字間隔算出部226が算出した算出結果に基づいて実際に描画する文字描画位置を修正することで、実際に使用する文字サイズに応じて描画位置を順次変更して(適正サイズで広げて)描画するので、文字重なりを避けることができる。ただし、この場合、描画文字ピッチを広げた分だけ、尻切れの状態が助長される。
この問題を避けるには、描画状態修正部228は、図10(B)に示した描画態様に限らず、所定の条件に基づいて、さらに描画位置を修正してもよい。たとえば、文字描画位置変更部229は、文字間隔算出部226が算出した文字間隔が基準値よりも小のとき、横書きの場合は横方向に、縦書きの場合は縦方向に、今回の描画文字の文字描画位置を変更する。図10(C)は、その一例を示している。
文字間隔算出部226が算出した2文字目の開始位置の値はx11になるので、「文字間隔算出部226が算出した文字間隔が基準値よりも小」であるのか否かに基づいて、描画位置を元の位置のものを使用するか否かを制御する。具体的には、その文字が本来ページ内でレイアウトされる位置より右(横書きの場合)あるいは下(縦書きの場合)に飛び出してないかどうかを文字単位で判別し、必要に応じて(「基準値よりも小のとき」に相当)描画位置を元の位置に戻すことで飛出しが生じないようにする。
たとえば、図10(C)に示すように、文字描画位置変更部229は、計算した1つ前に描画された文字位置を(x1n−1,y1n−1)とし、元々指定されていた文字描画位置を(x0n,y0n)としたとき、横書きであれば、x0n≧x1n−1であれば元々の文字描画位置(x0n,y0n)の位置へ描画し、x0n<x1n−1であれば、計算された1つ前に描画された文字位置(x1n−1,y1n−1)へ描画する。
図示しないが、縦書きであれば、y0n≧y1n−1であれば元々の文字描画位置(x0n,y0n)の位置へ描画し、y0n<y1n−1であれば、計算された1つ前に描画された文字位置(x1n−1,y1n−1)へ描画する。指定された文字サイズよりも大きな文字サイズのフォントを近似フォントとして使用する場合には、常にx0n≧x1n−1あるいはy0n≧y1n−1を満たすとは限らず、所定の文字順以降は、常にx0n<x1n−1あるいはy0n<y1n−1を満たすようになる。図示した例では、5番目以降の文字からx0n<x1n−1を満たす。
このように、x0n≧x1n−1あるいはy0n≧y1n−1を満たすか否かに応じて実際の文字描画位置を修正することで、概ね元の描画位置に描画するようになり、文字重なりが生じるものの、尻切れの状態を解消することができる。
なお、x0n<x1n−1の場合に、計算された1つ前に描画された文字位置(x1n−1,y1n−1)へ実際の文字描画位置を修正するのは、視認性を良くする目的で拡大縮小を行なわなかったために発生する文字のページ内レイアウト変化を防いで、より良く元のページレイアウトを保つためである。
図10(C)に示す例では、文字単位に尻切れを起こしていて異常に見えるが、文字を本来よりも大きく書いてそのまま見栄え良くつないだ場合は図10(B)のように文字列の右の方にさらに大きな尻切れ(この例では5文字目が表示されていない)あるいはその文字列の右にある非常に重要な表示部分を覆い隠すという結果にもなり兼ねない。そのような事態を防ぐために、文字単位での尻切れや重なりを許している。個々の文字については重なりによって品質の低い出力となるが、このような品質の低い状態であっても、たとえば「□□□」のように文字として何が書かれている分らなくても「何か文字が3文字表示されている」と認識できるだけで十分意味がある場合も多く、図10(C)のように表示される事で、この特許の全ての利点を否定しているとは思えません。
また、処理対象の文字列はピッチと文字の大きさが元から奇麗に見えるように並んでいるとは限らず、元からピッチが広く空きすぎているもの、あるいは不自然にピッチが詰まっているものなど、世の中のドキュメントの中には多数のいびつな文字の大きさとピッチの関係が存在する。元々の文字に隙間がある場合は、本来よりも大きい文字を書いてもピッチはそのままにできるし、文字が元々重なって表示されている場合には、本来よりも小さい文字にしてもピッチはそのままでも問題がないという場合もある。
あるいは、1つの文字列に縮小あるいは拡大がどちらか一方しか含まれていないことに限定することはできず、実際は1つの文字列に拡大と縮小が混在しているものもある。この場合は、文字列の最初の部分で文字を小さくしてピッチを詰めた分、後の方の文字列で文字を大きくした場合にピッチをつめなくて良いというような良好な結果が得られる。
つまり、図9や図10の例では、文字列の最初でも後の方でも常に条件式を同じように満たしてしまうが、一般的にはそうとは言い切れない。この点からも、本実施形態のように、元の表示位置と計算後の描画位置を比べ、「計算値が基準値(元の指定位置)よりも座標が小さい(左にある/上にある)」という判断条件式を含むことによって、その結果に基づいて実際の描画位置を修正することで、右にはみ出すことなく、かといってはみ出すのを制するあまりに文字ピッチの文字列内のレイアウトが必要以上に崩れることを防ぐことができ、全体として、良好な出力結果が得られるようになる。
<文字描画処理制御部の動作の詳細>
図11は、文字描画処理制御部20における具体的な処理手順の一例を示すフローチャートである。先ず、CPU10は、ホストコンピュータ装置8からネットワーク9を介して画像出力制御装置2に送られてきた電子ドキュメントを、一旦RAM40上のドキュメント記憶領域に保持する。そして、描画展開処理部12は、所定のタイミングで、描画コマンドを解釈し、その結果に基づいて、図形描画処理部16とラスタイメージ描画処理部18にて、ページバッファ44へラスタデータとして描画する。このとき、図形描画処理部16およびラスタイメージ描画処理部18は、グラフィックスやラスタイメージをラスタデータへ変換することで描画する。以下、具体的に説明する。
先ず、文字描画命令処理部22は、フォント指定命令か文字列描画命令かを判定する(S300)。フォント指定命令であったら(S300−YES)、書体選択部26は、前述の図6に示した手順に従って、そのフォント指定に応じた書体を選択し(S302)、選択した書体をカレントフォントとしてRAM40の所定の記憶領域に登録しておく(S304)。
また、文字描画命令処理部22は、文字列描画命令の場合(S300−NO)、カレントフォントにフォントの置換が発生しているか否かを判定する(S310)。フォント置換が発生していないなら(S310−NO)、文字描画命令処理部22は、文字コードを取得し、これをビットマップイメージ生成部24に設定する(S312)。ビットマップイメージ生成部24は、書体選択部26により選択・設定されたカレントフォントを用いて、フォントデータ記憶領域34より文字コードに対応するフォントデータを得て、その文字コードに対応する文字のビットマップイメージを生成し、生成したビットマップイメージをRAM40のビットマップ領域48に格納する(S314)。この際、ビットマップイメージ生成部24は、必要に応じて、文字サイズ、傾斜、回転などに関する情報を用いてビットイメージへの展開を実行し、ビットマップイメージを生成する。
文字描画命令処理部22は、ビットマップイメージ生成部24にて生成されたビットマップイメージをビットマップ領域48から読み出して、ページバッファ44の所定位置へ描画する(S316)。この際、文字描画命令処理部22は、描画した文字の描画位置と文字幅をRAM40の所定の記憶領域に保存しておく。
続いて、文字描画命令処理部22は、文字列内の全ての文字の描画が終了したか否か判定する(S318)。そして、終了していないならば(S318−NO)、文字描画命令処理部22とビットマップイメージ生成部24は、ステップS312〜S316の処理を繰り返す。一方、終了したならば(S318−YES)、文字描画処理制御部20は、文字描画命令処理を終了する。
これに対して、フォント置換が発生していたならば(S310−YES)、先ず、文字描画命令処理部22は、置換前のフォント情報(フォント指定命令として指定された情報)と、置換が発生したという情報をRAM40の所定の記憶領域に登録しておく(S320)。この後、文字描画命令処理部22は、各々の文字に対する拡縮率を算出し(S322)、全ての文字について、算出した拡縮率を拡縮率テーブル46(図4参照)としてRAM40に登録しておく。
文字描画命令処理部22は、拡縮率テーブル46を生成した後、図形描画命令解釈部14から文字コードを取得し、さらに、拡縮率テーブル46から、今描画する文字の、置換前のフォント情報や属性情報(すなわちフォント指定命令)と、文字コードに合致する拡縮率テーブル46に登録されている拡縮率L1とを取得し、それらをビットマップイメージ生成部24に設定する(S324)。
これを受けてビットマップイメージ生成部24は、書体選択部26により選択・設定されたカレントフォントを用いて、フォントデータ記憶領域34より文字コードに対応するフォントデータを得て、その文字コードに対応する文字のビットマップイメージを生成を生成する(S326)。
この際、フォント変形実行指定部28で指定された状態(図7参照)に基づいて拡大縮小処理を行なうか否かを判断して、指示があるときにのみ対応する拡大縮小処理を行なう。具体的には、ビットマップイメージ生成部24は、ビットマップイメージを生成する際に必要な文字サイズをステップS326で取得した拡縮率L1で修正して、実際の拡縮率L2を求める。
ここで、拡縮率L1は、最初に表示するべくドキュメントに指示されているフォントをどれだけ拡縮すれば正しい大きさに出るかを表わす値である。この拡縮率L1は、元のフォントがアウトラインフォントであっても概念的な倍率は存在する。一方、拡縮率L2は、近似フォントへのフォント置換後に、近似フォントをどれだけ拡大すれば正しい画像が得られるかを表わしている。拡縮を行なわないとき拡縮率L2が1.0になる。
フォント置換が発生すると、基本的には(例外もあるが)、拡縮率L1と拡縮率L2は変化するので、置換が起こった後に拡縮率L1を使うと正しい大きさの文字が得られない。拡縮率テーブル46に登録してある拡縮率L1を修正して拡縮率L2を求めて、計算した拡縮率L2を用いて拡大縮小を行なうことにより、正しい大きさの文字を得ることができるようになる。
また、文字描画命令処理部22は、ステップS326では、文字の拡大処理や縮小処理(すなわち変倍処理)の他に、必要であれば太文字化処理や斜体化処理を行なってもよい。この際も、フォント変形実行指定部28で指定された状態(図7参照)に基づいて太文字化処理や斜体化処理を行なうか否かを判断して、指示があるときにのみ対応する処理を行なう。
次に、ビットマップイメージ生成部24は、生成したフォントのビットマップイメージをRAM40のビットマップ領域48に格納する。
文字描画命令処理部22は、ビットマップイメージ生成部24により生成されたフォントのビットマップイメージをビットマップ領域48から読み出して、ページバッファ44の指定位置へ描画する(S340)。
この際、文字描画命令処理部22は、フォント変形実行指定部28で指定された状態(図7参照)を参照し、拡縮されていないのであれば、図9(B)や図10(B)に示したように、1つ前に描画された文字の位置(x1@,y1@)とその文字の幅hx1,hy1から、たとえば横書きの場合は(x1@+hx1,y1@)あるいは(x1@+hx1+xc,y1@)、縦書きの場合は(x1@,y1@+hy1)あるいは(x1@,y1@+hy1+yc)というように、文字描画位置を求める(S332)。拡縮されている場合は、その文字の幅として拡縮後の文字幅を使用すればよい。
続いて、文字描画命令処理部22は、今描画する文字の位置と求められた文字描画位置を比較し(S334)、求められた文字描画位置に不都合がなければ(S332−YES)、求められた文字描画位置にてページバッファ44へ文字を描画する(S336)。
求められた文字描画位置に不都合がある場合(S332−NO)、文字描画命令処理部22は、図9(C)や図10(C)に示したようにして、x0n≧x1n−1あるいはy0n≧y1n−1を満たすか否かに応じ、実際の文字描画位置を修正する(S338)。
次に、文字描画命令処理部22は、前述の拡縮率L2を元に指定位置を修正し(S339)、ページバッファ44へ修正後の指定位置にて描画する(S340)。続いて、文字描画命令処理部22は、描画した文字の描画位置と文字幅をRAM40の所定の記憶領域に保存しておく。
ここで、「拡縮率L2を元に指定位置を修正」する意義を説明すると以下の通りである。先ず、文字描画を行なうときには、図3(B)に示したように、文字の左下(ぐらい)の描画開始位置を基準に文字を書く。しかし、この描画開始位置の基準は、実際の機械の文字データのビットマップデータが格納される位置とは異なることがある。具体的には、左上位置を基準にビットマップデータが格納されていることがあり、この場合、奇麗な並びで文字が出るように描画開始位置にオフセットを加えて正しいビットマップデータの左上座標を計算しなければならない。
このときに、データの中に格納されている調整座標値(この値はフォントのデータ部には示していない)と拡縮率L2を積算して、その値を基準位置に加算することで、最終的なメモリ内の位置を得る。
この処理は、拡縮を行なうか、行なわないかに関わらず共通の処理になる。拡縮を行なわないときは拡縮率L2が1.0になる。たとえば、図7の「Fontの拡大縮小を実行する」の画面でチェックを入れたときと、入れないときの違いは、実際には「Fontの拡大縮小を実行する」がチェックされていない場合には計算する最終的な倍率であるL2を1.0に固定する(1.0倍にする=拡縮を行なわない)ことで処理が実現される。
この後、文字描画命令処理部22は、文字列内の全ての文字の描画が終了したか否か判定する(S342)。そして、終了していないならば(S342−NO)、文字描画処理制御部20は、ステップS324〜S328の処理を繰り返す。一方、終了したならば(S330−YES)、文字描画処理制御部20は、文字描画命令処理を終了する。
以上、説明したように、上記実施形態の画像出力制御装置2の構成およびその処理手順に依れば、任意のフォントを特定する情報とそのフォントの属性情報を元にしたフォントの使用要求に対応して、それぞれ書体が異なる複数フォントの中から所望の書体のフォントを選択し、選択したフォントを用いて、文字コードと文字描画位置情報を元に文字を出力するに際して、先ず、拡縮、太文字化、斜体化などのフォント変形を実行するか否かや、置換候補の近似フォントの選択範囲を、ユーザが指定することを可能に構成した。
このことにより、ユーザの希望に応じて、指定されたフォントを別のフォントに置換して描画することを抑制して、視認性のよい文字表示とレイアウト通りの文字表示を両立させることができるようになった。常に予め決められた条件でフォント変形する、あるいは常に装置で定められているフォント置換の条件で置換するのではないので、フォント変形やフォント置換をするか否かや、変形や置換をする際にはその条件をユーザの好みに応じて自由に指定することができ、使い勝手がよい。
また、指定されたフォントを別のフォントに置換して描画することを抑制することで、フォントの拡大縮小処理に代表されるフォント変形処理が頻繁に発生することを抑えることができるから、出力パフォーマンスに悪影響を与えることもない。
なお、上記実施形態では、太文字化や斜体化のないフォントが指定されているい場合、近似フォントとしては、太文字化や斜体化のないフォントを近似フォントとして選択するものとし、たとえば、図7では、太文字化されていないフォントに対しての太文字化や斜体化されていないフォントに対しての斜体化の可否をユーザより受け付けるようにしていたが、これに限らず、太文字化されているフォントに対しての細字化や斜体化されているフォントに対しての正立化の可否をユーザより受け付けるようにしてもよい。
1…画像処理システム、2…画像出力制御装置、3…本体、4…ディスプレイ、5…キーボード、6…マウス、7…プリンタ、8…ホストコンピュータ装置、9…ネットワーク、10…CPU、12…描画展開処理機能部、14…図形描画命令解釈部、16…図形描画処理部、18…ラスタイメージ描画処理部、20…文字描画処理制御部、22…文字描画命令処理部、24…ビットマップイメージ生成部、26…書体選択部、28…フォント変形実行指定部、30…ROM、32…プログラム記憶領域、34…フォントデータ記憶領域、40…RAM、42…ドキュメント記憶領域、44…ページバッファ、46…拡縮率テーブル、48…ビットマップ領域、50…ディスプレイI/F部、52…入力I/F部、54…プリンタI/F部、70…ネットワークI/F部、80…内部バス、222…描画文字状態特定部、224…文字間状態予測部、226…文字間隔算出部、228…描画状態修正部、229…文字描画位置変更部