以下、図面を参照して本発明の実施形態について詳細に説明する。
画像出力装置は、紙やOHP(Over Head Projector )シートなどの印刷媒体に文字を印刷出力する形態の画像形成装置(いわゆる印刷装置)であってもよいし、液晶やCRT(陰極線管)などの表示媒体に文字を表示する形態の表示装置であってもよい。以下では、代表して、画像出力装置として印刷装置を使用する印刷システムを例に説明する。
<システム構成>
図1は、画像出力システムの一例である印刷システムの構成例を示す図である。本実施形態の印刷システム1は、クライアントが使用するホスト側装置2と、SOCを利用して構成された画像出力装置の一例である印刷装置3が、通信線の一例である伝送路9(通信回線)で接続されている。印刷装置3は、印刷機能のみを持つ単機能機(いわゆるプリンタ)でもよいし、印刷機能だけでなく複写やFAXなどの他の機能も持ついわゆる複合機でもよい。
伝送路9としては、ローカルエリアネットワーク(LAN:Local Area Network)や電話回線などの有線通信回線、無線LANなどの無線通信回線、これらの通信回線を組み合わせたもの、などが適用される。
システム構成的には、SOCを有する画像処理装置を含んで画像形成装置の一例である印刷装置3が構成され、この印刷装置3を含んで画像出力システムの一例である印刷システム1が構築されている。
ホスト側装置2は、印刷装置3に処理対象の画像を供給する画像供給装置の一例である。このホスト側装置2は、文字や図形や写真を含む文書データを作成して出力するもので、たとえばパーソナルコンピュータ(パソコン)が使用される。ホスト側装置2によって作成される文字・図形・写真を含む文書データは、PDL(Page Description Language )で記述された印刷データ(PDLデータ)として印刷装置3に送られる。PDLデータは、画像(写真、イメージ)、図形(グラフィックス)、文字などを同様に取り扱い、図形や文字などの拡大、回転、変形などが自由に制御できるデータである。
[ホスト側装置]
ホスト側装置2は、情報処理部として機能するもので、文書や図形などの画像データを生成するデータ取得部210と、ホスト側装置2の各部の動作を制御する中央制御部220と、印刷装置3との間のインタフェース機能をなすインタフェース部230(IF部)を有する。図示しないが、ハードディスクなどの記憶装置や、RAM(Random Access Memory)やROM(Read Only Memory )などで構成される記憶部も設けられる。
データ取得部210には、たとえば、文書や図形などのデータを生成するためのアプリケーションプログラムが組み込まれる。なお、データ取得部210は、外部で生成されたデータを取り込んで印刷出力に供するものであってもよい。
中央制御部220には、ホスト側装置2の全体を制御するソフトウェアであるOS(オペレーティングシステム)や印刷装置3を制御するためのソフトウェアであるプリンタドライバPDが組み込まれる。
これにより、ホスト側装置2は、印刷装置3に対して印刷指示を発する装置を、プログラムに基づいてソフトウェア的に実現するようになる。すなわち、各機能部を構成するためのプログラムを格納したCD−ROMなどからプログラムを読み出して図示しないハードディスク装置などにインストールさせておき、ハードディスク装置からプログラムを読み出して中央制御部220を構成する図示しないCPU(Central Processing Unit )やMPU(Micro Processing Unit )が決められた処理手順を実行することにより、各機能をソフトウェア的に実現する。
ホスト側装置2内のハードウェアや各種の装置、および、各種のソフトウェアは、オペレーティングシステムOSによって制御、管理されている。このオペレーティングシステムOSによる制御および管理の元で、アプリケーションプログラムが動作する。アプリケーションプログラムは、文字や画像などを印刷する指示を行なう。ここでは、印刷する内容はページ記述言語によって記述された描画情報として出力されるものとする。
たとえば、ホスト側装置2に組み込まれているアプリケーションプログラムから、イメージ描画命令、グラフィック描画命令、フォント描画命令などの命令種別を持った描画命令が順次プリンタドライバPDに入力される。
プリンタドライバPDは、通常、印刷装置3に付属して提供されるものであり、ホスト側装置2にロードされて機能するプログラムである。またプリンタドライバPDは、通常、特定の印刷装置3での使用が予想される様々なデータ形式にホスト側装置2を対応させるために使用される。プリンタドライバPDは、アプリケーションプログラムから描画情報を受け取ると、印刷装置3に送信する前に、様々な処理ステップを実行する。たとえば、アプリケーションプログラムから受け取った描画情報を印刷装置3で解釈可能なコマンドおよび描画オブジェクトの列に変換して送信する。
本実施形態では、プリンタドライバPDは描画命令を印刷装置3が理解可能なプリント命令としてPDLデータに変換してインタフェース部230に出力する。インタフェース部230に入力されたプリント命令は、伝送路9(接続ケーブルやネットワーク)を通り印刷装置3に伝送される。印刷装置3は、受け取ったPDLデータに従って、用紙に画像を印刷(画像出力)する。
[印刷装置]
印刷装置3は、画像出力装置の一例であり、ホスト側装置2から出力された印刷データ(PDLデータ)に基づいて印刷処理を実行する。ここでPDLで作成されている印刷データは、ページ内の任意位置の画像、図形、文字を表現する描画命令およびデータを任意の順で配置した命令およびデータ列で構成されている。印刷装置3は、ページプリンタであり、印刷前に出力単位ごと(1ページごと)に画像データをレンダリング(描画展開)してからプリンタエンジン部にそのラスタデータを出力する。
このような機能の実現のために、印刷装置3は、SOC(System On a Chip:システム・オン・チップ)と称される半導体集積回路を有する画像形成処理部30と、画像形成処理部30からの画像データに基づき印刷処理を実行する画像出力部39を備える。
画像形成処理部30は、中央演算制御処理部310、RAM312、ROM314、インタフェース部330、PDLデータ解釈部340(インタプリタ部)、描画処理装置として機能する画像処理装置の一例である画像処理部350を備える。また、画像形成処理部30は、印刷制御部370(出力制御部)とハードディスク装置380(HDD)を備える。
中央演算制御処理部310は、印刷装置3の全体を制御する。たとえば、ROM314からRAM312へ制御プログラムやアプリケーションプログラムを読み込んで実行することにより、画像形成処理(画像処理)を実行する。この画像形成処理を実行するとき、中央演算制御処理部310は、画像形成処理の少なくとも一部を画像処理部350に分担させることで、画像処理部350との協調処理によって全体として画像形成処理を完結させる。
インタフェース部330は、ホスト側装置2との間のインタフェース機能をなす。たとえば、伝送路9を介して、ホスト側装置2との間でデータの送受信を行ない、印刷装置3(のプリンタドライバ)から送信されたPDL形式の印刷データを受信する。
PDLデータ解釈部340は、PDLデータを解釈し、得た描画命令を画像処理部350に渡す描画命令出力装置の一例である。PDLデータ解釈部340は、取り込んだ描画情報やコマンドと描画データの列などを認識し、コマンドと引数に組み立ててコマンドを解釈する。
画像処理部350は、PDLデータ解釈部340から受けとった解釈命令に基づいて、グラフィックス描画、文字描画、イメージ描画を行なうことで、ビットマップデータ(Bit Map Data:ラスタデータとも称する)を生成する。このとき、画像処理部350は、生成したデータを一旦、RAM312やハードディスク装置380に記憶させる。たとえばカラー印刷を行なうのであれば、それぞれの色ごとに、たとえばC(シアン),M(マゼンタ),Y(イエロ),K(ブラック)の4プレーンにラスタ化し、ハードディスク装置380のページメモリ領域(ページバッファ)に個別に記憶させる。なお、ハードディスク装置380にページメモリ領域を確保するのに代えて、RAM312にページメモリ領域を確保してもよい。
また、本実施形態では、処理対象の文字がグリフ(字形の定義情報)のときに、グリフデータの記憶領域としてハードディスク装置380やRAM312が利用される。さらに、処理対象の文字がグリフであって、そのグリフがコンポジットグリフのときには、そのコンポジットグリフを構成する各グリフの描画処理時に生成したデータを一旦、RAM312やハードディスク装置380のグリフメモリ領域(合成バッファ)に記憶させる。
また、本実施形態において、キャッシュ検索機能を適用する形態にする場合、キャッシュデータの記憶領域としてハードディスク装置380やRAM312が利用される。
印刷制御部370は、出力制御部の一例であり、画像処理部350により描画展開されたビットマップデータに基づいてプリンタエンジン部390による印刷処理を制御する。プリンタエンジン部390は、印刷制御部370の指令に従って印刷処理を実行する。プリンタエンジン部390とシステムバスとの間にはプリンタIF部398が設けられる。プリンタエンジン部390は、画像処理部350にて処理されたデータに基づいて、画像を出力媒体に形成する画像形成部(画像出力部)の一例である。
印刷制御部370は、印刷を行なう際に、プリンタエンジン部390を起動し、出力単位分のビットマップデータを、プリンタIF部398を介してプリンタエンジン部390に供給する。
ハードディスク装置380は、不揮発性の記憶媒体の一例であり、画像処理部350により生成されたラスタデータを記憶するだけでなく、PDLデータ解釈部340で解釈・変換した描画オブジェクトおよび描画演算指示(纏めて描画命令とも称する)を一時的に格納しておくためデータ格納部の一例としても機能する。
画像出力部39は、画像形成処理部30から受け付けた画像データに基づいて、画像出力処理の一例として、印刷処理を実行する。この機能の実現のため、画像出力部39は、プリンタエンジン部390、画像処理部392、給紙部394、排出部396、後処理部397、プリンタIF部398を備える。
プリンタエンジン部390は、出力処理部の一例であり、プリンタIF部398を介して供給されるビットマップデータに従って、用紙に画像を形成して出力する。すなわち、プリンタエンジン部390は、ページメモリ領域に格納された画像データに従って実際に被記録媒体上に画像を形成する。プリンタエンジン部390としては、たとえばレーザ方式を始め、種々の方式の記録方法を採用してよい。このとき、画像処理部392にて、2値化処理やスクリーン処理を行なうこともある。
給紙部394は、図示しないが、1つまたは複数の給紙トレイを具備しておち、プリンタエンジン部390に供給される印刷媒体の一例である用紙を収容する。
排出部396は、図示しないが、プリンタエンジン部390にて印刷処理が実行された後の用紙が排出される排出トレイを具備する。排出部396は、印刷制御部370から回転角とともに回転指示を受けたとき、その指示に従った回転角で用紙を回転させてから排出する。
後処理部397は、印刷指示に後処理の指示が添付されているときは、その指示に従って後処理を行なう。「後処理」としては、たとえば、出力される用紙に対してステイプラによりステイプル処理する(用紙を短辺綴じ長辺綴じにする)ことや、用紙の短辺または長辺にパンチ穴を開けるパンチ処理などがある。
<画像処理部:第1実施形態>
[装置構成]
図2は、第1実施形態の画像処理部350Aの構成例を示す図である。ここでは、グリフデータの記憶領域も画像処理部350Aに含むものとして示すが、このことは必須ではなく、一般的には、前述のように、ディスク装置380やRAM312がその記憶領域として利用される。
画像処理部350Aは、コマンド種類判別部410、文字データ格納部420、文字データ登録コマンド実行部440、文字描画コマンド実行部460、および描画実行部480を備える。
コマンド種類判別部410は、描画指示種類判別部の一例であり、印刷データのコマンドを取得し、そのコマンドの種類を判別する。
文字データ格納部420は、字形の定義情報を記憶する文字定義情報記憶部の一例であり、第1検索テーブルTBL1と第2検索テーブルTBL2を有する。
文字データ登録コマンド実行部440は、グリフが字形を定義するシンプルグリフ(字形定義情報)であるのか定義情報の組合せを定義するコンポジットグリフ(組合せ定義情報)であるのかに応じて、各文字のグリフ(定義情報)を第1検索テーブルTBL1と第2検索テーブルTBL2の何れへ登録するかを切り替える文字情報登録部の一例である。この文字データ登録コマンド実行部440は、フォント名取得部442、フォーマット取得部444、および登録処理部446を有する。
フォント名取得部442は、書体名取得部の一例であり、文字のフォント(書体)の名称を取得する。
フォーマット取得部444は、形式取得部の一例であり、フォントの形式を取得する。
登録処理部446は、文字の登録コマンドを順次処理し、コンポジットグリフとシンプルグリフの双方を第1検索テーブルTBL1に登録するとともに、シンプルグリフはさらに第2検索テーブルTBL2にも登録する。
なお、本実施形態では、特に、グリフの扱いに特徴があるが、実際には、ビットマップ形式の文字データを受け付けることもある。この場合の対処のため、登録処理部446は、トゥルータイプ形式のグリフデータとビットマップ形式の文字データの両方を第1検索テーブルTBL1に登録する。
文字描画コマンド実行部460は、描画指示(印刷データ)に含まれる各文字について、処理対象の文字に対応する字形の定義情報(グリフ)を文字データ格納部420(第1検索テーブルTBL1や第2検索テーブルTBL2)から読み出して文字の描画処理を行なうように指示する文字描画処理指示部の一例である。この文字描画コマンド実行部460は、フォント名取得部462、パラメータ取得部464、および検索処理部466を有する。
フォント名取得部462は、書体名取得部の一例であり、フォント名取得部442と同様に、文字のフォントの名称を取得する。
パラメータ取得部464は、変数取得部の一例であり、文字を描画する際のサイズ、色、などの変数を取得する。
検索処理部466は、文字の描画コマンドを順次処理し、コンポジットグリフは第1検索テーブルTBL1から取得し、シンプルグリフは第2検索テーブルTBL2から取得して、取得した各グリフを描画実行部480に渡す。
描画実行部480は、シンプルグリフ描画部482(第1描画部)、コンポジットグリフ描画部484(第2描画部)、および第3描画部486を有する。
シンプルグリフ描画部482は、シンプルグリフの描画処理を担当する。コンポジットグリフ描画部484はコンポジットグリフの描画処理を担当する。第3描画部486は、シンプルグリフとコンポジットグリフを除くその他の文字や図形(グラフィックス)や写真(イメージ)の描画処理を担当する。
コンポジットグリフ描画部484は、識別子取得部520、配置情報取得部522、および合成部526を有する。識別子取得部520は、コンポジットグリフを構成するグリフを特定する識別子(ID)を取得する。配置情報取得部522は、コンポジットグリフを構成するグリフの配置位置の情報を取得する。合成部526は、シンプルグリフ描画部482で生成されるコンポジットグリフを構成するシンプルグリフのイメージ(部品イメージと称する)を合成用バッファに描画することでコンポジットグリフの合成イメージを生成する。
<文字描画処理の問題点と改善手法の原理>
トゥルータイプフォント形式の文字(キャラクタ)はグリフ(字形の定義情報)と呼ばれるが、グリフには字形そのものの形を定義するシンプルグリフ(Simple Glyph:字形定義情報)と、複数のグリフの組み合わせを定義するコンポジットグリフ( Composite Glyph:組合せ定義情報)がある。
たとえば、ハングル文字では、母音と子音を示す記号を組み合わせて1つの文字を構成するが、トゥルータイプフォントでは、それぞれの記号をシンプルグリフとして、実際の文字をコンポジットグリフとして構成する。
たとえば、ページ記述言語(PDL)の中のPCL5/6では、ホスト側装置2にあるフォントデータのうち、必要なグリフを印刷データ中に埋め込むソフトフォント( Soft Font)やダウンローダブルフォントと称される仕組みを持つ。印刷装置3においてソフトフォントにより各グリフをホスト側装置2から受信すると、各グリフを区別無く検索テーブルに格納する。検索テーブルには、シンプルグリフとコンポジットグリフの両者が含まれる。
この場合に、前記のようなコンポジット形式のトゥルータイプフォントがソフトフォントとして送信されると、1文字を描画処理(ラスタライズ)するときに、先ずコンポジットグリフをその検索テーブルから取得し、さらに、この検索テーブルから取得したコンポジットグリフを構成するシンプルグリフを同じ検索テーブルから取得するという手順を経て文字の描画処理を行なう。コンポジットグリフの文字描画では、シンプルグリフとコンポジットグリフの両者が含まれる登録数の多い検索テーブルに対してグリフの探索を複数回行なうことになるため、コンポジットグリフの文字の描画処理が遅くなる。
また、シンプルグリフの描画処理時には、シンプルグリフとコンポジットグリフの両者が含まれる登録数の多い検索テーブルに対してシンプルグリフの探索を行なうことになるため、ヒットしないコンポジットグリフもサーチ対象となってしまい(無駄な検索が実行される)、シンプルグリフの文字の描画処理も遅くなる。
また、文字のビットマップデータを記憶しておき、キャッシュ検索を利用した文字描画の仕組みをとることも考えられる。たとえば、文字を形成する複数の部品ごとに、フォントデータを記憶部に記憶しておく。記憶されたフォントデータからビットマップデータを生成し、部品キャッシュ記憶部に、それらのビットマップデータを記憶する。そして、それら部品のビットマップデータを結合することにより、文字のビットマップデータを作成する。この仕組みは、シンプルグリフごとの描画処理結果をキャッシュすることで高速化しようとするものである。
ただし、このキャッシュでは、文字が編集(たとえばサイズ変更)されるとキャッシュを使うことができない。コンポジットグリフの場合は各グリフをスケーリングして組み合わせることもあり、このような場合は各シンプルグリフのキャッシュを使い回せず、キャッシュ機能が有効に機能しないことが起こる。キャッシュ機能が効果的でないときは、キャッシュ機能なしの場合と同様に検索が遅いということになる。
これに対して、本実施形態では、印刷装置3において、文字データ格納部420の検索テーブル(文字定義情報記憶部)として、複数の検索テーブルを用意し、各グリフがシンプルグリフかコンポジットグリフかに応じて登録先(格納先)を切り替える。
複数の検索テーブルを用意するときの考え方としては、先ず、コンポジットグリフとシンプルグリフの別に検索テーブルを用意する、つまり、コンポジットグリフ専用とシンプルグリフ専用の2種の検索テーブルを用意する第1の手法が考えられる。
また、受信したグリフの全てを(つまりコンポジットグリフとシンプルグリフを混在させて)格納する混在検索テーブルと、シンプルグリフおよびコンポジットグリフの何れか一方を主に(第1実施形態では「のみを」)格納する個別検索テーブルの組合せが考えられる。この場合、個別検索テーブルに関しては、あるフォントの全てのグリフに占める割合(構成率)の少ない方を適用するのが好ましい。たとえば、シンプルグリフの構成率の方がコンポジットグリフの構成率よりも低いときは、シンプルグリフ用の個別検索テーブルを用意することで登録数を混在検索テーブルよりも少なくする第2の手法をとる。シンプルグリフの描画時にはこの登録数の少ないシンプルグリフ用の個別検索テーブルからシンプルグリフを取得して描画する。
また、コンポジットグリフの構成率の方がシンプルグリフの構成率よりも低いときは、コンポジットグリフ用の個別検索テーブルを用意することで登録数を混在検索テーブルよりも少なくする第3の手法をとる。コンポジットグリフの描画時にはこの登録数の少ないコンポジットグリフ用の個別検索テーブルからコンポジットグリフを取得し、さらにそのコンポジットグリフを構成するシンプルグリフを混在検索テーブルから取得して描画する。ただし、この第3の手法は原理的には考え得るというもので、実態としては効果は少ないと考えられる。
なお、2つの検索テーブルを用意する場合に、コンポジットグリフ(組合せ定義情報)で規定されているグリフ(定義情報)を一方の検索テーブル(文字定義情報記憶部)から読み出すことができないときには、さらに他方の検索テーブル(文字定義情報記憶部)を検索して読み出して文字の描画処理を指示するのがよい。この場合、さらに好ましくは、この描画処理の指示に基づく文字描画処理が完了した後には、そのコンポジットグリフで規定されているグリフを一方の検索テーブルにも登録するようにするのがよい。
これらの各組合せの内、第1実施形態(後述の第2実施形態も)では、後述する適用例を踏まえて、第2の手法をとる。ソフトフォントにより各グリフをホスト側装置2から受信すると、各グリフがシンプルグリフかコンポジットグリフかを判別し、シンプルグリフとコンポジットグリフの両者が含まれる第1検索テーブルTBL1(従前のものと同じ)とシンプルグリフのみを含む第2検索テーブルTBL2を構築する。
文字の描画処理時には、文字( Glyph)の識別子(ID)が最初に指定される。印刷装置3では、第1検索テーブルTBL1からその文字のグリフを取得する。取得されたグリフがコンポジットグリフのときは、コンポジットグリフを構成する各シンプルグリフについては、シンプルグリフ用の第2検索テーブルTBL2を用いて検索を行なう。
[全体動作:第1実施形態]
図3は、第1実施形態の文字描画処理の全体的な処理手順を説明するフローチャートである。
文書の出力処理を開始すると、画像処理部350Aは、処理対象ページのオペレータpを「1」に設定する(S110)。
その後、処理対象ページpに関して、画像処理部350Aは、ページ処理を実行する(S120)。
ページ処理が完了したとき、画像処理部350Aは、残ページの有無を確認し(S180)、残ページがある場合には(S180−YES)、処理対象ページのオペレータpを「1」インクリメント(増分)して(S182)、ページ処理(ステップS120)に戻ることで次ページの処理を実行する。
[描画展開処理:第1実施形態]
図4は、第1実施形態の各ページ処理における描画展開処理の処理手順を説明するフローチャートである。
各ページ処理では、先ず、PDLデータ解釈部340は、PDLデータを受け取り(S210)、PDLデータを解釈して得た描画命令を画像処理部350Aに渡す。画像処理部350Aは、描画命令に基づきビットマップデータを生成する。
このとき、画像処理部350Aは、コマンドの有無を確認する(S220)。コマンドが存在していれば(S220−YES)、画像処理部350Aはそのコマンドを読み込み(S222)、読み込んだコマンドの実行処理を行なう(S230)。
[コマンド実行処理:第1実施形態]
図5は、第1実施形態のコマンド実行処理(S230)の処理手順の詳細を説明するフローチャートである。
コマンド実行処理(S230)では、コマンド種類判別部410は、コマンドの種類を確認する(S232)。ここでのコマンドの種類の確認は「文字データの登録コマンド」や「文字の描画コマンド」であるか否かである。「文字データの登録コマンド」や「文字の描画コマンド」以外のときは、画像処理部350Aは、その他のコマンドに従った実行処理を行なう(S232−その他,S234)。
「文字データの登録コマンド」のときは、文字データ登録コマンド実行部440は、「文字データの登録コマンド」に従った実行処理を行なう(S232−登録,S240)。
「文字の描画コマンド」のときは、文字描画コマンド実行部460は、「文字の描画コマンド」に従った実行処理を行なう(S232−描画,S260)。
[文字データ登録コマンド実行処理:第1実施形態]
図6は、第1実施形態の文字データ登録コマンド実行処理(S240)の処理手順の詳細を説明するフローチャートである。
文字データ登録コマンド実行処理(S240)では、文字データ登録コマンド実行部440は先ず、フォント名取得部442がフォント定義コマンドからフォント名を取得し登録処理部446に渡す(S242)。
登録処理部446は、文字コマンドがグリフであるときにグリフ検索で文字描画を行なうための検索テーブルを取得する(S244)。本実施形態では、検索テーブルとして、第1検索テーブルTBL1と第2検索テーブルTBL2を用意する。
フォーマット取得部444は、文字データの登録コマンドからフォントのフォーマット(format)を取得して登録処理部446に渡す(S246)。
ここで、フォントのフォーマットは、たとえば、ビットマップフォントとアウトラインフォントの2つに区分けされる。ビットマップフォントは、点(ドット)の集合体で構成されるフォントであり、「ドットフォント」や「スクリーンフォント」とも称される。アウトラインフォントは、文字のアウトラインのデータを持っているフォントであり、たとえば、「トゥルータイプフォント( True Type FONT)」、「ポストスクリプトフォント(Post Script FONT」、「オープンタイプフォント(Open Type Font)」などが該当する。本実施形態では、これらの内、ビットマップフォントであるのか、アウトラインフォントの内のトゥルータイプフォントであるのかに応じて処理を切り替える。
登録処理部446は、登録処理対象の文字がビットマップフォントであるのかトゥルータイプフォントであるのかを確認する(S250)。ビットマップフォントのときは(S250−Bit Map )、登録処理部446は、ビットマップ形式の文字データを第1検索テーブルにTBL1に追加(登録)した後に、この文字データ登録コマンド実行処理を完了させる(S251)。
トゥルータイプフォントのときは(S250− True Type)、登録処理部446は、そのグリフを第1検索テーブルにTBL1に追加(登録)する(S253)。なお、登録済みの場合は上書きする。
登録処理部446は、そのグリフがシンプルグリフであるのか否かを判定する(S254)。処理対象の文字がコンポジットグリフであるときは、登録処理部446は、文字データ登録コマンド実行処理を完了させる(S254−NO)。シンプルグリフであるときは(S254−YES)、登録処理部446は、そのシンプルグリフを第2検索テーブルTBL2に追加した後に文字データ登録コマンド実行処理を完了させる(S257)。なお、登録済みの場合は上書きする。
この結果、第1検索テーブルTBL1にはコンポジットグリフとシンプルグリフが混在して登録され、第2検索テーブルTBL2にはシンプルグリフのみが登録される。
[シンプルグリフとコンポジットグリフの判別手法]
図7は、処理対象の文字がシンプルグリフであるのかコンポジットグリフであるのかの判別処理(S254)の具体例を説明する図である。ここでは「PCL5 Format15 形式」における、グリフデータの種別判定方法を例に説明する。
「DescSize」+6バイト目から トゥルータイプフォントの仕様に従いグリフデータが記述されている。
登録処理部446は、グリフデータの先頭から2バイト目の「DescriptorSize値」を読み込む。この値が配置位置を示すものであり、トゥルータイプフォントのグリフ記述の開始位置を示す。
次に登録処理部446は、「6+DescSize」バイト目と、「7+DescSize」バイト目を読み込む。この2バイトが両方とも「0xFF」であれば、コンポジットグリフであり、そうでなければシンプルグリフであると判別する。
[文字描画コマンド実行処理:第1実施形態]
図8は、第1実施形態の文字描画コマンド実行処理(S260)の処理手順の詳細を説明するフローチャートである。
文字描画コマンド実行処理(S260)では、文字描画コマンド実行部460のフォント名取得部462が、フォント定義コマンドからフォント名を取得して検索処理部466に渡す(S262)。
次に文字描画コマンド実行部460は、文字コマンドがグリフであるときにグリフ検索により文字描画を行なうための検索テーブルを取得する(S264)。前述のように、本実施形態では、第1検索テーブルTBL1と第2検索テーブルTBL2を用意する。
さらにパラメータ取得部464は、文字の描画コマンドから描画パラメータを取得して検索処理部466に渡す(S266)。
検索処理部466は、描画処理対象の文字がビットマップフォントであるのかトゥルータイプフォントであるのかを確認する(S270)。ビットマップフォントのときは(S270−Bit Map )、検索処理部466は、そのビットマップフォントの文字描画コマンドに従ってページバッファに描画して(S298)、文字描画登録コマンド実行処理を完了させる。「ページバッファ」とは、1ページ分の文書の描画処理を実行する際に、各過程で生成されるイメージデータを格納する記憶領域を意味する。
トゥルータイプフォントのときは(S270− True Type)、検索処理部466は、描画対象のトゥルータイプフォント形式のキャラクタ(文字)であるグリフのデータを第1検索テーブルTBL1から取得する(S272)。
検索処理部466は、そのグリフがコンポジットグリフであるのか否かを判定する(S290)。処理対象の文字がシンプルグリフであるときは(S290−NO)、検索処理部466はそのシンプルグリフをシンプルグリフ描画部482に渡す。シンプルグリフ描画部482は、シンプルグリフの描画展開を実行し(S292)、描画展開した文字のイメージデータ(ビットマップデータ)をページバッファに描画して(S298)、文字描画登録コマンド実行処理を完了させる。
処理対象の文字がコンポジットグリフであるときは(S290−YES)、検索処理部466はコンポジットグリフ描画部484に対してコンポジットグリフの描画展開を指示する。コンポジットグリフ描画部484はコンポジットグリフの描画処理を実行し(S294)、描画展開した文字のイメージデータ(ビットマップデータ)をページバッファに描画して(S298)、文字描画登録コマンド実行処理を完了させる。
[コンポジットグリフ文字描画処理:第1実施形態]
図9は、第1実施形態のコンポジットグリフ文字描画処理(S294)の処理手順の詳細を説明するフローチャートである。コンポジットグリフを構成するグリフを以下では「部品グリフ」とも称する。
第1実施形態のコンポジットグリフ文字描画処理(S294)では、コンポジットグリフ描画部484は先ず、合成用バッファを用意する(S310)。「合成用バッファ」は、コンポジットグリフを構成する各部品グリフ(第1実施形態ではシンプルグリフのみ)のイメージデータを合成するための作業用の記憶領域(作業用バッファ)を意味する。この「合成用バッファ」を用意するときは、指定されている文字サイズに対応した大きさの記憶領域を確保するようにする。
次にコンポジットグリフ描画部484の識別子取得部520は、コンポジットグリフを構成する各シンプルグリフの識別子(グリフID)を取得して検索処理部466に検索を指示する(S310)。さらに、配置情報取得部522は、コンポジットグリフを構成する部品グリフとしての各シンプルグリフの配置情報を取得する(S330)。ここで、「配置情報」とは、どの位置に各シンプルグリフを貼り付けることでコンポジットグリフを完成させるかの位置情報を意味する。
シンプルグリフの検索指示を受けた検索処理部466は、部品グリフとしての各シンプルグリフを第2検索テーブルTBL2から取得してシンプルグリフ描画部482に渡す(S340)。シンプルグリフ描画部482は、シンプルグリフの描画展開を実行して各シンプルグリフのイメージデータ(ビットマップデータ:部分イメージ)を生成して合成部526に渡す(S374)。合成部526は、シンプルグリフ描画部482が描画展開した各シンプルグリフの部品イメージを合成用バッファのそれぞれ対応する位置に描画することで部品イメージを合成する(S380)。
このような処理をコンポジットグリフを構成する全ての部品グリフ(第1実施形態ではシンプルグリフのみ)について行なう。つまり、処理対象のコンポジットグリフを構成する部品グリフの部品イメージを合成した後には、画像処理部350Aは、処理対象のコンポジットグリフを構成する残りの部品グリフの有無を確認し(S390)、残りの部品グリフがあるときは(S390−NO)、ステップS320に戻ることで、次の部品グリフの描画処理を実行する。残りの部品グリフが無くなったら(S390−YES)、画像処理部350Aは、コンポジットグリフの文字描画処理を完了させる。
[適用例:第1実施形態]
図10〜図10Cは、第1実施形態の適用例を説明する図である。ここで、図10は、この適用例で使用する印刷データを示す図である。図10Aは、図10に示す印刷データで使用されているコンポジットグリフの構造を説明する図である。図10Bは、この適用例における第1検索テーブルTBL1と第2検索テーブルTBL2の登録情報の例を示す図である。図10Cは、この適用例で使用する「HYShortSamul-Medium 」のフォントデータにおけるコンポジットグリフとシンプルグリフの占める割合を説明する図である。
なお、この適用例で示している各グリフの例は、第1実施形態の具体的な説明のために使用している擬似的なもの(擬似コード)であり、実際のものと同じか異なるかは無視する。
この適用例では、図10に示すような印刷データ(擬似コード)を描画展開する場合で説明する。図10のトゥルータイプフォントのグリフ「 Glyph 54596」,「 Glyph 54736」は、図10Aに示すようなコンポジット構造を持つ。コンポジットグリフ「 Glyph 54596」は、3つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」の組合せで構成されている。コンポジットグリフ「 Glyph 54736」は、2つのシンプルグリフ「 Glyph 66257」,「 Glyph 65681」の組合せで構成されている。
図10に示す印刷データが、図1に示したホスト側装置2のプリンタドライバにより生成され、インタフェース部230および伝送路9を経て印刷装置3のインタフェース部330により受信される。
印刷装置3においては、描画展開処理部として機能する画像処理部350Aは、図4に示した処理手順に従ってページごとに、描画展開処理を実行する。
この際、画像処理部350Aは、印刷データのコマンドを順に取得する(S222)。図10に示すように、最初のコマンド「Define Font HYShortSamul-Medium <HYShortSamul-Mediumのデータ> 」はフォント定義コマンドのため、画像処理部350Aは、そのフォント定義コマンドを読み込み、図5に示すコマンド実行処理(S230)へ進む。
コマンド実行処理(S230)に入ったとき、コマンドの種類は「その他のコマンド」に該当するので、画像処理部350Aは、そのフォント定義コマンドに応じた適切な処理(フォント定義処理)を実行し、このコマンドの実行を終了する(S232−その他,S234)。「フォント定義処理」は本実施形態に特有のものではなく一般的なものであるので、ここではその詳細説明を割愛する。
画像処理部350Aは、図10に示す印刷データの次のコマンド「Define Glyph 54596 <Glyph54596( Composite)データ> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。次のコマンドは「 Glyph 54596」の定義コマンドのため、画像処理部350Aは、「グリフ登録コマンド」の処理のために、図6に示す文字データ登録コマンド実行処理(S240)へ進む。
文字データ登録コマンド実行処理(S240)へ入ると、画像処理部350Aは先ず、フォント名を取得する(S242)。この場合、前に定義されている「HYShortSamul-Medium 」がフォント名として使用される。
画像処理部350Aはさらに、2つの検索テーブル(第1検索テーブルTBL1と第2検索テーブルTBL2)を取得する(S244)。各検索テーブルは、この時点で空である。
画像処理部350Aは、処理対象文字のフォーマットを取得する(S246)。この場合、「 Glyph 54596」からトゥルータイプフォント形式であることが分かる(S250− True Type)。よって、画像処理部350Aは、その「 Glyph 54596」を第1検索テーブルTBL1に登録する(S253)。
トゥルータイプフォントはコンポジット可能なフォーマットであるため、画像処理部350Aは、「 Glyph 54596」がシンプルグリフであるか否かを判定する(S254)。「 Glyph 54596」はコンポジットグリフであるため(S254−NO)、画像処理部350Aは、グリフ登録コマンドの実行を終了する。
画像処理部350Aは、図10に示す印刷データの次のコマンド「Define Glyph 65607 <Glyph65607(Simple)データ> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。次のコマンドは「 Glyph 65607」の定義コマンドのため、画像処理部350Aは、「グリフ登録コマンド」の処理のために、図6に示す文字データ登録コマンド実行処理(S240)へ進む。
文字データ登録コマンド実行処理(S240)へ入ると、画像処理部350Aは、「 Glyph 54596」の場合と同様の処理を実行して、「 Glyph 65607」を第1検索テーブルTBL1に登録する(S253)。
さらに画像処理部350Aは、「 Glyph 65607」がシンプルグリフであるか否かを判定する(S254)。「 Glyph 65607」はシンプルグリフであるため(S254−YES)、画像処理部350Aは、その「 Glyph 65607」を第2検索テーブルTBL2にも登録してグリフ登録コマンドの実行を終了する(S257)。
画像処理部350Aは、このような処理を、印刷データに含まれる全てのグリフの定義コマンド(「 Glyph 66257」まで)について順次実行する。
この時点では、第1検索テーブルTBL1には、図10B(1)に示すように、「 Glyph 54596」,「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 54736」,「 Glyph 66257」が登録される。第2検索テーブルTBL2には、図10B(2)に示すように、「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」が登録される。
画像処理部350Aは、図10に示す印刷データの次のコマンド「Draw (100,100) 10pt <54596> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,100)の位置に10pt(ポイント)の大きさで「 Glyph 54596」を描画するコマンドであるため、画像処理部350Aは、「文字描画コマンド」の処理のために、図8に示す文字描画コマンド実行処理(S260)へ進む。
文字描画コマンド実行処理(S260)へ入ると、画像処理部350Aは先ず、フォント名を取得する(S262)。この場合、前に定義されている「HYShortSamul-Medium 」がフォント名として使用される。
画像処理部350Aは、「HYShortSamul-Medium 」の検索テーブルを取得する(S264)。この場合、図10Bに示した2種類のテーブル(第1検索テーブルTBL1と第2検索テーブルTBL2)を取得することになる。
さらに画像処理部350Aは、文字の描画コマンドから描画パラメータを取得する(S266)。この場合、フォントの大きさ「10pt」がパラメータに当たる。
画像処理部350Aは、第1検索テーブルTBL1を検索して「 Glyph 54596」のデータを取得する(S272)。「 Glyph 54596」はコンポジットグリフであるため(290−YES)、画像処理部350Aは、図9に示すコンポジットグリフの文字描画処理を実行する(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Aは先ず合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各シンプルグリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 54596」を構成する3つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」の内のたとえば「ID: 65607」とその配置情報を最初に取得する。
画像処理部350Aは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 65607」のデータを取得する(S340)。そして、画像処理部350Aは、「 Glyph 65607」を指定された大きさで描画展開し、生成したイメージデータを「 Glyph 54596」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S374,S380)。
さらに画像処理部350Aは、コンポジットグリフ「 Glyph 54596」を構成する残りのシンプルグリフ「 Glyph 65650」,「 Glyph 65681」についても同様に処理を実行することで、コンポジットグリフ「 Glyph 54596」の合成された画像を生成する。そして、画像処理部350Aは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54596」の合成イメージデータ(合成画像)をページバッファの座標(100,100)の位置に貼り付ける(S298)。
画像処理部350Aは、残りのコンポジットグリフ「 Glyph 54736」についても、コンポジットグリフ「 Glyph 54596」と同様に処理する。たとえば、「 Glyph 54736」は、2つのシンプルグリフ「 Glyph 66257」,「 Glyph 65681」で構成されているので、画像処理部350Aは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 66257」,「 Glyph 65681」のデータを取得し(S340)、それぞれを指定された大きさで描画展開し、生成したイメージデータを「 Glyph 54736」の合成用バッファ上の各「配置情報」に従った位置に貼り付けることでコンポジットグリフ「 Glyph 54736」の合成された画像を生成する(S374,S380)。そして、画像処理部350Aは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54736」の合成イメージデータ(合成画像)をページバッファの座標(100,120)の位置に貼り付ける(S298)。
以上により、図10に示す印刷データに基づく文字描画処理は完了する。
この第1実施形態の適用例では、グリフ検索による文字描画処理時には、2つのコンポジットグリフ「 Glyph 54596」,「 Glyph54576」はコンポジットグリフとシンプルグリフが混在して登録されている第1検索テーブルTBL1(6個のグリフが登録)から検索し、4つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」はシンプルグリフのみが登録されている第2検索テーブルTBL2(4個のグリフが登録)から検索する。因みに、「 Glyph 65681」は2回の検索が行なわれる。
これに対して、第1実施形態を適用しない場合は、第2検索テーブルTBL2が存在せず、4つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」についても第1検索テーブルTBL1のグリフ検索により文字描画処理を実行する。
第2検索テーブルTBL2は、シンプルグリフのみが登録されるので第1検索テーブルTBL1よりも登録数が少ない。このため、第2検索テーブルTBL2も利用する第1実施形態の方が、第1検索テーブルTBL1のみを利用するより、検索処理は高速になる。
ここで示した適用例では、文字数が少ないため、その差が大きくは現れない。しかし、実際の「HYShortSamul-Medium 」のフォントデータにおいては、図10Cに示すように、第2検索テーブルTBL2に含まれるシンプルグリフは全体の僅か14%のため、この構成率の傾向は印刷データにも現われ、第2検索テーブルTBL2は第1検索テーブルTBL1よりもサイズが小さくなる。たとえば、実測データで1/8〜1/2となることが期待される。混在検索テーブルである第1検索テーブルTBL1のみを用いる手法よりも第1実施形態を適用した方が検索処理が高速になる。たとえば、ハングル文字などのコンポジッット文字の描画処理に係るグリフ検索時間が短縮され、第1実施形態を適用しない場合よりも描画処理時間が短縮される。
このことは、検索にヒットしないコンポジットグリフが大多数を占めている混在検索テーブル(本実施形態では第1検索テーブルTBL1)中から該当のシンプルグリフをサーチするよりも、シンプルグリフのみが存在している個別検索テーブル(本実施形態では第2検索テーブルTBL2)中から該当のシンプルグリフをサーチする方が、無駄なサーチをしなくても済みグリフ検索が効率的になることからも理解されよう。
<描画展開処理:第2実施形態(第1例)>
以下に、第2実施形態(第1例)の描画展開処理を説明する。第2実施形態の描画展開処理は、処理対象のコンポジットグリフが、シンプルグリフのみを構成要素に持つものと、コンポジットグリフを構成要素に持つものとが混在している場合への対処例である点に特徴がある。たとえば、トゥルータイプフォントの仕様としては、コンポジットグリフを構成するグリフがコンポジットグリフである、という構成も許している。その場合への対処の仕組みである。
第1実施形態において、コンポジットグリフを構成要素に持つコンポジットグリフを描画処理すると、ステップS340において第2検索テーブルTBL2を検索しても該当のコンポジットグリフは取得されず、描画展開できないことになる。
この対処のため、第2実施形態(第1例)では、グリフ登録処理時には、第1実施形態と同様に、コンポジットグリフとシンプルグリフが混在して登録する第1検索テーブルTBL1とシンプルグリフを登録する第2検索テーブルTBL2を用意する。そして、コンポジットグリフの構成要素(シンプルグリフのときとコンポジットグリフのときがある)の描画処理時に、第2検索テーブルTBL2を検索しても該当のものが取得できないときは(つまりコンポジットグリフの構成要素がコンポジットグリフのときは)第1検索テーブルTBL1の検索も行なう点に特徴がある。
第2実施形態(第1例)は、コンポジットグリフ文字描画処理が第1実施形態と異なり、その他の点は第1実施形態と同様である。以下、第1実施形態との相違点を中心に、具体的に説明する。なお、第2実施形態(第1例)の画像処理部350Bの構成は第1実施形態の画像処理部350Aと同様である。ここでは図示を割愛する。
[コンポジットグリフ文字描画処理:第2実施形態(第1例)]
図11は、第2実施形態(第1例)のコンポジットグリフ文字描画処理(S294)の処理手順の詳細を説明するフローチャートである。第1実施形態と同様の処理ステップには、第1実施形態と同様のステップ番号を付す。
第2実施形態(第1例)のコンポジットグリフ文字描画処理(S294)では、ステップS340までは第1実施形態と同様である。
検索処理部466は、コンポジットグリフを構成する各グリフ(シンプルグリフのときとコンポジットグリフのときがある)の第2検索テーブルTBL2からの取得に成功したときは(S350−YES)、そのグリフをシンプルグリフ描画部482に渡す。シンプルグリフ描画部482は、第1実施形態と同様にシンプルグリフの文字描画処理を実行して各シンプルグリフの部分イメージを生成する(S374)。
検索処理部466は、コンポジットグリフを構成するグリフの第2検索テーブルTBL2からの取得に失敗したときは(S350−NO)、第1検索テーブルTBL1から取得する(S352)。ここでは、取り敢えず、コンポジットグリフを構成するコンポジットグリフが第1検索テーブルTBL1から取得できるものとして説明を続ける。検索処理部466は、そのグリフをコンポジットグリフ描画部484に渡す。コンポジットグリフ描画部484は、この第2実施形態(第2例)のコンポジットグリフの文字描画処理を実行することで、そのコンポジットグリフを構成する各コンポジットグリフの部分イメージを生成する(S354)。
コンポジットグリフ描画部484の合成部526は、シンプルグリフ描画部482が描画展開した各シンプルグリフのイメージデータを合成用バッファのそれぞれ対応する位置に描画することで部品イメージを合成する(S380)。
ステップS354でのコンポジットグリフの文字描画処理で、そのコンポジットグリフがさらにコンポジットグリフを構成要素に持つ場合には、ステップS350−NOの系統での処理が繰り返される。したがって、N段(Nは2以上の正の整数)にコンポジット構造が構造化された(ネストした)フォントであっても、正しく描画処理が実行される。
[適用例:第2実施形態(第1例)]
図12〜図12Bは、第2実施形態(第1例)の適用例を説明する図である。ここで、図12は、この適用例で使用する印刷データを示す図である。図12Aは、図12に示す印刷データで使用されているコンポジットグリフの構造を説明する図である。図12Bは、この適用例における第1検索テーブルTBL1と第2検索テーブルTBL2の登録情報の例を示す図である。なお、この適用例で示している各グリフの例は、第2実施形態(第1例)の具体的な説明のために使用している擬似的なもの(擬似コード)であり、実際のものと同じか異なるかは無視する。
第2実施形態(第1例)の適用例は、処理対象のコンポジットグリフの中に、シンプルグリフとコンポジットグリフを構成要素に持つものが混在している場合である。
たとえば、図12に示すように、ここで適用する印刷データは、図10に示した第1実施形態の適用例の印刷データに対して、「Define Glyph 66257 <Glyph66257(Simple)データ> 」の後に、「Define Glyph 20000 <Glyph20000( Composite)データ> 」が追加され、対応する文字描画コマンド「Draw (100,120) 10pt <20000> 」が存在する点が異なる。「Define Glyph 20000 <Glyph20000( Composite)データ> 」は「 Glyph 20000」の定義コマンドであるが、「 Glyph 20000」は、図12Aに示すように、コンポジットグリフのみを構成要素とするものではなく、コンポジットグリフ「 Glyph 54736」も構成要素にしている点が第1実施形態と異なる。因みに、この「 Glyph 20000」は現実のものではないが、トゥルータイプフォントの仕様を満たしており、説明のために設定した。
これを正しく処理するため、第2実施形態(第1例)では、前述のように、コンポジットグリフ文字描画処理を第1実施形態とは異なるものとしている。
図12に示す印刷データが、図1に示したホスト側装置2のプリンタドライバにより生成され、インタフェース部230および伝送路9を経て印刷装置3のインタフェース部330により受信される。
印刷装置3においては、描画展開処理部として機能する画像処理部350Bは、図4に示した処理手順に従ってページごとに、描画展開処理を実行する。
第1実施形態と同様に、印刷データに含まれる全てのグリフの定義コマンド(「 Glyph 20000」まで)について順次実行する。
この時点では、第1検索テーブルTBL1には、図12B(1)に示すように、「 Glyph 54596」,「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 54736」,「 Glyph 66257」,「 Glyph 20000」が登録される。第2検索テーブルTBL2には、図12B(2)に示すように、「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」が登録される。
画像処理部350Bは、図12に示す印刷データの次のコマンド「Draw (100,100) 10pt <54596> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,100)の位置に10ptの大きさで「 Glyph 54596」を描画するコマンドであるため、画像処理部350Bは、「文字描画コマンド」の処理のために、図8に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Bは、第1検索テーブルTBL1を検索して「 Glyph 54596」のデータを取得する(S272)。「 Glyph 54596」はコンポジットグリフであるため(290−YES)、画像処理部350Bは、図11に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Bは先ず合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各グリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 54596」を構成する3つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」の内のたとえば「ID: 65607」とその配置情報を最初に取得する。
画像処理部350Bは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 65607」のデータを取得する(S340,S350−YES)。そして、画像処理部350Bは、「 Glyph 65607」を指定された大きさで描画展開し、生成したイメージデータを「 Glyph 54596」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S374,S380)。
さらに画像処理部350Bは、コンポジットグリフ「 Glyph 54596」を構成する残りのグリフ「 Glyph 65650」,「 Glyph 65681」についても同様に処理を実行する。これら残りも全てシンプルグリフであるので、画像処理部350Bは、第2検索テーブルTBL2から検索することで、コンポジットグリフ「 Glyph 54596」の合成された画像を生成する。そして、画像処理部350Bは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54596」の合成イメージデータ(合成画像)をページバッファの座標(100,100)の位置に貼り付ける(S298)。
画像処理部350Bは、次のコマンド「Draw (100,120) 10pt <20000> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,120)の位置に10ptの大きさで「 Glyph 20000」を描画するコマンドである。
画像処理部350Bは、第1検索テーブルTBL1を検索して「 Glyph 20000」のデータを取得する(S272)。「 Glyph 20000」はコンポジットグリフであるため(290−YES)、画像処理部350Bは、図11に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Bは先ず合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成するグリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 20000」を構成するシンプルグリフ「 Glyph 65650」とコンポジットグリフ「 Glyph 54736」の内のたとえば「ID: 65650」とその配置情報を最初に取得する。
画像処理部350Bは、第2検索テーブルTBL2を検索してグリフ「 Glyph 65650」の取得を試みる(S340)。シンプルグリフであるから取得に成功するので(S350−YES)、画像処理部350Bは、「 Glyph 65650」を指定された大きさで描画展開し、生成したイメージデータを「 Glyph 20000」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S374,S380)。
次に画像処理部350Bは、残りの「ID: 54736」とその配置情報を取得する。画像処理部350Bは、第2検索テーブルTBL2を検索してグリフ「 Glyph 54736」の取得を試みる(S340)。グリフ「 Glyph 54736」は第2検索テーブルTBL2には未登録であり、取得は失敗する(S350−NO)。このため、画像処理部350Bは、第1検索テーブルTBL1を検索してグリフ「 Glyph 54736」の取得を試みる(S352)。第1検索テーブルTBL1には登録されているので取得に成功する。
画像処理部350Bは、コンポジットグリフ「 Glyph 54736」について、第2実施形態(第1例)のコンポジットグリフの文字描画処理を実行することで、コンポジットグリフ「 Glyph 54736」を構成する各シンプルグリフの部分イメージを生成して合成することで「 Glyph 54736」の合成イメージを得る(S354)。さらに、コンポジットグリフ「 Glyph 54736」の合成イメージを「 Glyph 20000」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S380)。これによって、コンポジットグリフ「 Glyph 20000」の合成された画像が得られる。
そして、画像処理部350Bは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54736」の合成イメージデータ(合成画像)をページバッファの座標(100,120)の位置に貼り付ける(S298)。以上により、図12に示す印刷データに基づく文字描画処理は完了する。
<描画展開処理:第2実施形態(第2例)>
以下に、第2実施形態(第2例)の描画展開処理を説明する。第2実施形態(第2例)では、第2実施形態(第1例)をベースに、コンポジットグリフの構成要素がコンポジットグリフのときに、第2検索テーブルTBL2には該当のものがなく第1検索テーブルTBL1から該当のものが取得できたときは、そのコンポジットグリフの描画展開後に、そのコンポジットグリフを第2検索テーブルTBL2に追加(登録)するに特徴がある。
第2実施形態(第2例)は、コンポジットグリフ文字描画処理が第2実施形態(第1例)と異なり、その他の点は第2実施形態(第1例)と同様である。以下、第2実施形態(第1例)との相違点を中心に、具体的に説明する。
[装置構成]
図13は、第2実施形態(第2例)の画像処理部350Cの構成例を示す図である。第2実施形態(第2例)の画像処理部350Cは、第1実施形態の画像処理部350Aをベースに、文字描画コマンド実行部460がグリフ判定部468を有するが異なる。
グリフ判定部468は、検索処理部466が第2検索テーブルTBL2から取得したグリフが、シンプルグリフであるかコンポジットグリフであるかを判別する。その判別結果に応じて、検索処理部466が取得したグリフの渡し先(シンプルグリフ描画部482かコンポジットグリフ描画部484か)を切り替える。
[コンポジットグリフ文字描画処理:第2実施形態(第2例)]
図14は、第2実施形態(第2例)のコンポジットグリフ文字描画処理(S294)の処理手順の詳細を説明するフローチャートである。第1実施形態と同様の処理ステップには、第1実施形態と同様のステップ番号を付す。
第2実施形態(第2例)のコンポジットグリフ文字描画処理(S294)では、ステップS350までは第2実施形態(第1例)と同様である。
検索処理部466がコンポジットグリフを構成する各グリフ(シンプルグリフのときとコンポジットグリフのときがある)の第2検索テーブルTBL2からの取得に成功したときは(S350−YES)、グリフ判定部468は、そのグリフがシンプルグリフであるか否かを確認する(S360)。シンプルグリフのときは、グリフ判定部468は、そのグリフをシンプルグリフ描画部482に渡す。シンプルグリフ描画部482は、第1実施形態と同様にシンプルグリフの文字描画処理を実行して各シンプルグリフの部分イメージを生成する(S374)。
シンプルグリフでない(つまりコンポジットグリフ)のときは、グリフ判定部468は、そのグリフをコンポジットグリフ描画部484に渡す。コンポジットグリフ描画部484は、この第2実施形態(第2例)のコンポジットグリフの文字描画処理を実行することで、そのコンポジットグリフを構成する各コンポジットグリフの部分イメージを生成する処理に移行する(S364)。
検索処理部466は、コンポジットグリフを構成するグリフの第2検索テーブルTBL2からの取得に失敗したときは(S350−NO)、第1検索テーブルTBL1から取得する(S352)。ここでは、取り敢えず、コンポジットグリフを構成するコンポジットグリフが第1検索テーブルTBL1から取得できるものとして説明を続ける。
検索処理部466は、そのグリフをコンポジットグリフ描画部484に渡す。コンポジットグリフ描画部484は、この第2実施形態(第2例)のコンポジットグリフの文字描画処理を実行することで、そのコンポジットグリフを構成する各コンポジットグリフの部分イメージを生成する処理に移行する(S354)。コンポジットグリフ描画部484によるそのコンポジットグリフの描画展開後に、登録処理部446は、そのコンポジットグリフを第2検索テーブルTBL2に登録する(S356)。
描画実行部480は、描画展開した各シンプルグリフのイメージデータを合成用バッファのそれぞれ対応する位置に描画することで部品イメージを合成する(S380)。
第2実施形態(第2例)では、コンポジットグリフを構成するコンポジットグリフの文字描画処理後には第2検索テーブルTBL2にコンポジットグリフを登録するので(S356)で、その後に同じコンポジットグリフの文字描画処理が必要になったら、第1検索テーブルTBL1ではなく登録数の少ない第2検索テーブルTBL2からグリフが取得される(S340,S350−YES)。したがって、第2実施形態(第2例)の方が第2実施形態(第1例)よりも検索効率が向上する。グリフ検索時間が第1例よりも縮され、描画処理時間がさらに短縮される。
[適用例:第2実施形態(第2例)]
図15〜図15Aは、第2実施形態(第2例)の適用例を説明する図である。ここで、図15は、この適用例で使用する印刷データを示す図である。図15Aは、この適用例における第1検索テーブルTBL1と第2検索テーブルTBL2の登録情報の例を示す図である。なお、この適用例で示している各グリフの例は、第2実施形態(第2例)の具体的な説明のために使用している擬似的なもの(擬似コード)であり、実際のものと同じか異なるかは無視する。
図15に示すように、ここで適用する印刷データは、図12に示した第2実施形態(第1例)の適用例の印刷データに対して、「 Glyph 20000」に関する文字描画コマンドが複数存在するように変形している点が異なる。
1つ目のコマンド「Draw (100,120) 10pt <20000> 」でのコンポジットグリフ文字描画処理(S294)で、画像処理部350Cは、コンポジットグリフ「 Glyph 20000」を構成するコンポジットグリフ「 Glyph 54736」を第2検索テーブルTBL2に追加する(S356)。これによって、第2検索テーブルTBL2には、図15A(3)に示すように、「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」,「 Glyph 54736」が登録される。
したがって、2つ目のコマンド「Draw (100,180) 10pt <20000> 」でのコンポジットグリフ文字描画処理(S294)で、コンポジットグリフ「 Glyph 20000」を構成するコンポジットグリフ「 Glyph 54736」を描画するとき、画像処理部350Cは、第2検索テーブルTBL2からコンポジットグリフ「 Glyph 54736」のデータを取得する。ステップS350−NOの系統での登録数の多い第1検索テーブルTBL1からの取得を実行せずに済み、検索効率が向上する。
[適用例:第2実施形態(第3例)]
図16〜図16Bは、第2実施形態(第3例)の適用例を説明する図である。ここで、図16は、この適用例で使用する印刷データを示す図である。図16Aは、図16に示す印刷データで使用されているコンポジットグリフの構造を説明する図である。図16Bは、この適用例における第1検索テーブルTBL1と第2検索テーブルTBL2の登録情報の例を示す図である。なお、この適用例で示している各グリフの例は、第2実施形態(第2例)の具体的な説明のために使用している擬似的なもの(擬似コード)であり、実際のものと同じか異なるかは無視する。
第2実施形態(第3例)の適用例は、処理対象のコンポジットグリフの中に、複数のコンポジットグリフを構成要素に持つもの(典型的には2つのコンポジットグリフを構成要素とするもの)が混在している場合である。以下では、図14に示した第2実施形態(第2例)のコンポジットグリフの文字描画処理を適用する場合で説明する。図示しないが、図11に示した第2実施形態(第1例)のコンポジットグリフの文字描画処理を適用してもよい。
この適用例では、図16に示すような印刷データ(擬似コード)を描画展開する場合で説明する。図16のトゥルータイプフォントのグリフ「 Glyph 20002」,「 Glyph 20003」,「 Glyph 20004」は、図16Aに示すようなコンポジット構造を持つ。コンポジットグリフ「 Glyph 20002」は、2つのシンプルグリフ「 Glyph 65607」,「 Glyph 65681」の組合せで構成されている。コンポジットグリフ「 Glyph 20003」は、2つのシンプルグリフ「 Glyph 66257」,「 Glyph 65681」の組合せで構成されている。コンポジットグリフ「 Glyph 20004」は、2つのコンポジットグリフ「 Glyph 20002」,「 Glyph 20003」の組合せで構成されている。
図10に示す印刷データが、図1に示したホスト側装置2のプリンタドライバにより生成され、インタフェース部230および伝送路9を経て印刷装置3のインタフェース部330により受信される。
印刷装置3においては、描画展開処理部として機能する画像処理部350Cは、図4に示した処理手順に従ってページごとに、描画展開処理を実行する。
第2実施形態(第2例)と同様に、印刷データに含まれる全てのグリフの定義コマンド(「 Glyph 20004」まで)について順次実行する。
この時点では、第1検索テーブルTBL1には、図16B(1)に示すように、「 Glyph 65607」,「 Glyph 65681」,「 Glyph 20003」,「 Glyph 66257」,「 Glyph 20003」,「 Glyph 20004」が登録される。第2検索テーブルTBL2には、図16B(2)に示すように、「 Glyph 65607」,「 Glyph 65681」,「 Glyph 66257」が登録される。
画像処理部350Cは、図16に示す印刷データの次のコマンド「Draw (100,120) 10pt <20004> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,120)の位置に10ptの大きさで「 Glyph 20004」を描画するコマンドであるため、画像処理部350Cは、「文字描画コマンド」の処理のために、図8に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Cは、第1検索テーブルTBL1を検索して「 Glyph 20004」のデータを取得する(S272)。「 Glyph 20004」はコンポジットグリフであるため(290−YES)、画像処理部350Cは、図14に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Cは先ず合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各グリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 20004」を構成する2つのコンポジットグリフ「 Glyph 20002」,「 Glyph 20003」の内のたとえば「ID: 20002」とその配置情報を最初に取得する。「Glyph 20002」は、「 Glyph 20004」の左上隅に配置する、という情報が得られる。
画像処理部350Cは、第2検索テーブルTBL2を検索してグリフ「 Glyph 20002」の取得を試みる(S340)。この時点では、グリフ「 Glyph 20002」が第2検索テーブルTBL2には未登録であり、取得は失敗する(S350−NO)。このため、画像処理部350Cは、第1検索テーブルTBL1を検索してグリフ「 Glyph 20002」の取得を試みる(S352)。第1検索テーブルTBL1には登録されているので取得に成功する。
画像処理部350Cは、コンポジットグリフ「 Glyph 20002」について、第2実施形態(第2例)のコンポジットグリフの文字描画処理を実行することで、コンポジットグリフ「 Glyph 20002」を構成する各シンプルグリフの部分イメージを生成して合成することで「 Glyph 20002」の合成イメージを得る(S354)。さらに、画像処理部350Cは、コンポジットグリフ「 Glyph 20004」を構成するコンポジットグリフ「 Glyph 20002」を第2検索テーブルTBL2に追加する(S356)。さらに、コンポジットグリフ「 Glyph 20002」の合成イメージを「 Glyph 20004」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S380)。
次に画像処理部350Cは、残りの「ID: 20003」とその配置情報を取得する。「Glyph 20003」は、「 Glyph 20002」の下に配置する、という情報が得られる。
画像処理部350Cは、第2検索テーブルTBL2を検索してグリフ「 Glyph 20003」の取得を試みる(S340)。この時点では、グリフ「 Glyph 20003」が第2検索テーブルTBL2には未登録であり、取得は失敗する(S350−NO)。このため、画像処理部350Cは、第1検索テーブルTBL1を検索してグリフ「 Glyph 20003」の取得を試みる(S352)。第1検索テーブルTBL1には登録されているので取得に成功する。
画像処理部350Cは、コンポジットグリフ「 Glyph 20003」について、第2実施形態(第2例)のコンポジットグリフの文字描画処理を実行することで、コンポジットグリフ「 Glyph 20003」を構成する各シンプルグリフの部分イメージを生成して合成することで「 Glyph 20003」の合成イメージを得る(S354)。さらに、画像処理部350Cは、コンポジットグリフ「 Glyph 20004」を構成するコンポジットグリフ「 Glyph 20003」を第2検索テーブルTBL2に追加する(S356)。さらに、コンポジットグリフ「 Glyph 20003」の合成イメージを「 Glyph 20004」の合成用バッファ上の「配置情報」に従った位置に貼り付ける(S380)。これによって、コンポジットグリフ「 Glyph 20000」の合成された画像が得られる。
そして、画像処理部350Cは、合成用バッファにて合成したコンポジットグリフ「 Glyph 20004」の合成イメージデータ(合成画像)をページバッファの座標(100,120)の位置に貼り付ける(S298)。以上により、図16に示す印刷データに基づく文字描画処理は完了する。
第2検索テーブルTBL2には、図16B(3)に示すように、「 Glyph 65607」,「 Glyph 65681」,「 Glyph 66257」,「 Glyph 20002」,「 Glyph 20003」が登録される。したがって、この後に、同じコンポジットグリフ「 Glyph 20002」,「 Glyph 20002」の文字描画の際には、画像処理部350Cは、第2検索テーブルTBL2からこれらのコンポジットグリフ「 Glyph 20002」,「 Glyph 20002」のデータを取得する。ステップS350−NOの系統での登録数の多い第1検索テーブルTBL1からの取得を実行せずに済み、検索効率が向上する。
<描画展開処理:第3実施形態>
以下に、第3実施形態の描画展開処理を説明する。第3実施形態の描画展開処理は、第1〜第2実施形態の仕組みをキャッシュ検索を利用した文字描画処理と併用する点に特徴がある。キャッシュ機能が効果的に機能するときはキャッシュ検索を適用して高速に文字描画処理を実行し、キャッシュ機能が効果的でないときは第1〜第2実施形態を適用することで、全体として、より高速な文字描画処理を実現するものである。以下では、代表して、第1実施形態との組合せで説明する。
[装置構成]
図17は、第3実施形態の画像処理部350Dの構成例を示す図である。第3実施形態の画像処理部350Dは、第1実施形態の画像処理部350Aをベースに、キャッシュ機能用の機能部を備える。ここでは、キャッシュデータの記憶領域も画像処理部350Dに含むものとして示すが、このことは必須ではなく、一般的には、前述のように、ディスク装置380やRAM312がその記憶領域として利用される。
キャッシュ機能用の機能部としては、キャッシュ処理用のデータを処理するキャッシュデータ処理部とキャッシュデータを記憶するキャッシュ記憶部に大別される。
画像処理部350Dは、キャッシュデータ処理部として、文字キャッシュ判定部610、部品キャッシュ判定部620を備える。画像処理部350Dは、キャッシュ記憶部として、文字キャッシュ記憶部630、部品キャッシュ記憶部640を備える。
文字キャッシュ判定部610は、入力された文字がシンプルグリフであるときに、その文字が文字キャッシュ記憶部630に登録されるべきグリフであるか否かやそのグリフが既に文字キャッシュ記憶部630に登録されているか否かを確認する。
部品キャッシュ判定部620は、入力されたグリフがコンポジットグリフであるとき、そのコンポジットグリフを構成するグリフが部品キャッシュ記憶部640に登録されるべきグリフであるか否かやそのグリフが既に部品キャッシュ記憶部640に登録されているか否かを確認する。
画像処理部350Dは、これらキャッシュ機能用の機能部と第1実施形態の画像処理部350Aの機能部との協調処理により、文字のフォントデータから、その文字のビットマップデータを生成したり、その文字を形成するグリフのビットマップデータを生成したりする。
文字キャッシュ記憶部630は、各グリフについて、ビットマップデータとキャッシュ登録情報を記憶している。本実施形態では、キャッシュ登録情報には、少なくとも、フォント名、グリフを特定する識別子(ID)、および文字サイズを含む。
画像処理部350Dは、入力されたグリフの文字描画処理が完了すると一時的にそのグリフのビットマップデータを文字キャッシュ記憶部630に記憶し、同じグリフの描画処理時にはそのキャッシュデータを出力データとして利用する。
部品キャッシュ記憶部640は、各部品グリフについて、ビットマップデータとキャッシュ登録情報を記憶している。本実施形態では、キャッシュ登録情報には、少なくとも、フォント名、部品グリフを特定する識別子(ID)、および文字サイズを含む。
画像処理部350Dは、入力されたグリフがコンポジットグリフである場合に、それを構成する部品グリフの文字描画処理が完了すると一時的にその部品グリフのビットマップデータを部品キャッシュ記憶部640に記憶し、同じ部品グリフの描画処理時にはそのキャッシュデータを出力データとして利用する。
[文字描画コマンド実行処理:第3実施形態]
図18は、第3実施形態の文字描画コマンド実行処理(S260)の処理手順の詳細を説明するフローチャートである。第1実施形態と同様の処理ステップには、第1実施形態と同様のステップ番号を付す。
第3実施形態の文字描画コマンド実行処理(S260)では、ステップS272までは第1実施形態と同様である。
描画対象のグリフを検索処理部466が第1検索テーブルTBL1から取得したら(S272)、文字キャッシュ判定部610は、そのグリフのキャッシュデータが文字キャッシュ記憶部630に登録されているか否かを判定する(S280)。キャッシュ登録があるときは(S280−YES)、画像処理部350Dは、対応するキャッシュデータを文字キャッシュ記憶部630から読み出して(S282)、ページバッファの決められた配置位置に描画する(S298)。
キャッシュ登録がないときは(S280−NO)、画像処理部350Dは、第1実施形態と同様に、そのグリフがコンポジットグリフであるのか否かを判定して、その結果に応じた描画処理を実行する(S290〜S294)。その後、生成した文字のイメージデータを文字キャッシュ記憶部630に登録するとともに(S296)、ページバッファの決められた配置位置に描画し(S298)、文字描画登録コマンド実行処理を完了させる。
[コンポジットグリフ文字描画処理:第3実施形態]
図19は、第3実施形態のコンポジットグリフ文字描画処理(S294)の処理手順の詳細を説明するフローチャートである。
第3実施形態のコンポジットグリフ文字描画処理(S294)では、ステップS340までは第1実施形態と同様である。
検索処理部466は、第2検索テーブルTBL2から描画対象の各部品グリフのデータを取得して部品キャッシュ判定部620に渡す(S340)。ここでの「各グリフ」は、第1実施形態との組合せのときはシンプルグリフのみであり、第2実施形態との組合せのときはシンプルグリフのときとコンポジットグリフのときがある。
部品キャッシュ判定部620は、その部品グリフのキャッシュデータ(各グリフの部分イメージ)が部品キャッシュ記憶部640に登録されているか否かを判定する(S342)。キャッシュ登録(エントリ)があるときは(S342−YES)、画像処理部350Dは、対応するキャッシュデータを部品キャッシュ記憶部640から読み出して(S344)、その各グリフの部分イメージを合成用バッファのそれぞれ対応する位置に描画することで部品イメージを合成する(S380)。
キャッシュ登録がないときは(S342−NO)、シンプルグリフ描画部482は、シンプルグリフの描画展開を実行してその部分イメージを生成し(S374)、生成した部分イメージを部品キャッシュ記憶部640に登録する(S376)。合成部526は、シンプルグリフ描画部482が描画展開した各グリフの部分イメージを合成用バッファのそれぞれ対応する位置に描画することで部品イメージを合成する(S380)。
[適用例:第3実施形態]
図20〜図20Bは、第3実施形態の適用例を説明する図である。ここで、図20は、この適用例で使用する印刷データを示す図である。図20Aは、この適用例における文字キャッシュ記憶部630の登録情報の例を示す図である。図20Bは、この適用例における部品キャッシュ記憶部640の登録情報の例を示す図である。図20に示す印刷データで使用されているコンポジットグリフの構造は図10Aに示したものと同じである。なお、この適用例で示している各グリフの例は、第3実施形態の具体的な説明のために使用している擬似的なもの(擬似コード)であり、実際のものと同じか異なるかは無視する。
図20に示す印刷データが、図1に示したホスト側装置2のプリンタドライバにより生成され、インタフェース部230および伝送路9を経て印刷装置3のインタフェース部330により受信される。
印刷装置3においては、描画展開処理部として機能する画像処理部350Dは、図4に示した処理手順に従ってページごとに、描画展開処理を実行する。
第1実施形態と同様に、印刷データに含まれる全てのグリフの定義コマンド(「 Glyph 66257」まで)について順次実行する。
この時点では、第1検索テーブルTBL1には、図10B(1)に示すように、「 Glyph 54596」,「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 54736」,「 Glyph 66257」が登録される。第2検索テーブルTBL2には、図10B(2)に示すように、「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」,「 Glyph 66257」が登録される。また、図20A(1)に示すように、文字キャッシュ記憶部630には登録済みの文字キャッシュは存在しないし、図20B(1)に示すように、部品キャッシュ記憶部640には登録済みの部品キャッシュは存在しない。
*「Draw (100,100) 10pt <54596> 」の処理:
画像処理部350Dは、図20に示す印刷データの次のコマンド「Draw (100,100) 10pt <54596> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,100)の位置に10ptの大きさで「 Glyph 54596」を描画するコマンドであるため、画像処理部350Dは、「文字描画コマンド」の処理のために、図18に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Dは、第1検索テーブルTBL1を検索して「 Glyph 54596」のデータを取得し(S272)、さらに描画パラメータを取得する(S274)。ここでは、フォントの大きさ指定10ptが取得される。
トゥルータイプフォントであるので、文字キャッシュ判定部610は、そのグリフのキャッシュデータが文字キャッシュ記憶部630に登録されているか否かを判定する(S280)。この時点では、文字キャッシュが空なので(S280−NO)、画像処理部350Dは、グリフがコンポジットグリフであるのか否かを判定する(S290)。「 Glyph 54596」はコンポジットグリフであるため(290−YES)、画像処理部350Dは、図19に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Dは先ず合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各グリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 54596」を構成する3つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」の内のたとえば「ID: 65607」とその配置情報を最初に取得する。「 Glyph 65607」は「 Glyph 54596」の左上に配置するという情報が得られる。
画像処理部350Dは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 65607」のデータを取得する(S340)。部品キャッシュ判定部620は、その部品グリフのキャッシュデータが部品キャッシュ記憶部640に登録されているか否かを判定する(S342)。この時点では、部品キャッシュ記憶部640が空なので(S342−NO)、シンプルグリフ描画部482は、シンプルグリフ「 Glyph 65607」の描画展開を実行して部分イメージを生成し(S374)、生成した部分イメージを部品キャッシュ記憶部640に登録する(S376)。合成部526は、シンプルグリフ描画部482が描画展開したシンプルグリフ「 Glyph 65607」の部分イメージを合成用バッファの左上に貼り付ける(S380)。
ここでは、10ptの大きさで「 Glyph 65607」のビットマップデータが生成され、図20B(2)に示すように、「ID: 65607」のビットマップデータおよび生成時のサイズ10ptが部品キャッシュ記憶部640に追加される。
さらに画像処理部350Dは、コンポジットグリフ「 Glyph 54596」を構成する残りのグリフ「 Glyph 65650」,「 Glyph 65681」についても同様に処理を実行する。これら残りも全てシンプルグリフであり、部品キャッシュ記憶部640へのキャッシュ登録がないので(S342−NO)、画像処理部350Dは、第2検索テーブルTBL2から検索することで、それそれの部分イメージを生成してコンポジットグリフ「 Glyph 54596」の合成された画像を生成するとともに、このときに生成した各部分イメージを部品キャッシュ記憶部640に登録する(S374〜S380)。ここでは、10ptの大きさで「 Glyph 65650」,「 Glyph 65681」のビットマップデータが生成され、図20B(3)に示すように、「ID: 65650」,「ID: 65681」の各ビットマップデータおよび生成時のサイズ10ptが部品キャッシュ記憶部640に追加される。
画像処理部350Dは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54596」の合成イメージデータ(合成画像)を文字キャッシュ記憶部630に登録するとともに(S296)、ページバッファの座標(100,100)の位置に貼り付け(S298)、文字描画登録コマンド実行処理を完了させる。この時点では、図20A(2)に示すように、コンポジットグリフ「 Glyph 54596」のビットマップデータおよび生成時のサイズ10ptが文字キャッシュ記憶部630に追加される。
*「Draw (100,120) 10pt <54736> 」の処理:
画像処理部350Dは、次のコマンド「Draw (100,120) 10pt <54736> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,120)の位置に10ptの大きさで「 Glyph 54736」を描画するコマンドであるため、画像処理部350Dは、「文字描画コマンド」の処理のために、図18に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Dは、第1検索テーブルTBL1を検索して「 Glyph 54736」のデータを取得し(S272)、さらに描画パラメータを取得する(S274)。ここでは、フォントの大きさ指定10ptが取得される。
トゥルータイプフォントであるので、文字キャッシュ判定部610は、そのグリフのキャッシュデータが文字キャッシュ記憶部630に登録されているか否かを判定する(S280)。この時点では、図20A(2)に示すように、「ID: 54736」およびサイズ10ptに対応したエントリがないので(S280−NO)、画像処理部350Dは、グリフがコンポジットグリフであるのか否かを判定する(S290)。「 Glyph 54736」はコンポジットグリフであるため(290−YES)、画像処理部350Dは、図19に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Dは先ず10ptの大きさに対応した合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各グリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 54736」を構成する2つのシンプルグリフ「 Glyph 66257」,「 Glyph 65681」の内のたとえば「ID: 66257」とその配置情報を最初に取得する。「 Glyph 66257」は「 Glyph 54736」の左上に配置するという情報が得られる。
画像処理部350Dは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 66257」のデータを取得する(S340,S350−YES)。部品キャッシュ判定部620は、その部品グリフのキャッシュデータが部品キャッシュ記憶部640に登録されているか否かを判定する(S342)。この時点では、部品キャッシュ記憶部640は図20B(3)に示すように、「ID: 66257」およびサイズ10ptに対応したエントリがないので(S342−NO)、シンプルグリフ描画部482は、シンプルグリフ「 Glyph 66257」の描画展開を実行して部分イメージを生成し(S374)、生成した部分イメージを部品キャッシュ記憶部640に登録する(S376)。合成部526は、シンプルグリフ描画部482が描画展開したシンプルグリフ「 Glyph 66257」の部分イメージを合成用バッファの左上に貼り付ける(S380)。
ここでは、10ptの大きさで「 Glyph 66257」のビットマップデータが生成され、図20B(4)に示すように、「ID: 66257」のビットマップデータおよび生成時のサイズ10ptが部品キャッシュ記憶部640に追加される。
さらに画像処理部350Dは、コンポジットグリフ「 Glyph 54736」を構成する残りのグリフ「 Glyph 65681」についても同様に処理を実行する。処理対象のシンプルグリフ「 Glyph 65681」のグリフIDと配置情報を取得する(S320,S330)。ここでは、「ID: 65681」とその配置情報を最初に取得する。「 Glyph 65681」は「 Glyph 54736」の右下に配置するという情報が得られる。
画像処理部350Dは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 65681」のデータを取得する(S340)。部品キャッシュ判定部620は、その部品グリフのキャッシュデータが部品キャッシュ記憶部640に登録されているか否かを判定する(S342)。この時点では、部品キャッシュ記憶部640は図20B(4)に示すように、「ID: 65681」およびサイズ10ptに対応したエントリがあるので(S342−YES)、画像処理部350Dは、「ID: 65681」およびサイズ10ptのビットマップデータを部品キャッシュ記憶部640から読み出して(S344)、合成用バッファの右下に貼り付けることで部品イメージを合成する(S380)。
画像処理部350Dは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54736」の合成イメージデータ(合成画像)を文字キャッシュ記憶部630に登録するとともに(S296)、ページバッファの座標(100,120)の位置に貼り付け(S298)、文字描画登録コマンド実行処理を完了させる。この時点では、図20A(3)に示すように、コンポジットグリフ「 Glyph 54736」のビットマップデータおよび生成時のサイズ10ptが文字キャッシュ記憶部630に追加される。
*「Draw (100,140) 10pt <54596> 」の処理:
画像処理部350Dは、図20に示す印刷データの次のコマンド「Draw (100,140) 10pt <54596> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(100,140)の位置に10ptの大きさで「 Glyph 54596」を描画するコマンドであるため、画像処理部350Dは、「文字描画コマンド」の処理のために、図18に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Dは、第1検索テーブルTBL1を検索して「 Glyph 54596」のデータを取得し(S272)、さらに描画パラメータを取得する(S274)。ここでは、フォントの大きさ指定10ptが取得される。
トゥルータイプフォントであるので、文字キャッシュ判定部610は、そのグリフのキャッシュデータが文字キャッシュ記憶部630に登録されているか否かを判定する(S280)。この時点では、図20A(3)に示すように、「ID: 54596」およびサイズ10ptに対応したエントリがあるので(S280−YES)、画像処理部350Dは、「ID: 54596」およびサイズ10ptのビットマップデータを文字キャッシュ記憶部630から読み出して(S344)、ページバッファの座標(100,140)に貼り付け(S298)、文字描画登録コマンド実行処理を完了させる。
*「Draw (120,100) 12pt <54596> 」の処理:
画像処理部350Dは、図20に示す印刷データの次のコマンド「Draw (120,100) 12pt <54596> 」を読み込み(S222:図4)、図5に示すコマンド実行処理(S230)へ進む。このコマンドは、座標(120,100)の位置に12ptの大きさで「 Glyph 54596」を描画するコマンドであるため、画像処理部350Dは、「文字描画コマンド」の処理のために、図18に示す文字描画コマンド実行処理(S260)へ進む。
画像処理部350Dは、第1検索テーブルTBL1を検索して「 Glyph 54596」のデータを取得し(S272)、さらに描画パラメータを取得する(S274)。ここでは、フォントの大きさ指定12ptが取得される。
トゥルータイプフォントであるので、文字キャッシュ判定部610は、そのグリフのキャッシュデータが文字キャッシュ記憶部630に登録されているか否かを判定する(S280)。この時点では、図20A(3)に示すように、「ID: 54596」およびサイズ12ptに対応したエントリがないので(S280−NO)、画像処理部350Dは、グリフがコンポジットグリフであるのか否かを判定する(S290)。「 Glyph 54596」はコンポジットグリフであるため(290−YES)、画像処理部350Dは、図19に示すコンポジットグリフの文字描画処理を実行することになる(S294)。
コンポジットグリフ文字描画処理(S294)に入ると、画像処理部350Dは先ず12ptの大きさに対応した合成用バッファを用意し(S310)、処理対象のコンポジットグリフを構成する各グリフのグリフIDと配置情報を順次取得する(S320,S330)。ここでは、コンポジットグリフ「 Glyph 54596」を構成する3つのシンプルグリフ「 Glyph 65607」,「 Glyph 65650」,「 Glyph 65681」の内のたとえば「ID: 65607」とその配置情報を最初に取得する。「 Glyph 65607」は「 Glyph 54596」の左上に配置するという情報が得られる。
画像処理部350Dは、第2検索テーブルTBL2を検索してシンプルグリフ「 Glyph 65607」のデータを取得する(S340)。部品キャッシュ判定部620は、その部品グリフのキャッシュデータが部品キャッシュ記憶部640に登録されているか否かを判定する(S342)。この時点では、「ID: 65607」およびサイズ12ptに対応したエントリがないので(S342−NO)、シンプルグリフ描画部482は、シンプルグリフ「 Glyph 65607」の描画展開を実行して部分イメージを生成し(S374)、生成した部分イメージを部品キャッシュ記憶部640に登録する(S376)。合成部526は、シンプルグリフ描画部482が描画展開したシンプルグリフ「 Glyph 65607」の部分イメージを合成用バッファの左上に貼り付ける(S380)。
ここでは、12ptの大きさで「 Glyph 65607」のビットマップデータが生成され、図20B(5)に示すように、「ID: 65607」のビットマップデータおよび生成時のサイズ12ptが部品キャッシュ記憶部640に追加される。
さらに画像処理部350Dは、コンポジットグリフ「 Glyph 54596」を構成する残りのグリフ「 Glyph 65650」,「 Glyph 65681」についても同様に処理を実行する。これら残りも全てシンプルグリフであり、12ptでは部品キャッシュ記憶部640へのキャッシュ登録がないので(S342−NO)、画像処理部350Dは、第2検索テーブルTBL2から検索することで、それそれの部分イメージを生成してコンポジットグリフ「 Glyph 54596」の合成された画像を生成するとともに、このときに生成した各部分イメージを部品キャッシュ記憶部640に登録する(S374〜S380)。ここでは、12ptの大きさで「 Glyph 65650」,「 Glyph 65681」のビットマップデータが生成され、図20B(6)に示すように、「ID: 65650」,「ID: 65681」の各ビットマップデータおよび生成時のサイズ12ptが部品キャッシュ記憶部640に追加される。
画像処理部350Dは、合成用バッファにて合成したコンポジットグリフ「 Glyph 54596」の合成イメージデータ(合成画像)を文字キャッシュ記憶部630に登録するとともに(S296)、ページバッファの座標(120,100)の位置に貼り付け(S298)、文字描画登録コマンド実行処理を完了させる。この時点では、図20A(4)に示すように、コンポジットグリフ「 Glyph 54596」のビットマップデータおよび生成時のサイズ12ptが文字キャッシュ記憶部630に追加される。
以上により、図20に示す印刷データに基づく文字描画処理は完了する。
この第3実施形態の適用例では、キャッシュ検索による文字描画処理と第1実施形態で示したグリフ検索による文字描画処理を組み合わせているので、キャッシュ登録があるときはキャッシュ検索による文字描画の高速処理が機能し、キャッシュ登録がないときは第1実施形態のグリフ検索による文字描画の高速処理が機能する。文字のキャッシュ登録がないときは、第1実施形態との組合せのないキャッシュ検索ではキャッシュ機能なしの場合と同様に文字描画処理が遅くなってしまうが、この第3実施形態では、第1実施形態でのグリフ検索が機能するので処理低下が抑制される。
<電子計算機による構成>
図21は、グリフ検索による文字描画処理の制御機構の他の構成例を示すブロック図である。ここでは、パーソナルコンピュータなどの電子計算機を利用して、ソフトウェアを実行するマイクロプロセッサなどから構築される印刷装置3のグリフ検索による文字描画処理の制御機構のより現実的なハードウェア構成を示している。
すなわち、本実施形態において、グリフ検索による文字描画処理に関わる制御処理を行なう印刷装置3の制御機構の仕組みは、ハードウェア処理回路により構成することに限らず、その機能を実現するプログラムコードに基づき電子計算機(コンピュータ)を用いてソフトウェア的に実現される。よって、本実施形態に係る仕組みを、電子計算機(コンピュータ)を用いてソフトウェアで実現するために好適なプログラムあるいはこのプログラムを格納したコンピュータ読取可能な記憶媒体が発明として抽出される。ソフトウェアにより実行させる仕組みとすることで、ハードウェアの変更を伴うことなく、処理手順などが容易に変更されることとなる。
前述の一連のグリフ検索による文字描画処理はハードウェアまたはソフトウェアの単独に限らずその両者の複合構成によっても実現され得る。ソフトウェアによる処理を実行する場合、処理手順を示したプログラムを、ハードウェアに組み込まれたコンピュータ内の記憶媒体に組み込んで(インストールして)実行させたり、各種処理が実行可能な汎用の電子計算機にプログラムを組み込んで実行させる。
グリフ検索による文字描画処理機能をコンピュータに実行させるプログラムは、CD−ROMなどの記録媒体を通じて配布される。また、このプログラムは、CD−ROMではなくFDに格納されてもよい。また、MOドライブを設け、MOに前記プログラムを格納してもよく、またフラッシュメモリなどの不揮発性の半導体メモリカードなど、その他の記録媒体にプログラムを格納してもよい。さらに、ソフトウェアを構成するプログラムは、記録媒体を介して提供されることに限らず、有線または無線などの通信網を介して提供されてもよい。たとえば、他のサーバなどからインターネットなどのネットワークを経由してプログラムをダウンロードして取得したり、更新したりしてもよい。さらに、グリフ検索による文字描画処理を行なう機能を実現するプログラムコードを記述したファイルとしてプログラムが提供されるが、この場合、一括のプログラムファイルとして提供されることに限らず、コンピュータで構成されるシステムのハードウェア構成に応じて、個別のプログラムモジュールとして提供されてもよい。
たとえば、コンピュータシステム900は、中央制御部910、記憶部912、操作部914、図示を割愛したその他の周辺部材を有している。
中央制御部910は、CPU(Central Processing Unit )やマイクロプロセッサ(microprocessor)で構成される。この中央制御部910は、コンピュータが行なう演算と制御の機能を超小型の集積回路に集約させたCPUを代表例とする電子計算機の中枢をなすものと同様のものである。
記憶部912は、読出専用の記憶部であるROM(Read Only Memory)、または随時読出し・書込みが可能なメモリであるRAM(Random Access Memory)などを具備する。ROMにはグリフ検索による文字描画処理機能用の制御プログラムなどが格納される。操作部914は、利用者による操作を受け付けるためのユーザインタフェースである。
コンピュータシステム900の制御系としては、メモリカードなどの図示を割愛した外部記録媒体を挿脱可能に構成し、またインターネットなどの通信網との接続が可能に構成するとよい。このためには、制御系は、中央制御部910や記憶部912の他に、可搬型の記録媒体の情報を読み込むメモリ読出部920や外部との通信インタフェース手段としての通信I/F922を備えるようにするとよい。メモリ読出部920を備えることで外部記録媒体からプログラムのインストールや更新に対応する。通信I/F922を備えることで、通信網を介しプログラムのインストールや更新に対応する。基本的なグリフ検索による文字描画処理の仕組みは前記実施形態と同様である。
ここでは、印刷装置3の制御機構をコンピュータにてソフトウェア上で実現する構成例で説明しているが、本実施形態のグリフ検索による文字描画処理を実現するための印刷装置3の制御機構の各部(機能ブロックを含む)の具体的手段は、ハードウェア、ソフトウェア、通信手段、これらの組み合わせ、その他の手段を用いることができ、このこと自体は当業者において自明である。また、機能ブロック同士が複合して1つの機能ブロックに集約されてもよい。また、コンピュータにプログラム処理を実行させるソフトウェアは、組合せの態様に応じて分散してインストールされる。
以上、本発明について実施形態を用いて説明したが、本発明の技術的範囲は前記実施形態に記載の範囲には限定されない。発明の要旨を逸脱しない範囲で前記実施形態に多様な変更または改良を加えることができ、そのような変更または改良を加えた形態も本発明の技術的範囲に含まれる。
また、前記の実施形態は、クレーム(請求項)にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組合せの全てが発明の解決手段に必須であるとは限らない。前述した実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜の組合せにより種々の発明を抽出できる。実施形態に示される全構成要件から幾つかの構成要件が削除されても、効果が得られる限りにおいて、この幾つかの構成要件が削除された構成が発明として抽出され得る。
たとえば、キャッシュ検索による文字描画と併用する第3実施形態では、文字キャッシュ記憶部630と部品キャッシュ記憶部640の双方を使用して文字と部品文字の双方についてキャッシュ検索を適用したが、文字と部品文字の何れか一方のみについてキャッシュ検索を適用するようにしてもよい。