(57)【要約】【課題】  幅がある直線表示を行うことができるラインバッファ方式の画像処理装置を提供する。【解決手段】  直線描画ブロックＲＢは表示する直線毎に直線属性テーブル１５ｂに設定されている属性データを読み出す。そして、直線の始点座標、終点座標および線幅に基づいて直線の垂直方向の描画範囲を計算し、描画対象の走査線が描画範囲外であった時は直線の描画を中止する。走査線が描画範囲内であった時は、走査線と直線の左側線、右側線との各交点の座標を求め、求めた座標値に基づいて描画ドットを決定する。そして、決定された描画ドットに対応するラインバッファ２０ａ、２０ｂの記憶位置に表示データを書き込む。【選択図】    図１
2005251076.tif 000002
【特許請求の範囲】
【請求項１】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、
前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を計算し、前記走査線が描画範囲外であった時直線の描画を中止する第１の処理と、
前記走査線が描画範囲内であった時、前記走査線と直線の左側線、右側線との各交点の座標を求め、求めた座標値に基づいて描画ドットを決定する第２の処理と、
決定された描画ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第３の処理と、
を有することを特徴とする画像処理方法。
【請求項２】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、
前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を計算し、前記走査線が描画範囲外であった時直線の描画を中止する第１の処理と、
前記走査線が描画範囲内であった時、前記直線の傾きを前記始点座標および終点座標に基づいて計算する第２の処理と、
前記直線の傾きが走査線に対し４５度〜１３５度であった場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記直線の中心線と前記走査線の交点の座標を求めると共に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線方向長さを計算し、前記交点座標および前記走査線方向長さから前記走査線と前記直線の左側線、右側線との各交点の座標を求める第３の処理と、
前記直線の傾きが前記走査線に対し０度〜４５度または１３５度〜１８０度であった場合に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線垂直方向長さを計算し、前記直線の始点座標、終点座標、前記走査線垂直方向長さおよび前記走査線の座標から前記走査線と前記直線の左側線、右側線との各交点の座標を求める第４の処理と、
前記第３または第４の処理によって求めた座標値に基づいて描画ドットを決定する第５の処理と、
決定された描画ドットに対応するラインバッファの記憶位置に表示データを書き込む第６の処理と、
を有することを特徴とする画像処理方法。
【請求項３】
前記走査線が、前記直線の予め決められた端点範囲を通過するか否かを判断する第７の処理と、
前記走査線が前記端点範囲を通過する場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記走査線方向の描画ドットの限界値を求める第８の処理と、
を有し、前記第６の処理は、前記第７の処理の結果が「通過」であった場合に、前記ラインバッファの記憶位置に表示データを書き込む際において前記第８の処理によって求められた限界値の外の描画ドットの書き込みを行わないことを特徴とする請求項２に記載の画像処理方法。
【請求項４】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、
前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を演算する演算手段と、
前記走査線が前記演算手段によって求められた描画範囲内であった時直線描画の指示を出力する制御手段と、
前記制御手段からの指示を受け、前記走査線と前記直線の左側線、右側線との各交点の座標を求める交点座標演算手段と、
前記交点座標演算手段によって求められた座標値に基づいて描画ドットを決定する描画ドット決定手段と、
決定された描画ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段と、
を具備することを特徴とする画像処理装置。
【請求項５】
表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、
前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を演算する第１の演算手段と、
前記走査線が前記第１の演算手段によって演算された描画範囲内であった時直線描画の指示を出力する制御手段と、
前記直線描画の指示を受けて前記直線の始点座標および終点座標に基づいて前記直線の傾きを演算する第２の演算手段と、
前記直線の傾きが走査線に対し４５度〜１３５度であった場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記直線の中心線と前記走査線の交点の座標を求めると共に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線方向長さを計算し、前記交点座標および前記走査線方向長さから前記走査線と直線の左側線、右側線との各交点の座標を求める第３の演算手段と、
前記直線の傾きが走査線に対し０度〜４５度または１３５度〜１８０度であった場合は、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線垂直方向長さを計算し、前記直線の始点座標、終点座標、前記走査線垂直方向長さおよび前記走査線の座標から前記走査線と前記直線の左側線、右側線との各交点の座標を求める第４の演算手段と、
前記第３または第４の演算手段によって求められた座標値に基づいて描画ドットを決定する描画ドット決定手段と、
決定された描画ドットに対応するラインバッファの記憶位置に表示データを書き込む書込手段と、
を具備することを特徴とする画像処理装置。
【請求項６】
前記走査線が、前記直線の予め決められた端点範囲を通過するか否かを判断する判断手段と、
前記走査線が前記端点範囲を通過する場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記走査線方向の描画ドットの限界値を求める第５の演算手段と、
を有し、前記書込手段は、前記判断手段の結果が「通過」であった場合に、前記ラインバッファの記憶位置に表示データを書き込む際において前記第５の演算手段によって求められた限界値の外の描画ドットの書き込みを行わないことを特徴とする請求項５に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、幅のある直線の表示処理の改良を図った画像処理方法および装置に関する。
【背景技術】
【０００２】
従来、各種のソフトウエアにおいて、モニタに複数の直線を表示することはしばしば行われ、また、単に幅のない直線だけでなく、幅のある直線の表示も必要とされる。この幅のある直線の表示においては、通常、直線の始点と終点の座標および直線の幅がＣＰＵ（中央処理装置）によって指定され、画像処理装置がその３データをドットデータに変換し、モニタの２次元平面の表示ドット数に対応する記憶容量を有するフレームバッファに書き込む。このフレームバッファ内のドットデータが液晶等によるモニタへ出力されて直線表示が行われる（特許文献１参照）。なお、フレームバッファとしては、書き込み用／読み出し用の２バッファが設けられる。
【特許文献１】特開平04-175887号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、周知のように、画像処理装置は、通常、ＬＳＩによって作成され、フレームバッファも１チップＬＳＩの中に作成されることが望ましい。しかし、フレームバッファは記憶容量が大きく、大きなチップ面積を必要とする。したがって、画像処理装置においては、フレームバッファではなく、１表示ライン（走査線）のドット数に対応する記憶容量のラインバッファの方が記憶容量が小さくて済むため、低コスト化、小型化の点で好ましい。
しかしながら、直線の始点と終点の座標および直線の幅の３データを所定ラインのドットデータに変換する処理は時間がかかり、このため、従来、ラインバッファによっては幅がある直線表示ができないという問題があった。
【０００４】
また、従来の画像処理装置にあっては、幅のある直線を表示する時、図１６に示すように、端部がモニタの走査線に対して平行あるいは直交する直線となり、図１７に示すように、描画する直線に対して端部が直交する直線にはならない問題があった。
本発明は上記事情を考慮してなされたもので、その目的は、ラインバッファによって幅がある直線の表示を可能とする画像処理装置を提供することにある。また、この発明の他の目的は、端部が描画する直線に対して直交する直線となる画像処理装置を提供することにある。
【課題を解決するための手段】
【０００５】
この発明は上記の課題を解決するためになされたもので、請求項１に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を計算し、前記走査線が描画範囲外であった時直線の描画を中止する第１の処理と、前記走査線が描画範囲内であった時、前記走査線と直線の左側線、右側線との各交点の座標を求め、求めた座標値に基づいて描画ドットを決定する第２の処理と、決定された描画ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む第３の処理とを有することを特徴とする画像処理方法である。
【０００６】
請求項２に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理方法において、前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を計算し、前記走査線が描画範囲外であった時直線の描画を中止する第１の処理と、前記走査線が描画範囲内であった時、前記直線の傾きを前記始点座標および終点座標に基づいて計算する第２の処理と、前記直線の傾きが走査線に対し４５度〜１３５度であった場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記直線の中心線と前記走査線の交点の座標を求めると共に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線方向長さを計算し、前記交点座標および前記走査線方向長さから前記走査線と前記直線の左側線、右側線との各交点の座標を求める第３の処理と、前記直線の傾きが前記走査線に対し０度〜４５度または１３５度〜１８０度であった場合に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線垂直方向長さを計算し、前記直線の始点座標、終点座標、前記走査線垂直方向長さおよび前記走査線の座標から前記走査線と前記直線の左側線、右側線との各交点の座標を求める第４の処理と、前記第３または第４の処理によって求めた座標値に基づいて描画ドットを決定する第５の処理と、決定された描画ドットに対応するラインバッファの記憶位置に表示データを書き込む第６の処理とを有することを特徴とする画像処理方法である。
【０００７】
請求項３に記載の発明は、請求項２に記載の画像処理方法において、前記走査線が、前記直線の予め決められた端点範囲を通過するか否かを判断する第７の処理と、前記走査線が前記端点範囲を通過する場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記走査線方向の描画ドットの限界値を求める第８の処理とを有し、前記第６の処理は、前記第７の処理の結果が「通過」であった場合に、前記ラインバッファの記憶位置に表示データを書き込む際において前記第８の処理によって求められた限界値の外の描画ドットの書き込みを行わないことを特徴とする。
【０００８】
請求項４に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を演算する演算手段と、前記走査線が前記演算手段によって求められた描画範囲内であった時直線描画の指示を出力する制御手段と、前記制御手段からの指示を受け、前記走査線と前記直線の左側線、右側線との各交点の座標を求める交点座標演算手段と、前記交点座標演算手段によって求められた座標値に基づいて描画ドットを決定する描画ドット決定手段と、決定された描画ドットに対応する前記ラインバッファの記憶位置に表示データを書き込む書込手段とを具備することを特徴とする画像処理装置である。
【０００９】
請求項５に記載の発明は、表示装置の走査線の各表示ドットに対応する記憶位置を有するラインバッファに、前記走査線の走査開始前に直線の表示データを書き込み、該書き込んだ表示データを前記走査線の走査タイミングに合わせて前記表示装置へ出力して前記直線の表示を行う画像処理装置において、前記直線の始点座標、終点座標および線幅に基づいて前記直線の垂直方向の描画範囲を演算する第１の演算手段と、前記走査線が前記第１の演算手段によって演算された描画範囲内であった時直線描画の指示を出力する制御手段と、前記直線描画の指示を受けて前記直線の始点座標および終点座標に基づいて前記直線の傾きを演算する第２の演算手段と、前記直線の傾きが走査線に対し４５度〜１３５度であった場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記直線の中心線と前記走査線の交点の座標を求めると共に、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線方向長さを計算し、前記交点座標および前記走査線方向長さから前記走査線と直線の左側線、右側線との各交点の座標を求める第３の演算手段と、前記直線の傾きが走査線に対し０度〜４５度または１３５度〜１８０度であった場合は、前記直線の始点座標、終点座標および線幅に基づいて前記直線の走査線垂直方向長さを計算し、前記直線の始点座標、終点座標、前記走査線垂直方向長さおよび前記走査線の座標から前記走査線と前記直線の左側線、右側線との各交点の座標を求める第４の演算手段と、前記第３または第４の演算手段によって求められた座標値に基づいて描画ドットを決定する描画ドット決定手段と、決定された描画ドットに対応するラインバッファの記憶位置に表示データを書き込む書込手段とを具備することを特徴とする画像処理装置である。
【００１０】
請求項６に記載の発明は、請求項５に記載の画像処理装置において、前記走査線が、前記直線の予め決められた端点範囲を通過するか否かを判断する判断手段と、前記走査線が前記端点範囲を通過する場合に、前記直線の始点座標、終点座標および前記走査線の座標に基づいて前記走査線方向の描画ドットの限界値を求める第５の演算手段とを有し、前記書込手段は、前記判断手段の結果が「通過」であった場合に、前記ラインバッファの記憶位置に表示データを書き込む際において前記第５の演算手段によって求められた限界値の外の描画ドットの書き込みを行わないことを特徴とする。
【発明の効果】
【００１１】
この発明によれば、幅がある直線の表示をラインバッファ方式による画像処理装置によって行うことができる効果がある。また、請求項３および請求項６の発明によれば、直線の端部を直線の中心線に対して直交する線とすることができ、これにより、直線端部の表示を見栄え良くすることができる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照し、この発明の実施の形態について説明する。図２はこの発明の一実施の形態によるラインバッファ方式の画像処理装置１を適用したディスプレイ装置の構成を示すブロック図である。この図において、２はスプライトパターンが記憶されたパターンメモリ、３は画像表示を制御するＣＰＵ（中央処理装置）、４はＣＲＴ（ブラウン管）によるモニタである。
【００１３】
画像処理装置１において、１１はパターンメモリインターフェイス、１２はＣＰＵインターフェイス、Ｂはバスラインである。１４はカラーコードをＲＧＢカラーデータに変換するカラーパレットである。パターンメモリ２にはスプライトパターンの画像データがカラーコードによって記憶されており、カラーパレット１４はそのカラーコードをＲＧＢカラーデータに変換するためのものである。１５は汎用テーブル、１６はデータ一時記憶用のレジスタである。汎用テーブル１５はＣＰＵ３によって書き込みが行われるテーブルであり、図３に示すように、レイヤ設定テーブル１５ａおよび直線属性テーブル１５ｂを有している。
【００１４】
レイヤ設定テーブル１５ａは、複数のレイヤから構成される。図４は各レイヤを示す図であり、この図に示すように、レイヤ＃０が最初に描画され、レイヤ＃１、＃２・・・がその上に順次上書きされる。各レイヤはスプライト表示レイヤまたは直線表示レイヤであり、スプライト表示レイヤにはスプライトの属性データが記憶され、また、直線表示レイヤには直線属性テーブル１５ｂの始点アドレス、終点アドレスが記憶される。ここで、スプライト属性データには、スプライト識別番号、表示位置を指示する表示位置データ、拡大／縮小等を指示するレンダリングデータ等がある。また、直線属性テーブル１５ｂには、直線の属性、すなわち、直線の始点座標、終点座標、直線の幅、直線の色を指定する各データが記憶される。
【００１５】
図３の例によって具体的に説明すると、現在、レイヤ設定テーブル１５ａに＃０〜＃６の７レイヤが設定されており、レイヤ＃２が直線表示レイヤであり、それ以外のレイヤ＃０、＃１、＃３〜＃６がスプライト表示レイヤとなっている。そして、レイヤ＃０、＃１、＃３〜＃６には各々１つのスプライトのスプライト属性が書き込まれている。一方、レイヤ＃２には、始点アドレスとしてアドレス「２００ｈ」が、終点アドレスとしてアドレス「２３８ｈ」が書き込まれている。この始点アドレスおよび終点アドレスが指示する直線属性テーブル１５ｂの記憶領域には、直線＃０〜＃７の８本の直線の属性が順次書き込まれている。
【００１６】
次に図２に戻り、スプライトプレーンジェネレータ１８はレイヤ設定テーブル１５ａの各レイヤから順次スプライト属性データを読み出し、読み出した属性データのスプライト識別番号をパターンメモリインターフェイス１１へ出力する。パターンメモリインターフェイス１１はその識別番号のスプライトパターンの画像データをパターンメモリ２から読み出し、スプライトプレーンジェネレータ１８へ出力する。スプライトプレーンジェネレータ１８はその画像データをカラーパレット１４へ出力してＲＧＢカラーデータに変換し、変換後のカラーデータをスプライト属性データと共にスプライトレンダリングプロセッサ１９へ出力する。
【００１７】
スプライトレンダリングプロセッサ１９は、スプライトプレーンジェネレータ１８から受けたカラーデータに対し、スプライト属性データに含まれるレンダリングデータに基づく拡大／縮小、回転等の処理を施した後ラインバッファ２０に書き込む。直線プレーンジェネレータ２２は、レイヤ設定テーブル１５ａの直線表示レイヤから始点アドレス、終点アドレスを読み出し、読み出したアドレスに基づいて直線属性テーブル１５ｂから直線属性データを読み出す。そして、読み出した直線属性データを直線レンダリングプロセッサ２３へ出力する。この場合、直線の色を指定するカラーコードをカラーパレット１４によってＲＧＢカラーデータに変換する。
【００１８】
直線レンダリングプロセッサ２３は、直線属性データに含まれる始点座標、終点座標、線幅に基づいて所定ラインに表示すべき直線の表示ドットを求め、求めた表示ドットに対応するラインバッファ２０の記憶位置に直線属性データに含まれるカラーコードをカラーパレット１４で変換したＲＧＢカラーデータを書き込む。
【００１９】
ラインバッファ２０は、モニタ４の１水平表示ラインの各表示ドットに対応する記憶スロットを有するバッファメモリであり、２個のバッファが設けられている。そして、それら２個のバッファが交互に書き込み用バッファおよび読み出し用バッファとして使用される。クロック発生回路２５は基準クロックパルスを発生し、各部へ出力する。ＣＲＴコントローラ２６は、クロック発生回路２５から出力されるクロックパルスに基づいてモニタ４を駆動する各種のパルス信号、すなわち、水平走査パルス、垂直走査パルス等を発生し、モニタ４およびフレームデータコントローラ２７へ出力する。フレームデータコントローラ２７は、ラインバッファ２０からカラーデータを読み出し、水平走査パルスに従ってＤＡＣ（ディジタル・アナログ・コンバータ）２８ａ〜２８ｃへ出力する。ＤＡＣ２８ａ〜２８ｃはカラーデータをアナログカラー信号に変換し、モニタ４へ出力する。
次に、ラインバッファ方式による直線描画の過程の概略を図１、図５、図６を参照して説明する。
【００２０】
図１は、図２に示す構成から直線表示のための構成を抽出して描いた機能ブロック図である。直線を表示する場合は、ＣＰＵ３が直線の始点座標、終点座標、線幅、線色等の属性データを直線属性テーブル１５ｂに設定する。直線描画ブロックＲＢ（図２における直線プレーンジェネレータ２２、直線レンダリングプロセッサ２３が対応）は表示する直線毎に直線属性テーブル１５ｂの設定データを読み出し、そこに設定された属性にしたがって、表示位置の計算を行い、ラインバッファ２０ａ、２０ｂ上の表示位置に属性データの線色に対応するカラーデータを描画する。
【００２１】
表示インタフェースブロックＤＩ（図２におけるフレームデータコントローラ２７、ＤＡＣ２８ａ〜２８ｃが対応）は、ＣＲＴＣブロック２６において生成されたモニタ４のスキャンタイミングにしたがって、ラインバッファ２０ａ、２０ｂからカラーデータを読み出し、モニタ４ヘドットデータとして送出する。
【００２２】
ラインバッファ２０ａ、２０ｂは描画用、表示用のダブルバッファで構成され、１表示直線毎に描画と表示を切り替える。モニタ４は０ラインからNラインを順次表示する。ラインバッファ方式では、図５に示すように、２つのラインバッファ２０ａ、２０ｂがそれぞれ描画と表示を繰り返し行う。例えば、ラインバッファ２０ａが０ライン目を表示している間は、他方のラインバッファ２０ｂに１ライン目の表示データを描画する。０ライン目の表示が終了した時点で、ラインバッファ２０ａ、２０ｂの描画と表示を切り替え、ラインバッファ２０ｂに描画した１ライン目のデータを表示する。１ライン目を表示している間に、他方のラインバッファ２０ａには２ライン目の表示データを描画する。ラインバッファ方式はフレームバッファ方式に比べてメモリ容量が少なくて済むという利点があるが、前ラインでの描画パラメータを保持できないという欠点がある。
【００２３】
図６に示す始点(LSX, LSY)から終点(LEX,LEY)へ幅LWの直線を描画する場合、ラインバッファ方式で描画するために描画ラインYN毎に、描画開始ドットＤＲＳ、描画終了ドットＤＲＥを計算し、ＤＲＳからＤＲＥまでのドットに対応するラインバッファアドレスに線色で指定された色のカラーデータを書き込む。
【００２４】
次に、上述した直線描画処理の過程を図７〜図１５を参照して詳細に説明する。
図７は直線描画処理の過程を示すフローチャート、図８は描画基準点を説明するための図である。図８に示すように、線幅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のドットは含まれない。
【産業上の利用可能性】
【００４６】
ディスプレイに幅のある直線を表示する場合に使用される。
【図面の簡単な説明】
【００４７】
【図１】この発明の第１の実施形態による画像処理装置の要部の構成を示す機能ブロック図である。
【図２】同実施形態による画像処理装置の構成を示すブロック図である。
【図３】同画像処理装置における汎用テーブル１５の記憶内容を示す図である。
【図４】同画像処理装置における表示レイヤを示す図である。
【図５】同画像処理装置におけるラインバッファ２０ａ、２０ｂを説明するための図である。
【図６】同画像処理装置における直線表示の概要を説明するための直線図である。
【図７】同画像処理装置の直線表示動作を説明するためのフローチャートである。
【図８】直線の始点および終点の座標を説明するための図である。
【図９】直線の傾きを説明するための図である。
【図１０】直線の傾きに基づく直線の区分けを説明するための図である。
【図１１】垂直方向直線の描画を説明するための図である。
【図１２】描画領域を説明するための図である。
【図１３】垂直方向直線の描画における端点処理を説明するための図である。
【図１４】垂直方向直線の描画における端点処理を説明するための図である。
【図１５】水平方向直線の描画を説明するための図である。
【図１６】従来の直線表示の問題点を説明するための図である。
【図１７】従来の直線表示の問題点を説明するための図である。
【符号の説明】
【００４８】
３…ＣＰＵ、４…モニタ、１５…汎用テーブル、１５ｂ…直線属性テーブル、２０ａ、２０ｂ…ラインバッファ、２２…直線プレーンジェネレータ、２３…直線レンダリングプロセッサ、ＲＢ…直線描画ブロック。
【図１】
2005251076.tif 000003
【図２】
2005251076.tif 000004
【図３】
2005251076.tif 000005
【図４】
2005251076.tif 000006
【図５】
2005251076.tif 000007
【図６】
2005251076.tif 000008
【図７】
2005251076.tif 000009
【図８】
2005251076.tif 000010
【図９】
2005251076.tif 000011
【図１０】
2005251076.tif 000012
【図１１】
2005251076.tif 000013
【図１２】
2005251076.tif 000014
【図１３】
2005251076.tif 000015
【図１４】
2005251076.tif 000016
【図１５】
2005251076.tif 000017
【図１６】
2005251076.tif 000018
【図１７】
2005251076.tif 000019