(57)【特許請求の範囲】
【請求項１】
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得手段と、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得手段と、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定手段と、
前記設定手段で設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成手段と、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換手段と、
前記変換手段で算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得手段と、
前記メモリから読み出した画像データを蓄える前記画像キャッシュと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画手段と、
を備える画像描画装置。
【請求項２】
前記設定手段は、前記画像キャッシュのブロックサイズとブロック数に合わせて、少なくとも前記矩形領域に含まれる前記描画領域を座標変換した領域が、前記画像キャッシュの範囲に収まるように、前記矩形領域の縦と横の画素数を設定することを特徴とする請求項１に記載の画像描画装置。
【請求項３】
前記設定手段は、前記座標変換の倍率に反比例して、前記矩形領域の縦と横の画素数を設定することを特徴とする請求項１または２に記載の画像描画装置。
【請求項４】
前記変換手段は、前記描画領域の水平方向を座標変換した方向と、前記画像キャッシュの水平方向のなす角度の小さい方が４５度を超える場合に、前記描画領域の垂直方向を主走査方向、水平方向を副走査方向として、前記描画領域を被覆する矩形領域を順に選択し、かつ、選択した矩形領域内を走査して画素を選択することを特徴とする請求項１ないし３のいずれか１項に記載の画像描画装置。
【請求項５】
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得ステップと、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得ステップと、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定ステップと、
前記設定ステップで設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成ステップと、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換ステップと、
前記変換ステップで算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得ステップと、
前記メモリから読み出した画像データを前記画像キャッシュに蓄えるステップと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画ステップと、
を備える画像描画方法。
【請求項６】
前記設定ステップは、前記画像キャッシュのブロックサイズとブロック数に合わせて、少なくとも前記矩形領域に含まれる前記描画領域を座標変換した領域が、前記画像キャッシュの範囲に収まるように、前記矩形領域の縦と横の画素数を設定することを特徴とする請求項５に記載の画像描画方法。
【請求項７】
前記設定ステップは、前記座標変換の倍率に反比例して、前記矩形領域の縦と横の画素数を設定することを特徴とする請求項５または６に記載の画像描画方法。
【請求項８】
前記変換ステップは、前記描画領域の水平方向を座標変換した方向と、前記画像キャッシュの水平方向のなす角度の小さい方が４５度を超える場合に、前記描画領域の垂直方向を主走査方向、水平方向を副走査方向として、前記描画領域を被覆する矩形領域を順に選択し、かつ、選択した矩形領域内を走査して画素を選択することを特徴とする請求項５ないし７のいずれか１項に記載の画像描画方法。
【請求項９】
コンピュータに、
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得ステップと、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得ステップと、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定ステップと、
前記設定ステップで設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成ステップと、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換ステップと、
前記変換ステップで算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得ステップと、
前記メモリから読み出した画像データを前記画像キャッシュに蓄えるステップと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画ステップと、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像描画装置に関する。より詳しくは、参照画像を変換して表示画像上の描画領域に表示する画像描画装置、画像描画方法およびプログラムに関する。
【背景技術】
【０００２】
コンピュータグラフィックスでは、参照画像を拡大／縮小、回転などの変換を施して、表示画像上の描画領域に表示することが行われている。動きのある場合などに画面の描画を速くするために、参照画像の変換を高速に行う技術が提案されている。
【０００３】
例えば特許文献１には、ラインベース形式で入力された画像データを、１画像分の画像データ容量よりも小さい容量のバッファメモリに一時記憶させブロックインターリーブ形式で出力する画像処理装置が記載されている。特許文献１の画像処理装置は、バンク単位回転画像データを前記バッファメモリに書き込んで、ブロックインターリーブ形式で出力する回転再配置回路を含む。バンク最終アドレス演算回路は、水平方向入力画素数および垂直方向ＭＣＵ単位画素数に基づきバンク最終アドレスを求める。書き込み回路は、バンク最終アドレスを書き込み開始アドレスとして、バンク開始アドレス方向に書き込みアドレスをデクリメントさせて１バンク分の画像データを書き込む。読み出し回路は、バンク開始アドレスを読み出し開始アドレスとして最終アドレス方向に画像データを読み出す。
【０００４】
特許文献２の画像処理装置では、描画データ解析部は、ソースイメージを解析し、１ピクセルの幅もしくは高さのソースイメージを、そのライン方向に対して垂直方向に並べて拡大したイメージ処理であるかを判定する。描画処理部は、ソースイメージを格納するソースイメージバッファ、１ライン分の画像処理後のイメージを格納するラインバッファおよびデスティネーションイメージバッファを確保し、ラインバッファに１ライン分の描画処理結果を格納し、描画処理結果をライン単位でデスティネーションイメージバッファにコピーすることによりイメージを描画する。
【０００５】
特許文献３には、高速に回転処理する画像装置が提案されている。特許文献３の画像処理装置では、画像入力装置に入力された画像データは画像蓄積装置にデータバスを介して転送され、画像蓄積手段に転送された画像データは画像回転手段の入力バッファメモリにデータバスを介して転送される。入力バッファメモリに転送された画像データはライトアドレス生成手段が生成するライトアドレスに従って画像回転用メモリに入力された後、リードアドレス生成手段によって生成されるリードアドレスに従って出力され、出力バッファメモリに供給される。アドレス切換手段はライトアドレスおよびリードアドレスを切り替えて画像回転用メモリに供給する。出力バッファメモリから出力された画像データはデータバスを介して画像出力手段に転送される。
【０００６】
特許文献４には、原画像を回転を伴う座標変換により変換した仮想的な画像の全部または一部を出力画像として得るための、画像補間方法が記載されている。特許文献４の画像補間方法は、変換画像の第１方向に配置される参照画素の画素値を基礎として第１方向に補間することによって、中間画素の画素値を求める。複数の行に対して同様の動作を繰り返して、中間画素値配列を出力画素の第２方向に得る。そして、出力画素近傍の中間画素値配列の画素値を基礎として出力画素の第２方向について補間することによって、出力画素を得る。
【０００７】
また、特許文献５の２次元データ回転処理装置は、複数ブロックの回転処理を行う場合に、最初に被回転画像データの列方向のブロック書き込みを行い、それ以降は、回転画像データの行方向のブロック読み出しと同時に続くブロックの被回転画像データの列方向のブロック書き込み、回転画像データの列方向のブロック読み出しと同時に続くブロックの被回転画像データの行方向のブロックを書き込む。これらを交互に繰り返すことによって読み出しと書き込みを同時に、しかもブロック画像を連続的に回転処理する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−２２８０７３号公報
【特許文献２】特開２００７−０２６２８５号公報
【特許文献３】特開２００８−２３６０８５号公報
【特許文献４】特開平１１−２５２３５３号公報
【特許文献５】特開平１１−３０６３４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
画像の描画手順について、図２を参照して説明する。ここで、拡大・縮小などの座標変換をする前の元画像を、参照画像と呼ぶ。参照画像は外部メモリに置かれている。参照画像を表示画像に描画するには、図２に示すように、表示画像Ｇ上の描画領域Ｄの輪郭を生成し、生成した輪郭内部の画素Ｐの座標である出力座標（Ｘ，Ｙ）を１画素ずつ走査しながら求めていく。この出力座標を１画素ずつ求める処理を画素生成と呼ぶ。次に、図２の座標変換ｔで示すように、画素生成で生成された出力座標（Ｘ，Ｙ）毎に座標変換マトリクスをかけると、参照画像Ｒ上のある１点Ｐ’の座標、参照座標（Ｘ’，Ｙ’）が求められる。このように、座標変換マトリクスには、出力座標（Ｘ，Ｙ）から、参照座標（Ｘ’，Ｙ’）を算出する値が設定される。座標変換マトリクスは、参照画像Ｒから表示したい画像の形状を求める画像変換のマトリクスの逆行列である。その後、描画処理ｆで示すように、参照画像Ｒの参照座標（Ｘ’，Ｙ’）の位置の画像データを参照画像Ｒのある外部メモリから取得し、表示画像Ｇ上の出力座標（Ｘ，Ｙ）の位置に描画する。以上の画素生成から表示画像への描画までの処理を描画領域Ｄ内部の画素全てに対して行なうと描画処理は完了する。
【００１０】
この画像描画手順において、描画処理ｆの操作時に、外部メモリから参照画像データを１画素ずつ取得するのでは、メモリからデータを転送する時間がかかり、描画速度が遅くなる。そこで、参照画像データを一時保存するためのキャッシュを用意してプリフェッチを行なうことで転送効率を上げたり、そのキャッシュサイズをメモリアドレスが連続にアクセスされるように変更することによって高速に描画ができるように対応していた。
【００１１】
しかし、上述の描画処理では、表示画像Ｇ上の画素生成の順は、描画領域Ｄの形状によらず、一定のブロック単位で、左上から右下へ向けて走査するように固定となっているため、画像の座標変換を行なわず単純に参照画像Ｒを表示画像Ｇへ１対１で描画した場合に比べて、画像を拡大・縮小・回転させた場合は、キャッシュのヒット率が極端に落ちたり、メモリアクセス量が増えることになる。すなわち画像の拡大・縮小、回転などの座標変換に依存して、キャッシュのヒット率が極端に落ちてしまうという問題点があった。これによって、座標変換の形態により、画像の描画速度が落ちてしまい、外部メモリアクセス量も増えてしまうという問題が生じていた。
【００１２】
本発明は、上述の事情に鑑みてなされたもので、キャッシュヒット率を向上し、描画速度を向上する画像描画装置、画像描画方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の第１の観点に係る画像描画装置は、
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得手段と、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得手段と、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定手段と、
前記設定手段で設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成手段と、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換手段と、
前記変換手段で算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得手段と、
前記メモリから読み出した画像データを蓄える前記画像キャッシュと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画手段と、
を備える。
【００１４】
本発明の第２の観点に係る画像描画方法は、
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得ステップと、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得ステップと、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定ステップと、
前記設定ステップで設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成ステップと、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換ステップと、
前記変換ステップで算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得ステップと、
前記メモリから読み出した画像データを前記画像キャッシュに蓄えるステップと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画ステップと、
を備える。
【００１５】
本発明の第３の観点に係るプログラムは、コンピュータに、
表示画像中に参照画像を変換して表示する領域である描画領域を指定する情報を取得する描画領域取得ステップと、
前記描画領域に前記参照画像を変換して表示するための、前記描画領域から前記参照画像への座標変換の情報を取得する座標変換取得ステップと、
前記描画領域を分割して被覆する矩形領域を、前記描画領域から前記参照画像への座標変換で座標変換した領域が、前記参照画像を読み出した画像データを蓄える所定の画像キャッシュの画像上の形に適合するように、前記矩形領域の縦と横の画素数を設定する設定ステップと、
前記設定ステップで設定した縦と横の画素数で前記描画領域を分割して被覆する１以上の前記矩形領域を生成する生成ステップと、
所定の走査方向の順に前記矩形領域を選択し、該選択した矩形領域内の走査方向の順番に選択した画素から前記座標変換によって前記参照画像内の画素位置を算出する変換ステップと、
前記変換ステップで算出した画素位置の画像データを、前記参照画像を記憶しているメモリから読み出す画像取得ステップと、
前記メモリから読み出した画像データを前記画像キャッシュに蓄えるステップと、
前記画像キャッシュから前記画像データを読み出して、前記描画領域の画素に変換する描画ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１６】
本発明の画像描画装置によれば、キャッシュが効率的に使用できるようになることにより、キャッシュヒット率が向上し、参照画像を拡大・縮小、および／または回転して表示させる場合の描画速度が向上する。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態に係る画像描画装置の構成例を示すブロック図である。
【図２】画像の描画手順を説明する図である。
【図３】座標変換を説明する図である。
【図４Ａ】拡大率が１、回転角度が０度の場合の描画ブロックと画像キャッシュアクセスを説明する図である。
【図４Ｂ】描画ブロックを変えずに参照画像を縮小する場合の画像キャッシュアクセスを説明する図である。
【図４Ｃ】描画ブロックを変えずに参照画像を拡大する場合の画像キャッシュアクセスを説明する図である。
【図４Ｄ】描画ブロックを変えずに参照画像を回転する場合の画像キャッシュアクセスを説明する図である。
【図５Ａ】実施の形態に係る画像キャッシュアクセスを説明する図である。
【図５Ｂ】参照画像の縮小に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。
【図５Ｃ】参照画像の拡大に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。
【図５Ｄ】参照画像の回転に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。
【図６】実施の形態１に係る描画ブロックサイズ設定の動作の一例を示すフローチャートである。
【図７】実施の形態１に係る画像生成の動作の一例を示すフローチャートである。
【図８】画像キャッシュ読み出しを説明する図である。
【図９Ａ】走査方向を一定にして参照画像を９０度回転させる場合の画像キャッシュアクセスを説明する図である。
【図９Ｂ】参照画像の９０度回転に合わせて走査方向を変更する場合の画像キャッシュアクセスを説明する図である。
【図１０】実施の形態２における描画領域の座標軸の座標変換と拡大率および回転角度の関係を示す図である。
【図１１】回転角度が小さい場合の描画ブロックと画像キャッシュの関係を示す図である。
【図１２】走査方向を変えずに参照画像を回転させる場合の画像キャッシュアクセスを説明する図である。
【図１３】参照画像の回転角度に合わせて走査方向を変更する場合の画像キャッシュアクセスを説明する図である。
【図１４】実施の形態２に係る描画ブロックサイズ設定の動作の一例を示すフローチャートである。
【図１５】実施の形態２に係る画像生成の動作の一例を示すフローチャートである。
【図１６】本発明の実施の形態に係る画像描画装置のハードウェア構成の例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態について図を参照して説明する。なお、図中同一または相当する部分には同じ符号を付す。
【００１９】
（実施の形態１）
図１は、本発明の実施の形態に係る画像描画装置の構成例を示すブロック図である。本発明の画像描画装置１０は、図１に示すように、描画コマンド発生部１１、輪郭生成部１２、画素生成部１３、座標変換部１４、画像キャッシュ１５、描画処理部１６、表示部１７、外部メモリ２０、レジスタ２１および描画ブロック設定部２２を備える。描画装置１は、例えばマイクロコンピュータ、ＦＰＧＡ（Field Programmable Gate Array）、ＤＳＰ（Digital Signal Processor）または専用の論理回路を備えるＬＳＩで構成することができる。
【００２０】
描画コマンド発生部１１は、表示画像中に表示する参照画像と、参照画像を変換して表示する領域である描画領域を指定する情報を受けて、描画の開始を指示する。描画コマンド発生部１１は、参照画像から描画領域への変換の情報から、描画領域から参照画像へ座標変換する座標変換マトリクスを生成する。描画コマンド発生部１１は、レジスタ２１に座標変換マトリクスを設定し、描画開始命令を輪郭生成部１２に発行することで、画像描画処理が開始される。
【００２１】
描画ブロック設定部２２は、描画処理開始前に、レジスタ２１に設定された座標変換マトリクスを用いて画素生成の描画ブロックの縦と横の画素数を設定する。描画ブロックは、描画領域を１または２以上に分割して被覆する矩形の領域である。描画ブロックが描画領域を被覆するとは、描画ブロックの画素の和集合が、描画領域の画素を含むことをいう。通常は、描画領域の全ての画素を含むが、参照画像に無効な画素がある場合など、描画領域の画素のうち描画ブロックに含まれない画素が存在することがあり得る。一般には、描画ブロック同士は画素が重複することなく描画領域を分割するが、画素が重複していても構わない。描画ブロックの縦と横は、表示画像の走査の方向に沿っている。描画ブロックのサイズの設定については後に詳述する。
【００２２】
輪郭生成部１２は、描画コマンド発生部１１から描画領域を指定する情報を受けて、表示画像上の描画したい領域の輪郭を生成する。輪郭生成部１２は、画素生成部１３に、輪郭座標を送る。画素生成部１３は、輪郭内部の画素を走査して、表示画像中の出力座標を求める。画素生成部１３は、描画ブロック設定部２２が設定した、描画ブロックのサイズを受け取り、そのサイズに従って、１画素ずつ順番に輪郭座標内部の画素の座標を生成し、座標変換部１４に、生成された出力座標データを１画素ずつ送る。
【００２３】
座標変換部１４は、画素生成部１３で生成された出力座標に座標変換マトリクスをかけて参照画像の対応する座標を算出する。また、参照画像の対応する座標の画像データを外部メモリ２０から読み出しを行なう。座標変換部１４は、画像キャッシュ１５にある画像データをチェックし、その参照画像の対応する座標の画像データが画像キャッシュ１５内に無ければ、外部メモリ２０に対して、画像読み出しリクエストを発行する。また、描画処理部１６に対しては、読み出した画像データが保存されるキャッシュ番号とそのキャッシュ内のアドレスで構成されたキャッシュ情報をそれぞれ発行する。
【００２４】
外部メモリ２０は、参照画像の画像データを記憶し、座標変換部１４の指令にしたがって、画像キャッシュ１５に画像データを供給する。
【００２５】
画像キャッシュ１５は、外部メモリ２０から読み出された画像データを保持する。画像キャッシュ１５は、参照画像において縦横が一定の画素数の形状を有するブロックから構成される。画像キャッシュ１５は１または複数のブロックから構成される。画像キャッシュ１５は、外部メモリ２０から、ブロック単位で画像データを読み出して保持する。描画処理部１６は、画像キャッシュ１５から画像データを取り出して、表示する画素の並びを生成する。描画処理部１６は、キャッシュ情報を元に、画像キャッシュ１５をチェックし、画像キャッシュ１５内に描画に必要な画像データがそろったことを確認後、参照画像データを読み出し、描画処理を行い、表示部１７に表示開始命令を発行する。表示部１７は、描画処理部１６で生成された画素の並びを画面に表示する。
【００２６】
画素生成部１３が、出力座標データを発行し、描画処理部１６が描画処理を行なうまでの一連の処理を繰り返し、輪郭生成部１２で生成された輪郭内の全ての画素分の走査が終わり、表示部１７に描画する画像データが全て送られると描画処理を終了する。
【００２７】
前述のとおり、描画ブロック設定部２２は、座標変換マトリクスから描画ブロックの縦と横の画素数を設定する。図３は、座標変換を説明する図である。本実施の形態で言う座標変換はアフィン変換を表し、拡大・縮小、回転および平行移動を組み合わせて１つの座標変換マトリクスで表される。図３に示すように変換前の座標（Ｘ，Ｙ）に、座標変換マトリクスをかけることにより、変換後の座標（Ｘ’，Ｙ’）を得る。座標変換マトリクスのａ，ｂ，ｃ，ｄは、座標を拡大・縮小または回転するための要素であり、ｔｘ，ｔｙは平行移動をするための要素である。この式を座標変換部１４での座標変換にあてはめると、座標（Ｘ，Ｙ）が出力座標（表示画像上の座標）であり、座標（Ｘ’，Ｙ’）が参照画像の座標である。
【００２８】
図１の画素生成部１３は、描画ブロック設定部２２で設定された描画ブロックに従って、描画領域を描画ブロックに分割する。画素生成部１３は、走査の方向に従って描画ブロックを選択し、選択した描画ブロックの中の画素を走査して、表示画像中の出力座標を求める。
【００２９】
本実施の形態の画像描画装置１０では、描画ブロック設定部２２は、描画領域から参照画像への座標変換マトリクスで座標変換した領域が、画像キャッシュ１５の画像上の形に適合するように、描画ブロックの縦と横の画素数を設定する。
【００３０】
図４Ａ〜図５Ｄは、描画ブロックと画像キャッシュの関係を説明する図である。図４Ａ〜図５Ｄでは、図中（ａ）は座標変換マトリクスを表す。ここでは、座標変換の平行移動を省略している。図中、（ｂ）は描画ブロックを示し、（ｃ）は画像キャッシュ１５のブロックを示す。なお、画像キャッシュ１５の１つのブロックは、横１６画素、縦４画素の長方形である。また、図４Ａ〜図４Ｄでは、描画ブロックは、横１６画素、縦１６画素の正方形である。以下、画像キャッシュ１５のブロックをキャッシュブロックという。
【００３１】
図４Ａ〜図５Ｄの（ｂ）と（ｃ）に示す小さい正方形は、１つの画素を表す。画素中の番号は、キャッシュブロックから描画ブロックへ画像表示される画素の対応を示す。すなわち、例えばキャッシュブロックの“１”の画素は、描画ブロックの同じ番号“１”の画素の位置に表示されることを示す。画素中の番号は、描画ブロック内の走査の順序を示すものではない。描画ブロック内の主走査の方向は実線の矢印、副走査の方向は点線の矢印で示される。
【００３２】
図４Ａは拡大率が１、回転角度が０度の場合の描画ブロックと画像キャッシュアクセスを説明する図である。図４Ａは座標変換無しの場合であり、参照画像の画素と表示画像の画素が１対１に対応しており、キャッシュブロックが１つずつ効率よく使われていることが分かる。
【００３３】
図４Ｂは、描画ブロックを変えずに参照画像を縮小する場合の画像キャッシュアクセスを説明する図である。図４Ｂは、座標変換のＸ方向の拡大率が２．０の場合であり、参照画像は横方向に１／２に縮小されて表示されることになる。したがって、描画処理では１つのキャッシュブロック内のＸ方向１６画素のうち、１つ飛びでしか使用されない。描画ブロックは横１６画素であるので、描画ブロック内のＸ方向１ライン分が走査されるたびに、キャッシュブロックは、Ｘ方向に２つ使用されることになる。
【００３４】
図４Ｃは、描画ブロックを変えずに参照画像を拡大する場合の画像キャッシュアクセスを説明する図である。図４Ｃは、座標変換のＸ方向の拡大率が０．５の場合であり、参照画像は横方向に２倍に拡大されて表示されることになる。描画ブロックは横１６画素であるので、１つのキャッシュブロック内のＸ方向１６画素のうち、画素番号１〜８までの半分しか使用されず、残りは破棄されてしまう。その後、現在走査している描画ブロックの右隣の描画ブロックに画素生成処理が移ると、画素番号９〜１６が使用されることになるが、このときには、すでに画像キャッシュ１５から必要なデータが破棄されている可能性があるため、再度、同じ領域を外部メモリ２０から画像キャッシュ１５へ読み出す必要があり、メモリアクセスが増加する。
【００３５】
図４Ｄは、描画ブロックを変えずに参照画像を回転する場合の画像キャッシュアクセスを説明する図である。図４Ｄは、参照画像を反時計方向に９０度回転した場合を示す。描画ブロック内の画素が横（（ｂ）の実線矢印）方向に走査されると、画像キャッシュ１５内では、縦（（ｃ）の実線矢印）方向に走査されることになる。キャッシュブロックは、横方向の方が長いサイズであるため、縦方向に走査されると、描画ブロック内の横方向１ライン分が走査されるたびに、縦方向に４つのキャッシュブロックを使用することになる。
【００３６】
ここで、図４Ａ〜図４Ｄの例について、本実施の形態の方法で走査方向、ブロックサイズを変更した場合の例を図５Ａ〜図５Ｄに示す。図５Ａは、実施の形態に係る画像キャッシュアクセスを説明する図である。図５Ａは、拡大率が１、回転角度が０度の場合である。描画ブロックは、座標変換マトリクスが単位行列の場合にキャッシュブロックに適合するように決められる。したがって、参照画像の画素と表示画像の画素が１対１に対応しており、キャッシュブロックが１つずつ効率よく使われる。
【００３７】
図５Ｂは、参照画像の縮小に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。図５Ｂは、座標変換のＸ方向の拡大率が２．０の場合であり、参照画像は横方向に１／２に縮小されて表示されることになる。そこで、描画ブロックの横画素数を半分の８にすれば、キャッシュブロックがＸ方向に２つ使用されることがなく、図５Ａと同じように、キャッシュブロックが使用され、連続して効率よく読み出すことができるようになる。
【００３８】
図５Ｃは、参照画像の拡大に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。図５Ｃは、座標変換のＸ方向の拡大率が０．５の場合であり、参照画像は横方向に２倍に拡大されて表示されることになる。そこで、描画ブロックの横画素数を２倍の３２にすれば、画素番号１〜１６までが無駄無く使用され、再度、同じ領域を読み出すようなメモリアクセスが行なわれず、連続して効率よく画像データ読み出すことができる。
【００３９】
図５Ｄは、参照画像の回転に合わせて描画ブロックを変更する場合の画像キャッシュアクセスを説明する図である。図５Ｄは、座標変換が時計方向に９０度回転する場合を示す。図５Ｄの例では、描画ブロックを座標変換した領域が、キャッシュブロックに適合するように、横４画素、縦１６画素に設定する。そうすると、描画ブロックの画素の走査は、キャッシュブロック内に収まるので、図４Ｄの場合のように、縦方向に２つ以上のキャッシュブロックを使用する必要がない。
【００４０】
以上より、座標変換の拡大・縮小を表す拡大率が小さいときは、ブロックサイズを大きく、拡大率が大きいときは、ブロックサイズを小さくする方が、画像キャッシュ１５を効率よく使用できることが分かる。また、座標変換の回転に合わせて、描画ブロックの縦と横の画素数を設定すれば画像キャッシュ１５を効率よく使用できる。
【００４１】
本実施の形態１では、図３の座標変換マトリクスの拡大・縮小・回転を表す要素であるａ，ｂ，ｃ，ｄに着目し、ブロックサイズは、その要素のうちの座標変換の拡大・縮小を表す拡大率をみて、拡大率が小さいときは描画ブロックの画素数を大きく、拡大率が大きいときは描画ブロックの画素数を小さくする。また、座標変換の回転についても、描画ブロックを座標変換した領域が、キャッシュブロックに適合するように描画ブロックの縦と横の画素数を設定する。
【００４２】
座標変換の拡大率は、描画領域の座標軸Ｘ、Ｙの単位ベクトルを座標変換したベクトルから求めることができる。すなわち出力座標（Ｘ，Ｙ）＝（０，０）から、Ｘ方向に１単位、Ｙ方向に１単位、それぞれ進んだときに、参照座標（Ｘ’，Ｙ’）がどれだけ移動したかを調べることで、移動の比率が求まるため、拡大率として使用することができる。つまり、図３の座標変換式において、出力座標を（Ｘ，Ｙ）＝（１，０）としたときの参照座標（Ｘ’，Ｙ’）を座標変換ベクトルＸ１、（Ｘ，Ｙ）＝（０，１）としたときの（Ｘ’，Ｙ’）を座標変換ベクトルＹ１とすると、Ｘの拡大率は、ベクトルＸ１の大きさ、Ｙの拡大率は、ベクトルＹ１の大きさで表すことができる。ここで、図３の座標変換式に、（Ｘ，Ｙ）＝（１，０）、（Ｘ，Ｙ）＝（０，１）をそれぞれ代入すると、Ｘ１＝（ａ，ｃ）、Ｙ１＝（ｂ，ｄ）となるので、これらのベクトルの大きさから、Ｘの拡大率はａ２＋ｃ２、Ｙの拡大率はｂ２＋ｄ２でそれぞれ求めることができる。
【００４３】
図６は、実施の形態１に係る描画ブロックサイズ設定の動作の一例を示すフローチャートである。描画コマンド発生部１１は、参照画像と描画領域を指定する情報を取得すると（ステップＳ１０）、座標変換マトリクスを生成する（ステップＳ１１）。
【００４４】
描画ブロック設定部２２は、座標変換マトリクスから座標変換ベクトルＸ１、Ｙ１を計算する（ステップＳ１２）。ここで、座標変換ベクトルＸ１、Ｙ１は、描画領域の座標軸Ｘ、Ｙの単位ベクトルを座標変換したベクトルである。そして、座標変換ベクトルＸ１の大きさを求める。
【００４５】
求めたベクトルＸ１からＸ１の大きさを求めるが、平方根の処理を回避するため、２乗した値を使用し、描画ブロックの横方向の画素数Ｗを設定する。｜Ｘ１｜２の大きさによって分岐する（ステップＳ１３）。例として、ここではキャッシュブロックの横画素数が１６の場合に、描画ブロックの横画素数Ｗを、４，８，１６，３２の４通りから選択可能としている。すなわち、｜Ｘ１｜２が１より小さい場合は、Ｗ＝３２に（ステップＳ１４）、｜Ｘ１｜２が１以上４未満の場合は、Ｗ＝１６に（ステップＳ１５）、｜Ｘ１｜２が４以上９未満の場合は、Ｗ＝８に（ステップＳ１６）、｜Ｘ１｜２が９以上の場合は、Ｗ＝４に設定する（ステップＳ１７）。
【００４６】
同様に、縦方向の画素数についても設定する。すなわち｜Ｙ１｜２の大きさによって分岐する（ステップＳ１８）。例として、描画ブロックの縦画素数Ｈを、４，８，１６，３２の４通りから選択可能としている。すなわち、｜Ｙ１｜２が１より小さい場合は、Ｈ＝３２に（ステップＳ１９）、｜Ｙ１｜２が１以上４未満の場合は、Ｈ＝１６に（ステップＳ２０）、｜Ｙ１｜２が４以上９未満の場合は、Ｈ＝８に（ステップＳ２１）、｜Ｙ１｜２が９以上の場合は、Ｈ＝４に設定する（ステップＳ２２）。そして、描画ブロックサイズ設定を終了する。
【００４７】
描画ブロックの縦と横の画素数をどのように設定するかは、上述の例に限らない。それぞれの画素数の段階を少なくしてもよいし、多くしてもかまわない。さらに、座標変換ベクトルＸ１、Ｙ１の大きさに合わせて連続的に設定してもよい。また、縦と横の画素数の段階を同じにしなくてもよい。なお、上述の図６の処理では、図５Ｄで説明したように、座標変換の回転角度に応じて、描画ブロックの縦と横の画素数を入れ替えたことになっている。
【００４８】
図７は、実施の形態１に係る画像生成の動作の一例を示すフローチャートである。描画ブロックサイズ設定を終了すると、描画処理に入る。輪郭生成部１２で輪郭生成（ステップＳ３０）した後、画素生成部１３は画素生成を開始する。図７のフローチャートは、４つのループの入れ子構造になっている。
【００４９】
描画領域を分割して被覆する描画ブロックを設定し、描画ブロックを行ごとに選択して、Ｙ方向（副走査方向）のブロック数分ループ処理（描画領域Ｙループ：最も外側のループ）を行う（ステップＳ３１〜ステップＳ４０のループ）。描画領域Ｙループの処理では、描画ブロックの１つの行について、主走査の方向に描画ブロックを選択して、Ｘ方向（主走査方向）のブロック数分ループ処理（描画領域Ｘループ：ブロック処理の内側のループ）を行う（ステップＳ３２〜ステップＳ３９のループ）。描画領域の形状と傾きによって、描画ブロックの行ごとの数（Ｘ方向のブロック数）は異なる場合がある。
【００５０】
描画領域Ｘループの処理では、描画ブロック内の画素を行ごとに選択して、Ｙ方向（副走査方向）の画素数Ｈの分ループ処理（ブロック内Ｙループ：ブロック内処理の外側のループ）を行う（ステップＳ３３〜ステップＳ３８のループ）。ブロック内Ｙループの処理では、選択した１行の画素数Ｗの分ループ処理（ブロックＸループ：最も内側のループ）を行う（ステップＳ３４〜ステップＳ３７）。すなわち、Ｘ方向（主走査方向）に画素を１つずつ選択し、座標変換して（ステップＳ３５）、描画処理を行う（ステップＳ３６）。これを１行の画素数Ｗ分行う。描画領域内の全ての画素数分のループが終わると、画素生成を終了し、描画が完了する。
【００５１】
以上説明したように、本実施の形態１に係る画像描画装置１０によれば、以下に記載するような効果を奏する。第１の効果は、キャッシュが効率的に使用できるようになることにより、キャッシュヒット率が向上し、描画速度が向上することである。第２の効果は、キャッシュヒット率の向上により、キャッシュ更新回数が減り、メモリアクセス量が低減されることである。
【００５２】
（実施の形態２）
実施の形態２では、座標変換の回転角度に応じて、描画領域の走査の方向を変更する。実施の形態２の画像描画装置１０の構成は、図１と同じであるが、描画ブロック設定部２２は、描画ブロックのサイズの設定に加えて、描画領域の走査の方向を設定する。
【００５３】
図８は、画像キャッシュ読み出しを説明する図である。図８の（ａ）の４つの正方形は描画ブロックを表す。図８の（ｂ）と（ｄ）（中央の列）は、（ａ）の描画ブロックを座標変換した描画ブロックと画像キャッシュ１５の関係を示す。図８の（ｃ）と（ｅ）（右の列）は、それぞれ（ｂ）と（ｄ）の座標変換に対応して、実際に描画される画像の向きを示す。（ｂ）と（ｃ）は、座標変換の回転が０度の場合、（ｄ）と（ｅ）は、座標変換の回転が時計方向に９０度の場合である。図８では、描画ブロックの番号を角かっこ数字で表す。また、画像キャッシュ１５のブロックの番号を丸かっこ数字で表す。
【００５４】
図８では、描画ブロックは横１６画素、縦１６画素のブロックサイズを想定している。また、キャッシュブロックは横１６画素、縦８画素のブロックサイズを想定している。なお、描画ブロックの中の実線の矢印は描画ブロック中の主走査の方向を表し、点線の矢印は副走査の方向を表す。
【００５５】
図８の（ｂ）、（ｃ）は、拡大率が１、回転角度が０度の場合である。この場合は、番号［１］と［２］の描画ブロックを描画するときに、外部メモリ２０から画像キャッシュ１５へのデータ読み出しが、トータル６回（画像キャッシュ１５の番号（１）〜（６）のブロック）で描画できる。それに対して、図８の（ｄ）、（ｅ）は、座標変換の拡大率が１であるが、回転角度が時計方向に９０度の場合である。この場合は、番号［１］の描画ブロックを描画するときに、画像キャッシュ１５の番号（１）〜（４）の４つのブロックを読み出すことになる。同じように番号［２］の描画ブロックを描画するときにも、４つのブロックを読み出すことになる。その結果、キャッシュのヒット率が落ち、番号［１］と［２］の描画ブロックを描画するときに、８回の読み出しを行なわなければならず、描画速度が落ちてしまう。
【００５６】
描画ブロック設定部２２は、描画領域の水平方向を座標変換した方向と、画像キャッシュ１５の水平方向のなす角度の小さい方が４５度を超える場合に、描画領域の垂直方向を主走査方向、水平方向を副走査方向とする。その場合画素生成部１３は、描画領域を被覆する描画ブロックを列ごとに順に選択し（副走査＝水平方向）、かつ、選択した描画ブロック内の画素を垂直方向の列ごとに選択する（副走査＝水平方向）。
【００５７】
図９Ａおよび図９Ｂは、走査方向と画像キャッシュアクセスの関係を説明する図である。図９Ａおよび図９Ｂは、図４Ａ〜図５Ｄと同様に、（ａ）は座標変換マトリクス、（ｂ）は描画ブロック、（ｃ）は画像キャッシュ１５の構成を示す。図９Ａ、図９Ｂの（ｂ）と（ｃ）の小さい正方形は画素を表し、画素内の数字は描画ブロックと画像キャッシュ１５の画素の対応を示す。また、実線矢印は主走査の方向を、点線矢印は副走査の方向を示す。なお、キャッシュブロックは、横１６画素、縦４画素の長方形であり、描画ブロックは、横１６画素、縦１６画素の正方形である。
【００５８】
図９Ａは、走査方向を一定にして参照画像を９０度回転させる場合の画像キャッシュアクセスを説明する図である。図９Ａは、図４Ｄと同じである。図９Ａは、参照画像を反時計方向に９０度回転した場合を示す。描画ブロック内の画素が横（（ｂ）の実線矢印）方向に走査されると、画像キャッシュ１５内では、縦（（ｃ）の実線矢印）方向に走査されることになる。キャッシュブロックは、横方向の方が長いサイズであるため、縦方向に走査されると、描画ブロック内の横方向１ライン分が走査されるたびに、縦方向に４つのキャッシュブロックを使用することになる。
【００５９】
図９Ｂは、参照画像の９０度回転に合わせて走査方向を変更する場合の画像キャッシュアクセスを説明する図である。座標変換の回転角度が９０度の場合、描画領域の縦方向を主走査の方向、横方向を副走査の方向とする。描画ブロック内の画素が縦（（ｂ）の実線矢印）方向に走査されると、画像キャッシュ１５内では、横（（ｃ）の実線矢印）方向に走査されることになる。そうすると、描画ブロックの画素の走査は、キャッシュブロック内に収まるので、図９Ａの場合のように、縦方向に２つ以上のキャッシュブロックを使用する必要がない。
【００６０】
描画領域を走査する方向は、通常、主走査が水平方向で画面に向かって左から右へ、副走査が垂直方向で画面に向かって上から下へ向かう方向である。主走査の方向が右から左へ、または、副走査の方向が下から上へ向かう方向の場合もあり得る。走査方向を変更する場合は、図９Ｂに示すように、主走査と副走査の方向を入れ替えて、主走査を垂直方向で画面に向かって上から下へ、副走査を水平方向で画面に向かって左から右へ向かう方向にする。変更する場合の主走査の方向は垂直方向であれば、画面に向かって下から上へ向かう方向でもよい。また、副走査の方向は水平方向であれば、画面に向かって右から左へ向かう方向でもかまわない。
【００６１】
次に、座標変換マトリクスから、上記の判断を行なうための回転角を求める方法について説明する。実施の形態１で説明したように、座標変換の拡大率は、座標変換ベクトルＸ１、Ｙ１の大きさによって求めることができる。座標変換の拡大率と同じように、描画領域の座標軸Ｘ、Ｙの単位ベクトルを座標変換したベクトルから求めることができる。図３の座標変換式を用いて、回転角は、座標変換の回転が０度の場合（ａ＝ｄ＝１、ｂ＝ｃ＝０）のベクトル（１，０）と、座標変換後のベクトルＸ１＝（ａ，ｃ）との間の角で求められる。
【００６２】
回転角を求めるには、一般的にベクトルの内積などを使用して求める必要があるが、本実施の形態で決定したい走査方向はＸ方向、Ｙ方向の２種類であるので、回転角（描画領域の水平方向を座標変換した方向と、画像キャッシュ１５の水平方向のなす角度の小さい方）が４５度以上または以下であることが分かればよい。４５度以上か以下であることは、ベクトルＸ１（ａ，ｃ）のａの絶対値｜ａ｜とｃの絶対値｜ｃ｜の比率によって決めることができる。｜ａ｜≧｜ｃ｜でａの方が長ければ４５度以下、｜ａ｜≦｜ｃ｜でｃの方が長ければ、４５度以上となる。
【００６３】
図１０は、実施の形態２における描画領域の座標軸の座標変換と拡大率および回転角度の関係を示す。図１０の実線の円は単位円である。単位円の中心である原点は、（Ｘ，Ｙ）＝（０，０）のときの参照画像の座標（Ｘ’，Ｙ’）である。拡大率が１．０で拡大縮小無しの場合、ベクトルＸ１，Ｙ１は、図１０の単位円上の点に向かうベクトルになるので、Ｘ１，Ｙ１の大きさが拡大率を表すことが分かる。回転が０度の場合のベクトルＸ１＝（ａ，０）は、Ｘ’軸上の点となる。そのため、Ｘ’軸とＸ１との間の角、図１０のθが、画像の回転角を表すことが分かる。
【００６４】
図１０に示されるように、Ｘ１は（ａ，ｃ）であるので、回転角度を−１８０度〜１８０度の範囲として、｜ａ｜≧｜ｃ｜のときは、
θ≦−１３５度、−４５度≦θ≦４５度  または  １３５度≦θ
となり、｜ａ｜＜｜ｃ｜のときは、
−１３５度＜θ＜−４５度  または  ４５度＜θ＜１３５度
となる。したがって、｜ａ｜と｜ｃ｜を比較することによって、４５度を境とした走査方向を決定することができることが分かる。以上の操作に従って、描画ブロック設定部２２では、座標変換ベクトルＸ１（ａ，ｃ）、Ｙ１（ｂ，ｄ）から描画ブロックの縦と横の画素数および走査方向を設定する。
【００６５】
図１１〜図１３は、座標変換が回転を含む場合の描画ブロックと画像キャッシュアクセスを説明する図である。図１１〜図１３において、（ａ）は、描画領域の描画ブロックを示す。実線の枠は描画領域を表す。破線の矩形は描画ブロックを表す。（ｂ）と（ｃ）は、（ａ）の描画ブロックを座標変換したものとキャッシュブロックの関係を示す。（ｂ）と（ｃ）の破線の矩形は座標変換した描画ブロックを表す。太い実線の矩形はキャッシュブロックを表す。細い実線の枠は参照画像を表す。図１１〜図１３では、角かっこ数字は描画ブロックの番号を示す。また、丸かっこ数字は画像キャッシュ１５のブロックの番号を示す。なお、実線の矢印は主走査の方向、点線の矢印は副走査の方向を表す。
【００６６】
図１１は、回転角度が小さい場合の描画ブロックと画像キャッシュの関係を示す図である。図１１は、参照画像を反時計方向に１０度回転させる場合の例を示す。図１１（ａ）に示すように描画領域の描画ブロックの走査の順は、［１］→［４］の順である。描画ブロック内の画素の主走査方向は表示画像の水平方向である。
【００６７】
図１１の（ｂ）に示すように、番号［１］と［２］の描画ブロックを描画するために、（１）〜（５）のキャッシュブロックがその番号の順で読み込まれる。キャッシュブロックの読み込みは５回必要になっている。同様に、図１１(ｃ)を参照すると、番号［３］と［４］の描画ブロックを描画するために、（６）〜（１０）のキャッシュブロックがその順で読み込まれる。番号［１］〜［４］の描画ブロックを描画するためにトータルで、１０回のキャッシュブロックの読み込みが必要である。参照画像を時計方向に１０度回転させる場合も同様である。
【００６８】
参照画像を１０度回転させるときは、描画ブロックの主走査の方向を表示画像の水平方向とした場合と、垂直方向とした場合とで、画像キャッシュ１５のヒット率は変わらない。本実施の形態２の画像描画装置１０では、回転角度が４５度以下の場合は、描画領域の走査方向を表示画像の水平方向とする。
【００６９】
図１２は、走査方向を変えずに参照画像を回転させる場合の画像キャッシュアクセスを説明する図である。図１２は、参照画像を反時計方向に８０度回転させる場合の例を示す。図１２（ａ）に示すように描画ブロックの走査の順は、主走査が水平の［１］→［４］の順である。描画ブロック内の画素の主走査方向は表示画像の水平方向である。
【００７０】
図１２の（ｂ）に示すように、番号［１］と［２］の描画ブロックを描画するために、（１）〜（７）のキャッシュブロックがその番号の順で読み込まれる。キャッシュブロックの読み込みが７回必要になっている。同様に、図１２(ｃ)を参照すると、番号［３］と［４］の描画ブロックを描画するために、（８）〜（１２）のキャッシュブロックがその順で読み込まれる。
【００７１】
図１２（ｃ）の（８）〜（１０）、（１２）のキャッシュブロックは、（ｂ）の（３）、（４）、（７）および（６）のキャッシュブロックと同じである。しかし、画像キャッシュ１５のキャッシュブロックの最大数が４以下である場合、番号［３］の描画ブロックの描画を始めるときには、すでに（３）（＝（８））のキャッシュブロックは廃棄されているので、改めて（８）のキャッシュブロックを読み込む必要がある。同様に（９）のキャッシュブロックが必要になるときには、（４）のキャッシュブロックは廃棄されているので、改めて読み込む必要がある。さらに（１２）のキャッシュブロックが必要になるときには、（６）のキャッシュブロックは廃棄されているので、改めて読み込む必要がある。図１２の例では、番号［１］〜［４］の描画ブロックを描画するためにトータルで、１２回のキャッシュブロックの読み込みが必要である。その結果、図１１の場合に比べて画像キャッシュ１５のヒット率は低下する。
【００７２】
図１３は、参照画像の回転角度に合わせて走査方向を変更する場合の画像キャッシュアクセスを説明する図である。図１３は、参照画像を反時計方向に８０度回転させる場合の例を示す。図１３（ａ）に示すように描画ブロックの走査の順は、主走査が垂直の［１］→［４］の順である。描画ブロック内の画素の主走査方向は表示画像の垂直方向である。
【００７３】
図１３の（ｂ）に示すように、番号［１］と［２］の描画ブロックを描画するために、（１）〜（５）のキャッシュブロックがその番号の順で読み込まれる。キャッシュブロックの読み込みが５回必要になっている。同様に、図１３(ｃ)を参照すると、番号［３］と［４］の描画ブロックを描画するために、（６）〜（１０）のキャッシュブロックがその順で読み込まれる。
【００７４】
図１３（ｃ）の（６）と（８）のキャッシュブロックは、（ｂ）の（３）と（５）のキャッシュブロックと同じである。画像キャッシュ１５のキャッシュブロックの最大数が４の場合、番号［３］の描画ブロックの描画を始めるときには、まだ（３）のキャッシュブロックが画像キャッシュ１５に残っているので、改めて（６）のキャッシュブロックを読み込む必要がない場合がある。同様に（８）のキャッシュブロックが必要になるときには、（５）のキャッシュブロックが残っている可能性があり、改めて読み込む必要がない場合がある。
【００７５】
図１３の例では、番号［１］〜［４］の描画ブロックを描画するためにトータルで、１０回のキャッシュブロックの読み込みが必要である。画像キャッシュ１５のキャッシュブロックの最大数が４以上の場合は、さらに読み込み回数が減少する。その結果、図１２の場合に比べて画像キャッシュ１５のヒット率が向上する。参照画像を時計方向に８０度回転させる場合は、図１２および図１３が対称になるが同様に考えることができる。
【００７６】
図１４は、実施の形態２に係る描画ブロックサイズ設定の動作の一例を示すフローチャートである。実施の形態２では、描画ブロックの縦と横の画素数を設定したのちに、座標変換の回転角度に応じて、描画領域の走査方向を設定する。図１４のフローチャートは、ステップＳ１０〜ステップＳ２２までの動作は、図６のステップＳ１０〜ステップＳ２２の動作と同じである。
【００７７】
描画ブロックの縦と横の画素数を設定したのちに、ベクトルＸ１（ａ，ｃ）のａ，ｃの関係が、｜ａ｜≧｜ｃ｜であるかどうかを判定する（ステップＳ２３）。｜ａ｜≧｜ｃ｜であれば（ステップＳ２３；ＹＥＳ）、描画領域の水平方向（Ｘ方向）を主走査方向とする（ステップＳ２４）。｜ａ｜＜｜ｃ｜であれば（ステップＳ２３；ＮＯ）、描画領域の垂直方向（Ｙ方向）を主走査方向として、描画ブロックサイズ設定を終了する。
【００７８】
図１５は、実施の形態２に係る画像生成の動作の一例を示すフローチャートである。描画ブロックサイズ設定を終了すると、描画処理に入る。輪郭生成部１２で輪郭生成（ステップＳ３０）したのち、描画ブロックサイズ設定で設定した主走査の方向がＸ方向かＹ方向かを判定する（ステップＳ５０）。主走査方向がＸ方向であれば（ステップＳ５０；Ｘ）、描画領域内をＹ方向から先にループを回す（ステップＳ３１〜ステップＳ４０）。すなわち、図７のステップＳ３１〜ステップＳ４０と同様の処理を行う。
【００７９】
主走査方向がＹ方向であれば（ステップＳ５０；Ｙ）、描画領域内をＸ方向から先にループを回す（ステップＳ５１〜ステップＳ６０）。すなわち、ステップＳ３１〜ステップＳ４０の処理のＸ方向とＹ方向を入れ替える。ステップＳ５１〜ステップＳ６０の処理は、４つのループの入れ子構造になっている。
【００８０】
描画領域を分割して被覆する描画ブロックを設定し、描画ブロックを列ごとに選択して、Ｘ方向（副走査方向）のブロック数分ループ処理（描画領域Ｘループ：最も外側のループ）を行う（ステップＳ５１〜ステップＳ６０のループ）。描画領域Ｘループの処理では、描画ブロックの１つの列について、主走査（Ｙ）の方向に描画ブロックを選択して、Ｙ方向（主走査方向）のブロック数分ループ処理（描画領域Ｙループ：ブロック処理の内側のループ）を行う（ステップＳ５２〜ステップＳ５９のループ）。描画領域の形状と傾きによって、描画ブロックの列ごとの数（Ｙ方向のブロック数）は異なっているかもしれない。
【００８１】
描画領域Ｙループの処理では、描画ブロック内の画素を列ごとに選択して、Ｘ方向（副走査方向）の画素数Ｗの分ループ処理（ブロック内Ｘループ：ブロック内処理の外側のループ）を行う（ステップＳ５３〜ステップＳ５８のループ）。ブロック内Ｘループの処理では、選択した１列の画素数Ｈの分ループ処理（ブロックＹループ：最も内側のループ）を行う（ステップＳ５４〜ステップＳ５７）。すなわち、Ｙ方向（主走査方向）に画素を１つずつ選択し、座標変換して（ステップＳ５５）、描画処理を行う（ステップＳ５６）。これを１列の画素数Ｈ分行う。描画領域内の全ての画素分のループが終わると、画素生成を終了し、描画が完了する。
【００８２】
以上説明したように、本実施の形態２の画像描画装置１０によれば、参照画像を回転して表示する場合に、画像キャッシュが効率的に使用できるようになることにより、キャッシュヒット率が向上し、描画速度が向上する。そして、キャッシュヒット率の向上により、キャッシュ更新回数が減り、メモリアクセス量が低減される。
【００８３】
図１６は、本発明の実施の形態に係る画像描画装置のハードウェア構成の例を示すブロック図である。画像描画装置１０は、図１６に示すように、制御部３１、主記憶部３２、外部記憶部３３、操作部３４、表示部３５および送受信部３６を備える。主記憶部３２、外部記憶部３３、操作部３４、表示部３５および送受信部３６はいずれも内部バス３０を介して制御部３１に接続されている。
【００８４】
制御部３１はＣＰＵ（Central Processing Unit）等から構成され、外部記憶部３３に記憶されている制御プログラム３９に従って、画像描画装置１０の処理を実行する。
【００８５】
主記憶部３２はＲＡＭ（Random−Access Memory）等から構成され、外部記憶部３３に記憶されている制御プログラム３９をロードし、制御部３１の作業領域として用いられる。
【００８６】
外部記憶部３３は、フラッシュメモリ、ハードディスク、ＤＶＤ−ＲＡＭ（Digital Versatile Disc Random−Access Memory）、ＤＶＤ−ＲＷ（Digital Versatile Disc ReWritable）等の不揮発性メモリから構成され、上述の処理を制御部３１に行わせるための制御プログラム３９を予め記憶し、また、制御部３１の指示に従って、制御プログラム３９が記憶するデータを制御部３１に供給し、制御部３１から供給されたデータを記憶する。図１の外部メモリ２０は、外部記憶部３３に含まれる。
【００８７】
操作部３４はキーボードおよびマウスなどのポインティングデバイス等と、キーボードおよびポインティングデバイス等を内部バス３０に接続するインタフェース装置から構成されている。操作部３４を介して、画像の表示、参照画像の指定、描画領域と座標変換の情報などの入力を受け付ける。
【００８８】
表示部３５は、ＣＲＴ（Cathode Ray Tube）またはＬＣＤ（Liquid Crystal Display）などから構成され、描画処理部１６で生成した表示画像を表示する。
【００８９】
送受信部３６は、通信装置、およびそれらと接続するシリアルインタフェースまたはＬＡＮ（Local Area Network）インタフェースから構成されている。送受信部３７は、ネットワーク（図示せず）を通じてサーバ（図示せず）から、表示する画像を含むコンテンツを受信する。
【００９０】
図１の描画コマンド発生部１１、輪郭生成部１２、画素生成部１３、座標変換部１４、画像キャッシュ１５、描画処理部１６、表示部１７、外部メモリ２０、レジスタ２１および描画ブロック設定部２２の処理は、制御プログラム３９が、制御部３１、主記憶部３２、外部記憶部３３、操作部３４、表示部３５および送受信部３６などを資源として用いて処理することによって実行する。
【００９１】
本発明の好適な変形として、以下の構成が含まれる。
【００９２】
本発明の第１の観点に係る画像描画装置について、
好ましくは、前記設定手段は、前記画像キャッシュのブロックサイズとブロック数に合わせて、少なくとも前記矩形領域に含まれる前記描画領域を座標変換した領域が、前記画像キャッシュの範囲に収まるように、前記矩形領域の縦と横の画素数を設定することを特徴とする。
【００９３】
好ましくは、前記設定手段は、前記座標変換の倍率に反比例して、前記矩形領域の縦と横の画素数を設定することを特徴とする。
【００９４】
好ましくは、前記変換手段は、前記描画領域の水平方向を座標変換した方向と、前記画像キャッシュの水平方向のなす角度の小さい方が４５度を超える場合に、前記描画領域の垂直方向を主走査方向、水平方向を副走査方向として、前記描画領域を被覆する矩形領域を順に選択し、かつ、選択した矩形領域内を走査して画素を選択することを特徴とする。
【００９５】
本発明の第２の観点に係る画像描画方法について、
好ましくは、前記設定ステップは、前記画像キャッシュのブロックサイズとブロック数に合わせて、少なくとも前記矩形領域に含まれる前記描画領域を座標変換した領域が、前記画像キャッシュの範囲に収まるように、前記矩形領域の縦と横の画素数を設定することを特徴とする。
【００９６】
好ましくは、前記設定ステップは、前記座標変換の倍率に反比例して、前記矩形領域の縦と横の画素数を設定することを特徴とする。
【００９７】
好ましくは、前記変換ステップは、前記描画領域の水平方向を座標変換した方向と、前記画像キャッシュの水平方向のなす角度の小さい方が４５度を超える場合に、前記描画領域の垂直方向を主走査方向、水平方向を副走査方向として、前記描画領域を被覆する矩形領域を順に選択し、かつ、選択した矩形領域内を走査して画素を選択することを特徴とする。
【００９８】
その他、前記のハードウエア構成やフローチャートは一例であり、任意に変更および修正が可能である。
【００９９】
制御部３１、主記憶部３２、外部記憶部３３、操作部３４、内部バス３０などから構成される画像描画処理を行う中心となる部分は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。たとえば、前記の動作を実行するためのコンピュータプログラムを、コンピュータが読み取り可能な記録媒体（フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）に格納して配布し、当該コンピュータプログラムをコンピュータにインストールすることにより、前記の処理を実行する画像描画装置を構成してもよい。また、インターネット等の通信ネットワーク上のサーバ装置が有する記憶装置に当該コンピュータプログラムを格納しておき、通常のコンピュータシステムがダウンロード等することで画像描画装置を構成してもよい。
【０１００】
また、画像描画装置の機能を、ＯＳ（オペレーティングシステム）とアプリケーションプログラムの分担、またはＯＳとアプリケーションプログラムとの協働により実現する場合などには、アプリケーションプログラム部分のみを記録媒体や記憶装置に格納してもよい。
【０１０１】
また、搬送波にコンピュータプログラムを重畳し、通信ネットワークを介して配信することも可能である。たとえば、通信ネットワーク上の掲示板(BBS, Bulletin Board System)に前記コンピュータプログラムを掲示し、ネットワークを介して前記コンピュータプログラムを配信してもよい。そして、このコンピュータプログラムを起動し、ＯＳの制御下で、他のアプリケーションプログラムと同様に実行することにより、前記の処理を実行できるように構成してもよい。
【符号の説明】
【０１０２】
１０  画像描画装置
１１  描画コマンド発生部
１２  輪郭生成部
１３  画素生成部
１４  座標変換部
１５  画像キャッシュ
１６  描画処理部
１７  表示部
２０  外部メモリ
２１  レジスタ
２２  描画ブロック設定部
３１  制御部
３２  主記憶部
３３  外部記憶部
３４  操作部
３５  表示部
３６  送受信部
３９  制御プログラム
【図１】
0005455213.tif 000002
【図２】
0005455213.tif 000003
【図３】
0005455213.tif 000004
【図４Ａ】
0005455213.tif 000005
【図４Ｂ】
0005455213.tif 000006
【図４Ｃ】
0005455213.tif 000007
【図４Ｄ】
0005455213.tif 000008
【図５Ａ】
0005455213.tif 000009
【図５Ｂ】
0005455213.tif 000010
【図５Ｃ】
0005455213.tif 000011
【図５Ｄ】
0005455213.tif 000012
【図６】
0005455213.tif 000013
【図７】
0005455213.tif 000014
【図８】
0005455213.tif 000015
【図９Ａ】
0005455213.tif 000016
【図９Ｂ】
0005455213.tif 000017
【図１０】
0005455213.tif 000018
【図１１】
0005455213.tif 000019
【図１２】
0005455213.tif 000020
【図１３】
0005455213.tif 000021
【図１４】
0005455213.tif 000022
【図１５】
0005455213.tif 000023
【図１６】
0005455213.tif 000024