(57)【要約】【課題】  直線の接続部および端部を滑らかに表示することができる画像表示方法を提供する。【解決手段】  直線描画ブロックＲＢは、直線属性テーブル１５ｂから属性データを読み出し、読み出した属性データが直線端部の円処理を指示しているか否かを判断する。そして、直線端部の円処理を指示していた場合に、描画対象の走査線上の表示ドットであって、直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出し、検出した表示ドットに対応するラインバッファ２０ａ、２０ｂの記憶位置に表示データを描画する。【選択図】    図１
2005257886.tif 000002
【特許請求の範囲】
【請求項１】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、
前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する第１の処理と、
前記第１の処理によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第２の処理と、
を有することを特徴とする画像処理方法。
【請求項２】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前において、第１の記憶手段内の属性データに基づいて直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、
前記第１の記憶手段から前記属性データを読み出す第１の処理と、
前記第１の処理によって読み出された属性データが直線端部の円処理を指示しているか否かを判断する第２の処理と、
前記第２の処理が直線端部の円処理を指示していた場合に、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する第３の処理と、
前記第３の処理によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第４の処理と、
を有することを特徴とする画像処理方法。
【請求項３】
前記第３の処理は、予め第２の記憶手段内に記憶された、円の表示ドットを指定するデータを、前記直線の始点または終点のＸ，Ｙ座標および前記走査線のＹ座標に基づいて読み出し、読み出したデータに基づいて表示ドットを検出することを特徴とする請求項２に記載の画像処理方法。
【請求項４】
前記第２の記憶手段に、描画対象画像の表示データとバック画像の表示データの混合比を示すデータを記憶させることを特徴とする請求項３に記載の画像処理方法。
【請求項５】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、
前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する検出手段と、
前記検出手段によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段と、
を具備することを特徴とする画像処理装置。
【請求項６】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前において、第１の記憶手段内の属性データに基づいて直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、
前記第１の記憶手段から前記属性データを読み出す読出手段と、
前記読出手段によって読み出された属性データが直線端部の円処理を指示しているか否かを判断する判断手段と、
前記判断手段が直線端部の円処理を指示していた場合に、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する検出手段と、
前記検出手段によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段と、
を具備することを特徴とする画像処理装置。
【請求項７】
前記検出手段は、予め第２の記憶手段内に記憶された、円の表示ドットを指定するデータを、前記直線の始点または終点のＸ座標、Ｙ座標および前記走査線のＹ座標に基づいて読み出し、読み出したデータに基づいて表示ドットを検出することを特徴とする請求項５または請求項６に記載の画像処理装置。
【請求項８】
前記第２の記憶手段に、表示対象画像とバック画像の混合比を示すデータを記憶させることを特徴とする請求項７に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、幅のある直線の表示処理に係り、特に、直線の端部処理の改良を図った画像処理方法および装置に関する。
【背景技術】
【０００２】
従来、各種のソフトウエアにおいて、モニタに複数の直線を表示することはしばしば行われ、また、単に幅のない直線だけでなく、幅のある直線の表示も必要とされる。この幅のある直線の表示において、直線端部に円描画処理を行わないと、直線端部の見栄えが悪く、特に、２本の直線の接続部において直線が滑らかに接続されない問題がある。そこで、従来、幅のある直線の接続部に、図１９（ａ）に示すように円を描き、これにより２本の直線を滑らかに接続することが行われた（特許文献１参照）。
【特許文献１】特開昭６２−２８５１８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、上述した従来の処理は、モニタの走査線に平行または垂直に計った線幅を直径とした円を直線端部に描いていたため、図１９（ａ）に示すように、円の大きさが線幅より大きくなり、直線の接続部が滑らかにならない問題があった。また、従来の処理は、接続部であることを判定して円を描画するため、接続部でない直線端部が滑らかにならず、さらに、接続部であることを自動的に判別する回路負荷が大きい問題があった。
【０００４】
本発明は上記事情を考慮してなされたもので、その目的は、直線の接続部を滑らかにすることができる画像処理方法および画像処理装置を提供することにある。また、この発明の他の目的は、接続部以外の直線端部についても滑らかにすることができる画像処理方法および画像処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
この発明は上記の課題を解決するためになされたもので、請求項１に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する第１の処理と、前記第１の処理によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第２の処理とを有することを特徴とする画像処理方法である。
【０００６】
請求項２に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前において、第１の記憶手段内の属性データに基づいて直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、前記第１の記憶手段から前記属性データを読み出す第１の処理と、前記第１の処理によって読み出された属性データが直線端部の円処理を指示しているか否かを判断する第２の処理と、前記第２の処理が直線端部の円処理を指示していた場合に、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する第３の処理と、前記第３の処理によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第４の処理とを有することを特徴とする画像処理方法である。
【０００７】
請求項３に記載の発明は、請求項２に記載の画像処理方法において、前記第３の処理は、予め第２の記憶手段内に記憶された、円の表示ドットを指定するデータを、前記直線の始点または終点のＸ，Ｙ座標および前記走査線のＹ座標に基づいて読み出し、読み出したデータに基づいて表示ドットを検出することを特徴とする。
請求項４に記載の発明は、請求項３に記載の画像処理方法において、前記第２の記憶手段に、描画対象画像の表示データとバック画像の表示データの混合比を示すデータを記憶させることを特徴とする。
【０００８】
請求項５に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する検出手段と、前記検出手段によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段とを具備することを特徴とする画像処理装置である。
【０００９】
請求項６に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前において、第１の記憶手段内の属性データに基づいて直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、前記第１の記憶手段から前記属性データを読み出す読出手段と、前記読出手段によって読み出された属性データが直線端部の円処理を指示しているか否かを判断する判断手段と、前記判断手段が直線端部の円処理を指示していた場合に、前記走査線上の表示ドットであって、前記直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する検出手段と、前記検出手段によって検出された表示ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段とを具備することを特徴とする画像処理装置である。
【００１０】
請求項７に記載の発明は、請求項５または請求項６に記載の画像処理装置において、前記検出手段は、予め第２の記憶手段内に記憶された、円の表示ドットを指定するデータを、前記直線の始点または終点のＸ座標、Ｙ座標および前記走査線のＹ座標に基づいて読み出し、読み出したデータに基づいて表示ドットを検出することを特徴とする。
請求項８に記載の発明は、請求項７に記載の画像処理装置において、前記第２の記憶手段に、表示対象画像とバック画像の混合比を示すデータを記憶させることを特徴とする。
【発明の効果】
【００１１】
この発明によれば、走査線上の表示ドットであって、直線の端部に描いた線幅を直径とする仮想円に含まれる表示ドットを検出する第１の処理と、第１の処理によって検出された表示ドットに対応するラインバッファの記憶位置に表示データを書き込む第２の処理とを有しているので、図１９（ｂ）に示すように、直線の接続部を滑らかにすることができると共に、接続部以外の直線端部についても滑らかにすることができる効果がある。また、この発明によれば、接続部を自動判別する回路が不要となる利点がある。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照し、この発明の実施の形態について説明する。図２はこの発明の一実施の形態によるラインバッファ方式の画像処理装置１を適用したディスプレイ装置の構成を示すブロック図である。この図において、２はスプライトパターンが記憶されたパターンメモリ、３は画像表示を制御するＣＰＵ（中央処理装置）、４はＣＲＴ（ブラウン管）によるモニタである。
【００１３】
画像処理装置１において、１１はパターンメモリインターフェイス、１２はＣＰＵインターフェイス、Ｂはバスラインである。１４はカラーコードをＲＧＢカラーデータに変換するカラーパレットである。パターンメモリ２にはスプライトパターンの画像データがカラーコードによって記憶されており、カラーパレット１４はそのカラーコードをＲＧＢカラーデータに変換するためのものである。１５は汎用テーブル、１６はデータ一時記憶用のレジスタである。汎用テーブル１５はＣＰＵ３によって書き込みが行われるテーブルであり、図３に示すように、レイヤ設定テーブル１５ａおよび直線属性テーブル１５ｂを有している。
【００１４】
レイヤ設定テーブル１５ａは、複数のレイヤから構成される。図４は各レイヤを示す図であり、この図に示すように、レイヤ＃０が最初に描画され、レイヤ＃１、＃２・・・がその上に順次上書きされる。各レイヤはスプライト表示レイヤまたは直線表示レイヤであり、スプライト表示レイヤにはスプライトの属性データが記憶され、また、直線表示レイヤには直線属性テーブル１５ｂの始点アドレス、終点アドレスが記憶される。ここで、スプライト属性データには、スプライト識別番号、表示位置を指示する表示位置データ、拡大／縮小等を指示するレンダリングデータ等がある。また、直線属性テーブル１５ｂには、直線の属性、すなわち、直線の始点座標、終点座標、直線の幅、直線の色、始点円描画、終点円描画を指定するデータが記憶される。ここで、始点円描画を指定するデータ、終点円描画を指定するデータはそれぞれ、直線の始点、終点に線幅を直径とする円の描画を指示するデータである。
【００１５】
図３の例によって具体的に説明すると、現在、レイヤ設定テーブル１５ａに＃０〜＃６の７レイヤが設定されており、レイヤ＃２が直線表示レイヤであり、それ以外のレイヤ＃０、＃１、＃３〜＃６がスプライト表示レイヤとなっている。そして、レイヤ＃０、＃１、＃３〜＃６には各々１つのスプライトのスプライト属性が書き込まれている。一方、レイヤ＃２には、始点アドレスとしてアドレス「２００ｈ」が、終点アドレスとしてアドレス「２３８ｈ」が書き込まれている。この始点アドレスおよび終点アドレスが指示する直線属性テーブル１５ｂの記憶領域には、直線＃０〜＃７の８本の直線の属性が順次書き込まれている。
【００１６】
次に図２に戻り、スプライトプレーンジェネレータ１８はレイヤ設定テーブル１５ａの各レイヤから順次スプライト属性データを読み出し、読み出した属性データのスプライト識別番号をパターンメモリインターフェイス１１へ出力する。パターンメモリインターフェイス１１はその識別番号のスプライトパターンの画像データをパターンメモリ２から読み出し、スプライトプレーンジェネレータ１８へ出力する。スプライトプレーンジェネレータ１８はその画像データをカラーパレット１４へ出力してＲＧＢカラーデータに変換し、変換後のカラーデータをスプライト属性データと共にスプライトレンダリングプロセッサ１９へ出力する。
【００１７】
スプライトレンダリングプロセッサ１９は、スプライトプレーンジェネレータ１８から受けたカラーデータに対し、スプライト属性データに含まれるレンダリングデータに基づく拡大／縮小、回転等の処理を施した後ラインバッファ２０に書き込む。直線プレーンジェネレータ２２は、レイヤ設定テーブル１５ａの直線表示レイヤから始点アドレス、終点アドレスを読み出し、読み出したアドレスに基づいて直線属性テーブル１５ｂから直線属性データを読み出す。そして、読み出した直線属性データを直線レンダリングプロセッサ２３へ出力する。この場合、直線の色を指定するカラーコードをカラーパレット１４によってＲＧＢカラーデータに変換する。
【００１８】
直線レンダリングプロセッサ２３は、直線属性データに含まれる始点座標、終点座標、線幅、始点円描画、終点円描画を指定するデータに基づいて所定ラインに表示すべき直線の表示ドットを求め、求めた表示ドットに対応するラインバッファ２０の記憶位置に直線属性データに含まれるカラーコードをカラーパレット１４で変換したＲＧＢカラーデータを書き込む。
【００１９】
ラインバッファ２０は、モニタ４の１水平表示ラインの各表示ドットに対応する記憶スロットを有するバッファメモリであり、２個のバッファが設けられている。そして、それら２個のバッファが交互に書き込み用バッファおよび読み出し用バッファとして使用される。クロック発生回路２５は基準クロックパルスを発生し、各部へ出力する。ＣＲＴコントローラ２６は、クロック発生回路２５から出力されるクロックパルスに基づいてモニタ４を駆動する各種のパルス信号、すなわち、水平走査パルス、垂直走査パルス等を発生し、モニタ４およびフレームデータコントローラ２７へ出力する。フレームデータコントローラ２７は、ラインバッファ２０からカラーデータを読み出し、水平走査パルスに従ってＤＡＣ（ディジタル・アナログ・コンバータ）２８ａ〜２８ｃへ出力する。ＤＡＣ２８ａ〜２８ｃはカラーデータをアナログカラー信号に変換し、モニタ４へ出力する。
次に、ラインバッファ方式による直線描画の過程の概略を図１、図５、図６を参照して説明する。
【００２０】
図１は、図２に示す構成から直線表示のための構成を抽出して描いた機能ブロック図である。直線を表示する場合は、ＣＰＵ３が直線の始点座標、終点座標、線幅、線色、始点円描画、終点円描画を指定するデータ等の属性データを直線属性テーブル１５ｂに設定する。直線描画ブロックＲＢ（図２における直線プレーンジェネレータ２２、直線レンダリングプロセッサ２３が対応）は表示する直線毎に直線属性テーブル１５ｂの設定データを読み出し、そこに設定された属性にしたがって、表示位置の計算を行い、ラインバッファ２０ａ、２０ｂ上の表示位置に属性データの線色に対応するカラーデータを描画する。
【００２１】
表示インタフェースブロックＤＩ（図２におけるフレームデータコントローラ２７、ＤＡＣ２８ａ〜２８ｃが対応）は、ＣＲＴＣブロック２６において生成されたモニタ４のスキャンタイミングにしたがって、ラインバッファ２０ａ、２０ｂからカラーデータを読み出し、モニタ４ヘドットデータとして送出する。
【００２２】
ラインバッファ２０ａ、２０ｂは描画用、表示用のダブルバッファで構成され、１表示ライン毎に描画と表示を切り替える。モニタ４は０ラインからNラインを順次表示する。ラインバッファ方式では、図５に示すように、２つのラインバッファ２０ａ、２０ｂがそれぞれ描画と表示を繰り返し行う。例えば、ラインバッファ２０ａが０ライン目を表示している間は、他方のラインバッファ２０ｂに１ライン目の表示データを描画する。０ライン目の表示が終了した時点で、ラインバッファ２０ａ、２０ｂの描画と表示を切り替え、ラインバッファ２０ｂに描画した１ライン目のデータを表示する。１ライン目を表示している間に、他方のラインバッファ２０ａには２ライン目の表示データを描画する。ラインバッファ方式はフレームバッファ方式に比べてメモリ容量が少なくて済むという利点があるが、前ラインでの描画パラメータを保持できないという欠点がある。
【００２３】
図６に示す始点(LSX, LSY)から終点(LEX,LEY)へ幅LWの直線を描画する場合、ラインバッファ方式で描画するために描画ラインYN毎に、描画開始ドットＤＲＳ、描画終了ドットＤＲＥを計算し、ＤＲＳからＤＲＥまでのドットに対応するラインバッファアドレスに線色で指定された色のカラーデータを書き込む。また、始点円描画、終点円描画を指定するデータが共に”１”であった場合は、同図に破線で示すように、始点、終点において線幅LWを直径とする円を想定し、その円の内部にもカラーデータを書き込む。
【００２４】
次に、上述した直線描画処理の過程を図７〜図１８を参照して詳細に説明する。
図７は直線描画処理の過程を示すフローチャートである。直線描画ブロックＲＢ（図１）は、まず、直線属性テーブル１５ｂから直線属性データをロードする（ステップＳａ１）。次に、ロードした属性データに基づいて始点円、終点円を除く直線描画を行う（ステップＳａ２）。次に、属性データの始点円描画を指定するデータがＯＮ（”１”）であるか否かを判断し（ステップＳａ３）、ＯＮであった場合は始点円描画処理を行い（ステップＳａ４）、ＯＮでなかった場合はステップＳａ５へ進む。ステップＳａ５では、属性データの終点円描画を指定するデータがＯＮ（”１”）であるか否かを判断し（ステップＳａ５）、ＯＮであった場合は終点円描画処理を行い（ステップＳａ６）、ＯＮでなかった場合はステップＳａ７へ進む。ステップＳａ７では、描画処理が終了した直線が現在処理中のレイヤにおける最終直線であるか否かを判断し、最終直線であった場合は直線描画処理を終了し、最終直線でなかった場合は、ステップＳａ１へ戻り、次の直線の描画処理を行う。
【００２５】
図８〜図１６は上述したステップＳａ２の直線描画処理を説明するための図である。図図９は描画基準点を説明するための図である。図９に示すように、線幅LWが偶数幅（偶数ドット幅）の場合はグリッド上の始点および終点座標がそのまま描画基準点となり、線幅LWが奇数幅の場合はグリッドの始点および終点の座標それぞれのＸ座標およびＹ座標に0.5を加算した点が描画基準点となる。ここで、奇数幅の場合に、描画基準点をずらすのは、直線を滑らかに表示するためである。また、以下の説明においては、始点、終点のＸ、Ｙ座標をそれぞれ次の表示によって表す。
始点（LSX,LSY）
終点（LEX,LEY）
また、座標の原点をモニタの左上角とする。
【００２６】
以下、図８のフローチャートの各ステップＳ１〜Ｓ１２について順に説明する。
（Ｓ１）直線属性テーブルデータロード
直線描画ブロックＲＢ（図１）は、モニタ４の各走査線の走査開始前において、直線属性テーブル１５ｂから直線属性データを順次読み出し描画する。この属性データには、直線の始点座標、終点座標、線幅、線色を示すデータが含まれている。
【００２７】
（Ｓ２）Ｙ方向描画範囲の計算
描画を行う走査線(Ｙ＝YNとする)が、描画すべき直線内であるか（直線に交差するか）否かを判定するために、直線描画範囲（Y方向の描画範囲）の最小値Ymin、最大値Ymaxをそれぞれ次の式によって求める。この直線描画範囲は直線の幅が奇数幅であるか、偶数幅であるかによって異なる。
奇数幅  Ymin＝min(LSY,LEY)+0.5-LW/2
Ymax＝max(LSY,LEY)+0.5+LW/2
偶数幅  Ymin＝min(LSY,LEY)-LW/2
Ymax＝max(LSY,LEY)+LW/2
ここで、min（   ，  ）、max（   ，  ）はそれぞれ小の方をとる、大の方をとるという意味の関数である。また、「0.5」は、図９に示すように、線幅が奇数の場合に始点、終点の座標と描画基準点とをずらすための値である。この0.5ずらすことによって、直線表示の不自然さを少なくすることができる。
【００２８】
また、走査線が上記YminとYmaxの間であって、次の端点処理範囲内であった時は端点処理を行った後、描画範囲内か否かを判断する。
奇数幅  LSY+0.5-LW/2≦YN＜LSY+0.5+LW/2
LEY+0.5-LW/2≦YN＜LEY+0.5+LW/2
偶数幅  LSY-LW/2≦YN＜LSY+LW/2
LEY-LW/2≦YN＜LEY+LW/2
なお、端点処理については後述する。
【００２９】
（Ｓ３）描画範囲内か否かの判定
描画対象の走査線がYminより小の場合、あるいは、Ymaxより大の場合は描画範囲外となり、その直線についての描画処理は行われず（ステップＳ３の判断が「ＮＯ」）次の直線の処理へ進む。また、上記端点処理範囲内の場合は、端点処理を行った後、描画範囲内か否かが判断される。端点処理を行った後、描画範囲内と判断された場合、および、描画対象の走査線が上記YminとYmaxの間であって、端点処理範囲より内側であった場合は以下の描画処理が行われる（ステップＳ３の判断が「ＹＥＳ」）。
【００３０】
（Ｓ４）傾きの計算、方向の判定
直線描画は始点から終点に向かって描画を行う。そのため始点と終点の位置により描画方法が異なる。また、直線の傾き(|LEX-LSX|/|LEY-LSY|の値）によっても描画方法が異なる。そこで、描画に先立って直線の傾きおよび直線の方向を求める。
【００３１】
○傾きの計算
直線の傾きDX、DYの値を計算する。いま、直線を図１０に符号Ｌによって示すものとすると、傾きDX、DYは次の式によって求められる。
DX＝Lx/Ly＝（LEX-LSX）/（LEY-LSY)
DY＝Ly/Lx＝（LEY-LSY）/（LEX-LSX)
この傾きDX、DYは、実際には次のように計算する。まず、
△X=1/（LEX-LSX）
△Y=1/ (LEY-LSY）
を求める。この△X、△Yは逆数ROMに予め複数の計算値を記憶させておく。次に、
DX= (LEX-LSX) ×△Y
DY=（LEY-LSY）×△X
なる演算を行って傾きDX、DYを求める。
【００３２】
○方向の判定
いま、図１１に示す直交座標における原点を直線の始点とし、直線終点がどの領域にあるかによって直線の方向を判定する。図１１における斜めの線は直交座標軸に対し４５度の直線である。そして、直線の終点が図に示すハッチングを付した領域以外にある場合を水平方向直線、ハッチングを付した領域にある場合を垂直方向直線、Ｘ軸上にある場合を水平直線、Ｙ軸上にある場合を垂直直線とし、各直線毎に描画処理方法を分けている。
具体的には、次の演算によって直線種別が求められる。
|LEX-LSX|/|LEY-LSY|＞1:水平方向直線
|LEX-LSX|/|LEY-LSY|≦1:垂直方向直線
LEX-LSX=0  LEY-LSY≠0 ：垂直直線
LEX-LSX≠0  LEY-LSY=0 :水平直線
【００３３】
なお、図の領域０〜３は次の式から求められる。
LEX-LSX≧O  LEY-LSY≧0  領域０
LEX-LSX＜O  LEY-LSY≧0  領域１
LEX-LSX＜0  LEY-LSY＜0  領域２
LEX-LSX≧0  LEY-LSY＜0  領域３
【００３４】
（Ｓ５〜Ｓ７）直線種別の判定
上記の演算結果にしたがって直線種別が判定され、その判定結果にしたがって次の各処理に移行する。
垂直方向直線→ステップＳ８
水平方向直線→ステップＳ９
垂直直線→ステップＳ１０
水平直線→ステップＳ１１
【００３５】
（Ｓ８）垂直方向直線描画
垂直方向直線の描画の過程を図１２〜図１５を参照して説明する。
(1)直線中心点XNの計算
始点と終点を結ぶ直線Ｌ１（図１２）と描画対象の走査線を表すラインＨ（Y=YN+0.5）の交差する点のＸ座標XNを次式によって求める。Ｘ座標XNは奇数幅と偶数幅で求め方が異なる。
奇数幅  XN =(LSX+0.5) + ((YN+0.5 ) - (LSY+0.5)) ×DX
偶数幅  XN = LSX      + ((YN+0.5 ) -  LSY     ) ×DX
【００３６】
(2)描画実行幅Wdrの計算
設定された線幅LW（図６）から実行幅を計算する。この計算は、実際にはＲＯＭに複数の計算結果を用意しておき、それを読み出すことによって求める。
Wdr = round(√(1+ |DX|２)× LW,0)
なお、round（Ａ，0）はＡの小数点以下を４捨５入する関数である。
(3)ラインＨと直線の左側線Ｌ２との交点の座標XLr、直線の右側線Ｌ３との交点の座標XRrを次式によって求める。
XLr = XN-Wdr/2
XRr = XN+Wdr/2
【００３７】
(4)Ｘ方向描画制限値XMAX、XMINの計算
走査線のＹ座標YNが前述した端点処理範囲内（ステップＳ２参照）の時は、Ｘ方向の描画範囲から描画制限値XMAX、XMINを求め、その制限値の範囲内において描画ドットを求める（端点処理という）。Ｘ方向の描画範囲は、図１３に示すように、直線Ｌの始点および終点において直線Ｌに直角に引いた直線Ｍ１、Ｍ２の間である。そして、描画制限値XMAX、XMINは次の過程によって求められる。
【００３８】
まず、図１４に示す直線の始点(LSX, LSY)によって決まるＸ方向描画範囲XSlimitを次式によって求める。
奇数幅  XSlimit = (LSX+0.5)-((YN+0.5）-（LSY+0.5))× DY
偶数幅  XSlimit =  LSX     -((YN+0.5）-  LSY     )× DY
次に、図１５に示す直線の終点(LEX, LEY)によって決まるＸ方向描画範囲XElimitを次式によって求める。
奇数幅  XElimit = (LEX+0.5)-((YN+0.5）-（LEY+0.5))× DY
偶数幅  XElimit =  LEX     -((YN+0.5）-  LEY     )× DY
【００３９】
Ｘ方向描画制限値XMIN、XMAXは図１１に示す領域0〜3、XSlimit、XElimitから以下のように決まる。
領域0 : XMIN = XSlimit    XMAX = XElinit
領域1 : XMIN = XElimit    XMAX = XSlimit
領域2 : XMIN = XElimit    XMAX = XSlimit
領域3 : XMIN = XSlimit    XMAX = XElimit
【００４０】
(5)描画開始ドッド(DRS)及び描画終了ドット(DRE)の計算
これまでに計算したXLr、XRr、XMIN、XMAXの値より描画開始ドットDRS、描画終了ドットDREを以下の式によって計算する。
DRS = round(max(XLr、XMIN),0)
DRE = round(min(XRr、XMAX),0)
(6)ラインバッファヘの描画
DRSからDREまでのドットに対応したラインバッファのアドレスに、指定された線色データを書き込む（図１４、図１５のハッチング参照）。ただしこの場合、DREの１つ前のドットまでで、DREのドットは含まれない。
【００４１】
（Ｓ９）水平方向直線描画
水平方向直線の描画の過程を図１６を参照して説明する。
(1)描画実行幅Wdrの計算
設定された線幅LWから実行幅Wdrを計算する。ここで、実行幅Wdrは、図１６に示すように走査線に対し垂直方向となる。この計算は、実際にはＲＯＭに複数の計算結果を用意しておき、それを読み出すことによって求める。
Wdr = round(√(1+ |DY|２)× LW,0)
【００４２】
(2)直線の左端点のＸ座標XLr、右端点のＸ座標XRrの計算
XLrは奇数幅と偶数幅および描画領域で求め方が異なる。
○描画領域0,2
奇数幅  XLr=(LSX+0.5)+((YN+0.5)-(LSY+0.5)-Wdr/2)×DX  
偶数幅  XLr=LSX      +((YN+0.5)- LSY    )-Wdr/2)×DX
○描画領域1,3
奇数幅  XLr=(LSX+0.5)+((YN+0.5)- LSY+0.5)+Wdr/2)×DX
偶数幅  XLr= LSX     +((YN+0.5)- LSY    )+Wdr/2)×DX
XRrも奇数幅と偶数幅および描画領域で求め方が異なる。
○描画領域0,2
奇数幅  XRr=(LSX+0.5)+((YN+0.5)-(LSY+0.5)+Wdr/2)×DX  
偶数幅  XRr=LSX      +((YN+0.5)- LSY    )+Wdr/2)×DX
○描画領域1,3
奇数幅  XRr=(LSX+0.5)+((YN+0.5)- LSY+0.5)-Wdr/2)×DX
偶数幅  XRr= LSX     +((YN+0.5)- LSY    )-Wdr/2)×DX
【００４３】
(3)Ｘ方向描画制限値XMAX、XMINの計算
この計算は前述した（Ｓ８）垂直方向直線描画の項目(4)と全く同じである。
(4)描画開始ドット(DRS)及び描画終了ドット(DRE)の計算
この計算も前述した（Ｓ８）垂直方向直線描画の項目(5)と全く同じである。
(5)ラインバッファヘの描画
DRSからDREまでのドットに対応したラインバッファのアドレスに、指定された線色データを書き込む（図１６のハッチング参照）。ただし、DREの１つ前のドットまでで、DREのドットは含まれない。DRS≧DREであった場合はラインバッファにデータを書き込まない。
【００４４】
（Ｓ１０）垂直直線描画
垂直直線描画（LEXーLSX＝O  LEY-LSY≠0）の場合は以下の手順で描画を行う。
(1)Ｙ方向描画範囲の計算
垂直直線描画の場合のＹ方向描画範囲は他の描画方法と異なり、次式によって計算されるYmin、Ymaxが、Ymin≦YN＜Ymaxの時のみ描画を実行する。Ymin、Ymaxの計算は奇数幅と偶数幅で異なる。
奇数幅  Ymin = min(LSY,LEY) + 1
Ymax = max(LSY,LEY) + 1
偶数幅  Ymin = min(LSY,LEY)
Ymax - max(LSY,LEY)
【００４５】
(2)描画開始ドットDRS及び描画終了ドットDREの計算
DRS、DREの計算は奇数幅と偶数幅で異なる。
奇数幅  DRS = LSX+0.5-LW/2
ORE = LSX+0.5+LW/2
偶数幅  DRS = LSX-LW/2
ORE = LSX+LW/2
(3)ラインバッファヘの描画
DRSからDREまでのドットに対応したラインバッファのアドレスに、指定された線色データを書き込む。ただし、DREの１つ前のドットまでで、DREのドットは含まれない。
【００４６】
（Ｓ１１）水平直線描画
水平直線描画（LEX-LSX≠O  LEY-LSY＝0）の場合以下の手順で描画を行う。
(1)描画開始ドットDRS及び描画終了ドットDREの計算
DRS、DREの計算は奇数幅と偶数幅で異なる。
奇数幅  DRS = min(LSX,LEX)+1
DRE = max(LSX,LEX)+1
偶数幅  DRS = min(LSX,LEX)
DRE = nax(LSX,LEX)
【００４７】
(2)ラインバッファヘの描画
DRSからDREまでのドットに対応したラインバッファのアドレスに、指定された線色データを書き込む。ただし、DREの１つ前のドットまでで、DREのドットは含まれない。
【００４８】
以上が、図７の直線描画処理（ステップＳａ２）である。次に、始点円描画処理（ステップＳａ４）、終点円描画処理（ステップＳａ６）について図１７、図１８を参照して説明する。
始点円、終点円の描画は次の手順によって行われる。
（Ｅ−１）走査線YNが円の描画範囲内であるかの判定
（Ｅ−２）Ｘ方向描画範囲の計算
（Ｅ−３）描画ドットを求める
【００４９】
以下、各処理を順次説明する。
（Ｅ−１）走査線YNが円の描画範囲内であるかの判定
始点円、終点円の中心は、図１７に示すように、線幅が偶数幅の場合はグリッド線上となり、奇数幅の場合はグリッド線の中間となる。したがって、Ｙ方向の描画範囲は奇数幅と偶数幅で計算方法が異なり、次のようになる。なお、この範囲は、前述した端点処理の範囲と同じである。
奇数幅  LSY+0.5-LW/2≦YN＜LSY+0.5+LW/2    (始点に対する描画範囲）
LEY+0.5-LW/2≦YN＜LEY+0.5+LW/2   （終点に対する描画範囲）
偶数幅  LSY   - LW/2≦YN＜LSY    +LW/2   （始点に対する描画範囲）
LEY   - LW/2≦YN＜LEY    +LW/2   （終点に対する描画範囲）
【００５０】
（Ｅ−２）Ｘ方向描画範囲の計算
Ｘ方向描画範囲は奇数幅と偶数幅で計算方法が異なり、描画範囲の最左端のドットＤＲＳのＸ座標XL（図１７参照）、最右端のドットＤＲＥのＸ座標XR（図１７参照）はそれぞれ次のようになる。
○始点に対する計算
奇数幅
XL=LSX+0.5-LW/2
XR=LSX+0.5+LW/2
偶数幅
XL=LSX-LW/2
XR=LSX+LW/2
○終点に対する計算
奇数幅
XL=LEX+0.5-LW/2
XR=LEX+0.5+LW/2
偶数幅
XL=LEX-LW/2
XR=LEX+LW/2
【００５１】
（Ｅ−３）描画ドットを求める
円の描画データは線幅１〜１６について予め作成し、円ＲＯＭに記憶させておく。図１８は円ＲＯＭに記憶された描画データを説明するための図であり、線幅LWが１６の場合（偶数幅）と１５の場合（奇数幅）について示している。この図に示すように、円ＲＯＭには円の１／４の部分について描画データが記憶され、また、円内の場合（描画ドットの場合）はデータ”１”が記憶され、円外の場合はデータ”０”が記憶されている。そして、この円ＲＯＭ内の１ビットのデータがＹアドレスY_ADとＸアドレスX_ADによって読み出される。例えば、LW＝１６の場合において、ＹアドレスY_AD＝３、ＸアドレスX_AD＝３の場合は描画を指示するデータ”１”が読み出され、ＹアドレスY_AD＝６、ＸアドレスX_AD＝７の場合は描画せずを指示するデータ”０”が読み出される。
【００５２】
次に、ＹアドレスY_ADとＸアドレスX_ADを求める計算について説明する。
○ＹアドレスY_ADの計算
走査線の座標YNから円ＲＯＭのＹアドレスを計算する。Ｙアドレスの計算は奇数幅と偶数幅で計算方法が異なる。
始点に対する計算
奇数幅  Y_AD=abs(YN-LSY)
偶数幅  Y_AD=INT(abs(YN+0.5-LSY))
終点に対する計算
奇数幅  Y_AD=abs(YN−LEY)
偶数幅  Y_AD=INT(abs(YN+0.5-LEY))
なお、abs（  ）は括弧内の値の絶対値を求める演算式であり、INT（  ）は括弧内の値の整数部分を求める演算式である。
【００５３】
○ＸアドレスX_ADの計算
円描画では前述したＸ方向描画範囲において求めたドットＤＲＳからドットＤＲＥまでを描画対象とする。描画対象ドットの座標XNに対する円ＲＯＭのＸアドレスX_ADを次の式によって計算する。ＸアドレスX_ADの計算は奇数幅と偶数幅で異なる。
始点に対する計算
奇数幅  X_AD=abs(XN-LSX)
偶数幅  X_=INT(abs(XN+0.5-LSX))
終点に対する計算
奇数幅  X_=abs(XN-LEX)
偶数幅  X_=INT(abs(XN+0.5-LEX))
上述した計算によって求めたＹアドレスY_ADおよびＸアドレスX_ADに基づいて円ＲＯＭから描画データを読み出し、読み出したデータが”１”の場合はその描画対象ドットに直線の線色のカラーコードを書き込み、”０”の場合は書き込みを行わない。
【００５４】
なお、上述した実施形態においては、円ＲＯＭの１アドレスについて１ビットの描画データを記憶させているが、これに代えて複数ビットの描画データを記憶させてもよい。これにより、円のαブレンディング描画を行うことが可能となる。ここで、αブレンディングとは、描画対象画像とバック画像との混合色によって画像表示をすることである。例えば、円ＲＯＭに４ビットのデータを記憶させた場合、次の１６段階のαブレンディングが可能となる。
円ＲＯＭデータ         αブレンディング演算式
００００          （円）×16/16＋（バック画像）×0/16
０００１          （円）×15/16＋（バック画像）×1/16
・・・・・・・・・・・・・・・
１１１１          （円）×１/16＋（バック画像）×15/16
なお、（円）は円のカラーコードを指し、（バック画像）はバック画像のカラーコードを指す。また、αブレンディングを行わない場合は次のように描画する。
円ＲＯＭデータ               描画データ
００００〜０１１１         円のカラーコードを描画
１０００〜１１１１         描画せず
【００５５】
また、上述したαブレンディング処理は円の外周線のアンチェイリアス処理に適用することができる。ここで、アンチェイリアス処理とは、ドット表示による画像表示を行う場合に、斜めの境界線がギザギザに表示されることを防止する処理であり、円の外周部（境界線）のドット描画においてαブレンディング処理を行うことによってアンチェイリアスを実行することができる。例えば、図１８の線幅LW＝１６の場合において、ＹアドレスY_AD＝１、ＸアドレスX_AD＝７の記憶データは、１ビットの場合は”１”となるが、４ビットの場合は、円内の面積と円外の面積の比が約１５：１であることを考慮し、データ”０００１”を記憶させておく。この場合、同ドットの表示は、
（円）×15/16＋（バック画像）×1/16
なるカラーデータによって表示される。円の外周線沿いの他のデータについても同様である。この処理により、円に含まれる面積が大きいドットほど円のカラーが強く表示され、円に含まれる面積が小さくなるに従いバック画像のカラーが強く表示される。この処理により、円外周線のギザギザが柔らかくなる。
【産業上の利用可能性】
【００５６】
ディスプレイに幅のある直線を表示する場合に使用される。
【図面の簡単な説明】
【００５７】
【図１】この発明の第１の実施形態による画像処理装置の要部の構成を示す機能ブロック図である。
【図２】同実施形態による画像処理装置の構成を示すブロック図である。
【図３】同画像処理装置における汎用テーブル１５の記憶内容を示す図である。
【図４】同画像処理装置における表示レイヤを示す図である。
【図５】同画像処理装置におけるラインバッファ２０ａ、２０ｂを説明するための図である。
【図６】同画像処理装置における直線表示の概要を説明するための直線図である。
【図７】同画像処理装置の直線表示動作を説明するためのフローチャートである。
【図８】図７における直線描画（ステップＳａ２）の処理を示すフローチャートである。
【図９】直線の始点および終点の座標を説明するための図である。
【図１０】直線の傾きを説明するための図である。
【図１１】直線の傾きに基づく直線の区分けを説明するための図である。
【図１２】垂直方向直線の描画を説明するための図である。
【図１３】描画領域を説明するための図である。
【図１４】垂直方向直線の描画における端点処理を説明するための図である。
【図１５】垂直方向直線の描画における端点処理を説明するための図である。
【図１６】水平方向直線の描画を説明するための図である。
【図１７】直線端部の始点円、終点円を説明するための図である。
【図１８】始点円描画、終点円描画に使用される円ＲＯＭ内のデータを説明するための図である。
【図１９】従来の直線表示の問題点および本発明の効果を説明するための図である。
【符号の説明】
【００５８】
３…ＣＰＵ、４…モニタ、１５…汎用テーブル、１５ｂ…直線属性テーブル、２０ａ、２０ｂ…ラインバッファ、２２…直線プレーンジェネレータ、２３…直線レンダリングプロセッサ、ＲＢ…直線描画ブロック。
【図１】
2005257886.tif 000003
【図２】
2005257886.tif 000004
【図３】
2005257886.tif 000005
【図４】
2005257886.tif 000006
【図５】
2005257886.tif 000007
【図６】
2005257886.tif 000008
【図７】
2005257886.tif 000009
【図８】
2005257886.tif 000010
【図９】
2005257886.tif 000011
【図１０】
2005257886.tif 000012
【図１１】
2005257886.tif 000013
【図１２】
2005257886.tif 000014
【図１３】
2005257886.tif 000015
【図１４】
2005257886.tif 000016
【図１５】
2005257886.tif 000017
【図１６】
2005257886.tif 000018
【図１７】
2005257886.tif 000019
【図１８】
2005257886.tif 000020
【図１９】
2005257886.tif 000021