説明

デジタル画像表示方法、デジタル画像表示装置、デジタル画像表示プログラム、デジタル画像表示プログラムを記録した記録媒体

【課題】直線の一部を描画した時、あるいは、原画像を拡大縮小してその一部を描画した時、高速に描画ができると同時に、誤差のない正確な画像を描画する。
【解決手段】X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とし、(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、X座標X2に対応する線分上のY座標値の小数部をFとし、0.5からFを引いた値をGとし、もしもGが負の値ならばGに1を加えた値を改めてGとし、Gをu0_dを分母とする分数表現した時の分子をHとし、u0_dからHを引いた値をKとし、もしもKがu0_dと同じであれば0を改めてKとし、Kを画素カウンターの初期値とし、画素カウンターをコンピュータでインクレメントしながら線分の一部であるX座標がX2から始まる範囲をコンピュータで表示する。

【発明の詳細な説明】
【技術分野】
【0001】
本特許出願に係る発明(以後、「本発明」という)は、コンピュータによって表示画面上にデジタル画像を表示するための、あるいは、表示画面上に表示するためのデジタル画像を作成するための、デジタル画像表示方法、デジタル画像表示装置、コンピュータによって実行されるデジタル画像表示プログラム、コンピュータによって実行されるデジタル画像表示プログラムを記録したコンピュータによって読み取り可能な記録媒体に関するものである。
【0002】
特に、原画像を拡大し、その拡大された画像の一部の領域を表示するための、あるいは、表示画面上に表示するためのデジタル画像を作成するための、デジタル画像表示方法、デジタル画像表示装置、コンピュータによって実行されるデジタル画像表示プログラム、コンピュータによって実行されるデジタル画像表示プログラムを記録したコンピュータによって読み取り可能な記録媒体に関するものである。
【0003】
さらに、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部を表示画面上にデジタル画像として表示するための、あるいは、表示画面上に表示するためのデジタル画像を作成するための、デジタル画像表示方法、デジタル画像表示装置、コンピュータによって実行されるデジタル画像表示プログラム、コンピュータによって実行されるデジタル画像表示プログラムを記録したコンピュータによって読み取り可能な記録媒体に関するものである。
【背景技術】
【0004】
従来の、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その全部または一部を表示するためのデジタル画像表示方法等には、例えば、下記特許文献1に記載された「直線描画方式」があった。
【0005】
図8に、この従来の直線描画方式の一例であるブレゼンハムのアルゴリズムによって、直線を描く方法の一例を示す。
【0006】
この例は、2点、A(1,3)とB(37,12)とが与えられ、その間を結ぶ直線を、整数座標の格子点上のドットとして描くものである。例えば、この整数座標の格子点とは、CRT表示装置や液晶ディスプレイ等の画面上の各ドットに相当する。
【0007】
図8では、2点ABを結ぶ本来の直線をABを結ぶ斜線で表しており、この本来の直線を整数座標の格子点上のドットとして描いた直線を小さな連続した円の集合で表している。1つ1つの円が整数座標の格子点上に描かれた1つのドットを表している(他の図でも同様)。
【0008】
AとBは始点と終点の名前を表し、その後ろの括弧内の2つの数字は、それぞれX座標とY座標とを示す。
【0009】
この2点間を結ぶ直線は、(数1)で表される。
【0010】
【数1】

【0011】
描く直線を構成するX座標値が1から37の間である格子点の、Y座標値は、(数1)のXに1から37を代入して計算することができる。例えば、描く直線を構成するX座標値が2である格子点の、Y座標値は、1/4*2+11/4=13/4のように計算することができる。
【0012】
しかしながら、このY座標値は整数でなく、整数座標の格子点上にはない。
【0013】
そこで、この(数1)で計算したY座標値になるべく近い格子点に直線を描くため、数1の計算で得られたY座標値13/4を、小数第1桁で四捨五入して整数化する。このようにすると、3を得ることができるので、描く直線を構成するX座標値が2である格子点の、Y座標値は3とする。正確なY座標値の小数部が丁度0.5の時には、切り上げても切り捨てても構わないが、例えば、切り上げると仮定する(以後の背景技術および本発明に係る実施の形態の説明で全て同じ)。
【0014】
この手順を繰り返すことで、描く直線を構成するX座標値が1から37の間である格子点の、Y座標値を求め、直線を描くことができる。図8はこのようにして描いた状態を示している。しかしながら、この手順は小数演算を含むため、コンピュータで高速に計算することが困難である。
【0015】
そこで、ブレゼンハムのアルゴリズムでは、この直線上のY座標値は、X座標値が1増える毎に1/4増えることに着目する。
【0016】
即ち、X座標値が1増える毎に、Y座標値に1/4を加え、その結果を四捨五入するのではなく、X座標値が4増える毎に、Y座標値に1を加えることによって、X座標値が1から37の間である各格子点のY座標値を求め、同じ直線を描くことができる。さらに、この手順は小数演算を含まないため、コンピュータで高速に計算をすることができる。
【0017】
例えば、図8に示す、2点、A(1,3)とB(37,12)との間を結ぶ直線は、X座標値の初期値を1とし、終了値を37とし、Y座標値の初期値を3とし、誤差項の初期値を2とし、X座標値を1増やすのと同時に誤差項に1を加え、誤差項が4になった時にY座標値に1を加えると同時に誤差項を0に戻す。
【0018】
この手順を繰り返すことで、描く直線を構成するX座標値が1から37の間である格子点の、Y座標値を求め、直線を描くことができ、さらに、この手順は小数演算を含まないため、コンピュータで高速に計算することが容易である。
【0019】
この時、Y座標値に1を加える条件となる誤差項の値4は、描く直線の傾きを、分子を1とする分数で表現した時の分母に相当する。
【0020】
また、誤差項の初期値2は、直線の描画開始点である格子点(格子点であるから、そのY座標値は整数であり、その小数部は0)から、Y座標値が四捨五入して1繰り上がる点、即ち、Y座標値の小数部が0.5以上になるまでに1/4を加える回数(0.5−0)/(1/4)=(2/4)/(1/4)=2を、4から引いて計算することができ、この例では2である。この値はまた、0.5を分母が4である分数で表現した時の分子でもある。
【0021】
次に、同じ(数1)で表される直線ABの一部を、従来の直線描画方式の一例であるブレゼンハムのアルゴリズムによって描く方法の一例を、図9に示す。
【0022】
図9に示す例では、X座標値が10から22の範囲を描くと仮定している。
【0023】
上記の通り、ABの2点間を結ぶ直線は、(数1)で表されるから、描く直線の一部を構成するX座標値が10から22の間である格子点の、Y座標値は、(数1)のXに10から22を代入して計算することができる。例えば、描く直線を構成するX座標値が10である格子点の、Y座標値は、1/4*10+11/4=21/4のように計算することができる。しかしながら、このY座標値は整数でなく、整数座標の格子点上にはない。そこで、この計算したY座標値になるべく近い格子点に直線を描くため、計算で得られたY座標値21/4を、小数第1桁で四捨五入にて整数化する。このようにすると、5を得ることができるので、描く直線を構成するX座標値が10である格子点の、Y座標値は5とする。
【0024】
この手順を繰り返すことで、描く直線を構成するX座標値が10から22の間である格子点の、Y座標値を求め、直線を描くことができる。しかしながら上記の通り、この手順は小数演算を含むため、コンピュータで高速に計算することが困難である。
【0025】
そこで、X座標値が1増える毎に、Y座標値に1/4を加え、その結果を四捨五入するのではなく、X座標値が4増える毎に、Y座標値に1を加えることによって、X座標値が10から22の間である各格子点のY座標値を求め、直線を描く。
【0026】
例えば、図9に示す、2点AB間を結ぶ直線の、X座標値が10から22の範囲を描くには、X座標値の初期値を10とし、終了値を22とし、Y座標値の初期値を5とし、誤差項の初期値を2とし、X座標値を1増やすのと同時に誤差項に1を加え、誤差項が4になった時にY座標値に1を加えると同時に誤差項を0に戻す。
【0027】
この手順を繰り返すことで、描く直線の一部を構成するX座標値が10から22の間である格子点の、Y座標値を求め、直線の一部を描くことができ、さらに、この手順は小数演算を含まないため、コンピュータで高速に計算することが容易である。
【特許文献1】特開平4−373086号公報
【発明の開示】
【発明が解決しようとする課題】
【0028】
しかしながら、一例を図9に示す従来のブレゼンハムのアルゴリズムによって、2次元座標が指定された2点間を結ぶ直線をXY平面上の画素からなる画素集合とし、その全部または一部を表示するためのデジタル画像表示方法等では、その一部を描いた時の直線と全部を描いた時の直線とが正確に一致しないという課題があった。
【0029】
例えば、図8に示すAB間を結ぶ直線の全部を格子点上に描いた状態から、X座標値が10から22の範囲だけを取り出して、図10に示す。
【0030】
図9と図10とを比較することによって、AB間を結ぶ直線の全てを描いた時の一部と、AB間を結ぶ直線の一部を描いた時とでは、誤差が存在することが示される。
【課題を解決するための手段】
【0031】
本特許出願に係る発明では、上記課題を解決するため、下記の構成を採る。
【0032】
本特許出願に係る請求項1に記載の発明は、原画像を拡大し、その拡大された画像の一部の領域を表示するコンピュータによるデジタル画像表示方法であって、表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示方法である。
【0033】
本特許出願に係る請求項2に記載の発明は、原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するコンピュータによるデジタル画像表示方法であって、表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示方法である。
【0034】
本特許出願に係る請求項3に記載の発明は、ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するコンピュータによるデジタル画像表示方法であって、前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示方法である。
【0035】
本特許出願に係る請求項4に記載の発明は、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を表示するコンピュータによるデジタル画像表示方法であって、前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示方法である。
【0036】
本特許出願に係る請求項5に記載の発明は、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するコンピュータによるデジタル画像表示方法であって、前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示方法である。
【0037】
本特許出願に係る請求項6に記載の発明は、X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲を表示するコンピュータによるデジタル画像表示方法であって、(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、0.5から前記Fを引いた値をGとし、もしもGが負の値ならばGに1を加えた値をGとし、Gをu0_dを分母とする分数表現した時の分子をHとし、u0_dからHを引いた値をKとし、もしもKがu0_dと同じであれば0をKとし、前記Kの値を画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示方法である。
【0038】
本特許出願に係る請求項7に記載の発明は、原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するデジタル画像表示装置であって、表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示装置である。
【0039】
本特許出願に係る請求項8に記載の発明は、ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するデジタル画像表示装置であって、前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示装置である。
【0040】
本特許出願に係る請求項9に記載の発明は、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するデジタル画像表示装置であって、前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示装置である。
【0041】
本特許出願に係る請求項10に記載の発明は、X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲を表示するデジタル画像表示装置であって、(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、0.5から前記Fを引いた値をGとし、もしもGが負の値ならばGに1を加えた値をGとし、Gをu0_dを分母とする分数表現した時の分子をHとし、u0_dからHを引いた値をKとし、もしもKがu0_dと同じであれば0をKとし、前記Kを画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示装置である。
【0042】
本特許出願に係る請求項11に記載の発明は、原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するコンピュータによって実行されるデジタル画像表示プログラムであって、表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示プログラムである。
【0043】
本特許出願に係る請求項12に記載の発明は、ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するコンピュータによって実行されるデジタル画像表示プログラムであって、前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示プログラムである。
【0044】
本特許出願に係る請求項13に記載の発明は、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するコンピュータによって実行されるデジタル画像表示プログラムであって、前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示プログラムである。
【0045】
本特許出願に係る請求項14に記載の発明は、X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲をコンピュータによって実行されるデジタル画像表示プログラムであって、(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、0.5から前記Fを引いた値をGとし、もしもGが負の値ならばGに1を加えた値をGとし、Gをu0_dを分母とする分数表現した時の分子をHとし、u0_dからHを引いた値をKとし、もしもKがu0_dと同じであれば0をKとし、前記Kを画素カウンターの初期値とし、前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示プログラムである。
【0046】
本特許出願に係る請求項15に記載の発明は、コンピュータによって実行されるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、請求項11から請求項14のいずれか1項に記載のデジタル画像表示プログラムを記録した記録媒体である。
【発明の効果】
【0047】
本発明によると、直線の一部を描画した時、あるいは、原画像を拡大縮小してその一部を描画した時、高速に描画ができると同時に、誤差のない正確な画像を描画することができる。
【発明を実施するための最良の形態】
【0048】
以下に、本発明の実施の形態について、図面を参照して説明する。
【0049】
(実施の形態1)
本発明の実施の形態1では、コンピュータによるデジタル画像表示方法等の、特に、コンピュータによって直線を描く直線描画方法の実施の形態を説明する。
【0050】
図1に、本発明に係る直線描画方法の実施の形態によって直線を描く携帯電話装置100の概略ブロック図を示す。
【0051】
この携帯電話装置100では、本発明に直接関係する部分だけを示し、その他の部分は省略している。
【0052】
また、破線で囲んだデジタル画像表示部190は、本発明に係るデジタル画像表示装置の実施の形態でもある。
【0053】
この携帯電話装置100では、音声入出力部136で使用者の音声の入力と、電話音声の出力とを行い、通信部134で無線通信を行う。
【0054】
操作部132はボタンスイッチ(図示せず)やその他のスイッチで構成され、携帯電話装置の操作を使用者が行うためのものである。
【0055】
具体的に直線の描画を行うのはCPU120で、CPU120は、プログラム用メモリ部122に記憶されたプログラムによって制御され、データ用メモリ部124とこのメモリ部に記憶されたデータとを使い、上記プログラムの制御によって直線の描画を実行する。
【0056】
このプログラムは、本発明に係るデジタル画像表示プログラムの実施の形態でもあり、プログラム用メモリ部122は本発明に係るデジタル画像表示プログラムを記録した記録媒体の実施の形態でもある。
【0057】
描画された直線は、具体的には表示用メモリ部112に画素データとして記憶され、表示部110に表示される。
【0058】
表示部110は例えば、液晶表示パネル等で構成される。また、これらの各要素は内部バス106によって接続されている。
【0059】
尚、この実施の形態はあくまでも一例であって、必ずしもこのような構成に限るものではない。また、この構成は本発明の実施の形態2でも同様であるから、以後詳細な説明は省略する。
【0060】
図2に、本発明に係る直線描画方法の一実施の形態によって直線を描く方法の、一例を示す。
【0061】
図2に示す、本発明に係る直線描画方法の実施の形態1によって直線の全部を描く時の手順は、上記従来のブレゼンハムのアルゴリズムによって、2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その全部または一部を表示するためのデジタル画像表示方法と同じであるから、詳細な説明は省略し、要点だけを示す。
【0062】
この施の形態1が図8に示す従来の描画方法と異なるのは、この実施の形態1では、直線描画の開始点Aの座標は(1,2)であり、終了点Bの座標は(37,8)であり、この2点間を結ぶ直線は(数2)で表され、この直線の傾きは1/6で、X座標値が6増えた時にY座標値が1増えることである。
【0063】
【数2】

【0064】
従って、実施の形態1によってこの直線を描くには、X座標値の初期値を1とし、終了値を37とし、Y座標値の初期値を2とし、誤差項の初期値を3とし、X座標値を1増やすのと同時に誤差項に1を加え、誤差項が6になった時にY座標値に1を加えると同時に誤差項を0に戻す。
【0065】
この手順を繰り返すことで、描く直線を構成するX座標値が1から37の間である格子点の、Y座標値を求め、AB間を結ぶ直線を描くことができ、さらに、この手順は小数演算を含まないため、コンピュータで高速に計算することが容易である。
【0066】
この時、Y座標値に1を加える条件となる誤差項の値6は、描く直線の傾きを分数表現した時の分母である。
【0067】
また、誤差項の初期値3は、直線の描画開始点である格子点(Y座標値の小数部は0)から、Y座標値が四捨五入して1繰り上がる点、即ち、Y座標値の小数部が0.5以上になるまでに1/6を加える回数3を6から引いた値であり、6−((0.5−0)/(1/6))=6−((3/6)/(1/6))=6−3=3で計算することができ、この値は、0.5を分母が6である分数で表した時の分子3でもある。
【0068】
次に、同じ(数2)で表される直線ABの一部を、本発明に係る実施の形態1によって描く方法の、一例を図3に示す。
【0069】
図3に示す例では、X座標値が15から23の範囲を描くと仮定している。
【0070】
上記の通り、ABの2点間を結ぶ直線は、(数2)で表されるから、描く直線の一部を構成するX座標値が15から23の間である格子点の、Y座標値は、(数2)のXに15から23を代入して計算することができる。例えば、描く直線を構成するX座標値が15である格子点の、Y座標値は、1/6*15+11/6=26/6のように計算することができる。しかしながら、このY座標値は整数でなく、整数座標の格子点上にはない。
【0071】
そこで、この計算したY座標値になるべく近い格子点に直線を描くため、計算で得られたY座標値26/6を、小数第1桁で四捨五入して整数化する。このようにすると、4を得ることができるので、描く直線を構成する、X座標値が15である格子点のY座標値は4とする。
【0072】
この手順を繰り返すことで、描く直線を構成するX座標値が15から23の間である格子点の、Y座標値を求め、直線を描くことができる。しかしながら上記の通り、この手順は小数演算を含むため、コンピュータで高速に計算することが困難である。
【0073】
そこで、X座標値が1増える毎に、Y座標値に1/6を加え、その結果を四捨五入するのではなく、X座標値が6増える毎に、Y座標値に1を加えることによって、X座標値が15から23の間である格子点のY座標値を求め、直線を描く。
【0074】
例えば、図3に示す、2点AB間を結ぶ直線の、X座標値が15から23の範囲を描くには、X座標値の初期値を15とし、終了値を23とし、Y座標値の初期値を4とし、X座標値を1増やすのと同時に誤差項に1を加え、誤差項が6になった時にY座標値に1を加えると同時に誤差項を0に戻す。
【0075】
誤差項の初期値は、図9に示す、従来のブレゼンハムのアルゴリズムでは、常に0から始めて、Y座標値が四捨五入して1繰り上がるまで、即ち、Y座標値の小数部が0.5以上になるまでに1/6を加える回数3を、6から引いた値3とした。
【0076】
この値は、0.5から定数0を引いた差(0.5)を分母が6である分数で表現した時の分子である3を、6から引いた値3でもある。
【0077】
しかしながら、本発明の実施の形態1では、誤差項の初期値は、定数0ではなく、直線の描画を開始する点のX座標値15に対応する直線上の点の正確なY座標値、即ち、(数2)のXに15を代入した時の小数部を含む正確なYの値から、Y座標値が四捨五入して1繰り上がるまで、即ち、Y座標値の小数部が0.5になるまでに1/6を加える回数を、6から引いた値とする。
【0078】
この値は、0.5から描画開始点のY座標値の小数部を引いた差(もしもマイナスならば1を加える)を分母が6である分数で表現した時の分子を、6から引いた値でもある(但し、その値が6になれば0にする)。
【0079】
またこの値は、X座標値に1を加えながら、(数2)によってY座標値を計算し、さらにその計算したY座標値を四捨五入して整数化をしていった時、前回整数化したY座標値が1繰り上がってから現在のX座標値(この例では15)に至るまでに、1が加えられた回数に相当する。
【0080】
上記の通り、(数2)のXに15を代入すると、1/6*15+11/6=26/6であるから、そのYの値を四捨五入した値は4であり、この四捨五入した値が4になったのはX座標値が10になった時である。
【0081】
なぜなら、X座標値が10の時の正確なY座標値は、(数2)から、1/6*10+11/6=21/6であるから、21/6=3.5であり、四捨五入すると4になるからである。
【0082】
従って、誤差項の初期値はX座標値が10から15になるまでに、X座標値に1が加えられた回数5である。
【0083】
同様にこの値は、X座標値に1を加えながら、(数2)によってY座標値を計算し、さらにその計算したY座標値を四捨五入して整数化をしていった時、現在のX座標値(この例では15)から、次に四捨五入した時のY座標値が1繰り上がるまでに、1を加える回数を6から引いた値に相当する。
【0084】
四捨五入した時のY座標値が1繰り上がるのは、X座標値に1を6回加える毎だからである。
【0085】
また、(数2)のXに15を代入すると、1/6*15+11/6=26/6であるから、そのYの値を四捨五入した値は4であり、この四捨五入した値が1繰り上がるのは1/6を1回加えて27/6になった時である。なぜなら、27/6=4.5であり、四捨五入すると5になるからである。
【0086】
従って、次に四捨五入した時のY座標値が1繰り上がるまでに、1を加える回数は1回であり、この回数を6から引いた値は5である。
【0087】
以上の説明から、この誤差項をe0とすると、e0の値は、直線の描画開始点のX座標値15に対応する直線上の正確なY座標値26/6を分数表記した時の分子(u0_nとすると、u0_n=26)と分母(u0_dとすると、u0_d=6)とを使って表現できることが示される。
【0088】
即ち、分子(u0_n=26)の分母(u0_d=6)を法とする剰余(26 mod 6 = 2)を求め、Y座標値が1繰り上がる時のY座標値の小数部(0.5)をこの法(6)を分母として表現した時の分子(3)からこの剰余を引いた差(1)を求め、もしもその値がゼロまたはマイナスになれば6を加え、その値を6から引けばよい。
【0089】
この計算手順は、(数3)と(数4)とで表すこともできる。但し、(数3)のint(・・・)は、カッコ内の値の小数部を切り捨てて整数化する関数である。
【0090】
【数3】

【0091】
【数4】

【0092】
なぜなら、(数3)は、e0’が、直線の描画開始点のX座標値15に対応する直線上の正確なY座標値26/6を分数表記した時の分子の、分母を法とする剰余であることを表している。
【0093】
(数4)は、e0が、Y座標値が1繰り上がる時のY座標値の小数部(0.5)をこの法(6)を分母として表現した時の分子(3)から、この剰余を引いた差を求め、もしもその値がゼロまたはマイナスになれば6を加え、その値を6から引いた値であることを表している。
【0094】
従って、この剰余はY座標値が1繰り上がるまでのXの加算回数を法とする剰余であり、この時の分数表記は、あくまでも、直線の傾き1/6の分母と同じ分母による分数表記でなくてはならない。直線の描画開始点のX座標値15に対応する直線上の正確なY座標値26/6を分数表記して13/3とし、この時の分子u0_n=13と分母u0_d=3と、(数3)と(数4)とを使って求めることはできないことに注意しなければならない。
【0095】
あるいは、直線の描画開始点のX座標値15に対応する直線上の正確なY座標値26/6を分数表記して13/3とし、この時の分子u0_n=13と分母u0_d=3と(数3)とを使ってe0’を計算した時には、この時の分母3に対する直線の傾きの分母6の比率2を上記e0’に掛けなければならないことに注意が必要である。
【0096】
上記の通り、図3に示す例において、X座標値15から23の間で、直線ABを描く時の誤差項の初期値は5であるから、Y座標値が1繰り上がるまでのX座標値の加算回数は1であり、Y座標値が4である点は1つだけであることが示される。
【0097】
そして、X座標値が6進む毎にY座標値は1繰り上がるので、図3に示す直線が描かれる。
【0098】
図3に示す、X座標値15から23の間で直線ABを描いた図は、図2に示す直線ABのX座標値15から23の間の図と寸分違わず、誤差が全く生じていないことが示される。
【0099】
念のために、誤差項の初期値を、常数0から始めてY座標値が四捨五入して1繰り上がるまで、即ち、Y座標値の小数部が0.5以上になるまでに1/6を加える回数3を、6から引いた値3として、X座標値15から23の間で、直線ABを描いた時の図を、図4に示す。
【0100】
図4は、図3に示すX座標値15から23の間で直線ABを描いた図、あるいは、図2に示す直線ABのX座標値15から23の間の図と異なっており、誤差が生じていることが示される。
【0101】
(実施の形態2)
本発明の実施の形態2では、コンピュータによるデジタル画像表示方法等の、特に、コンピュータによって図形を拡大表示する、図形拡大表示方法の実施の形態を説明する。
【0102】
図5に、本発明に係る図形拡大表示方法の一実施の形態によって図形の一部を拡大表示する方法を示す。
【0103】
図5は、(a)XY軸平面上に描かれた元の図形401と、(b)XY軸平面上に描かれた拡大図形403および表示図形405とを含んでいる。
【0104】
この実施の形態では、元の図形401は、X座標が0から4の間の点で構成される四角形であると仮定している。Y軸方向の大きさは、以下の説明では直接使用しないので省略している。
【0105】
元の図形401をX軸方向に6倍に拡大し、左辺をX座標が−8の位置に合わせたのが、拡大図形403である。
【0106】
元の図形401は、X軸方向に5点(座標0から4)から構成されているので、拡大図形403は、X軸方向に30点から構成され、左辺のX座標が−8であるから、右辺のX座標は21である。
【0107】
元の図形401のX軸方向の5点(座標0から4)は、1つの点がそれぞれ6つの点に変換される(6倍に拡大すると仮定しているから)。
【0108】
拡大図形403を構成するX軸方向の30点を、元の点(x,0)から変換された6つの点からなる5つのグループに分類し、図5(b)では、それぞれを示している。但し、xは0から4までの整数である。
【0109】
そしてこの実施の形態では、この拡大図形403の一部に相当する、X軸方向の座標が2から14の間、即ち、図5に示す符号で言うと、点A(2,0)から点B(14,0)の間だけを表示すると仮定する。
【0110】
このような元の図形401から拡大図形403への、X座標の変換は、(数5)で表される。
【0111】
【数5】

【0112】
(数5)において、Xは元の図形401における座標を表しており、X’は拡大図形403における座標を表している。X軸方向に6倍に拡大し、元の図形401の原点O(0,0)を、拡大図形403の点C(−8,0)に対応させるからである。
【0113】
逆に、拡大図形403から、拡大図形403を構成する各点に対応する、元の図形401を構成する点は、(数6)で求めることができる。
【0114】
【数6】

【0115】
例えば、拡大図形403の左端の点である点C(−8,0)に対応する元の図形401の点を求めるには、(数6)のX’に−8を代入すると、X=(−8+8)/6=0であるから、元の図形401を構成する原点O(0,0)が対応することが解る。
【0116】
同様に、拡大図形403の一部である表示図形405の左端の点である点A(2,0)に対応する元の図形401の点を求めるには、(数6)のX’に2を代入すると、X=(2+8)/6=10/6で、この値の小数部を切り捨てて整数化すると1であるから、元の図形401を構成する点(1,0)が対応することが解る。
【0117】
このようにして(数6)を使い、拡大図形403の一部である表示図形405を構成するX座標値が2から14の各点について、対応する元の図形401の点を求め、表示図形405を描くことができる。
【0118】
しかしながら、この方法は、(数6)に示す通り、割り算を含むので、コンピュータで高速に計算することは困難である。
【0119】
そこで、本発明の実施の形態1と同様に、ブレゼンハムのアルゴリズムでは、表示図形405を描くには、元の図形401を構成する各点を6つずつ繰り返し描けば良いことに着目する。表示図形405は、元の図形401を6倍に拡大したものの一部だからである。
【0120】
このようにして描いた結果を図6に示す。
【0121】
上記の通り、表示図形505の左端点A(2,0)に対応する元の図形501の点は、点(1,0)であるから、表示図形505の左端点A(2,0)から右端点B(14,0)まで、点(1,0)と点(2,0)と点(3,0)とを6つずつ繰り返し描くことで、元の図形501を6倍に拡大した拡大図形503の一部である表示図形505を描くことができる。
【0122】
しかしながら、図6と図5とを比較することによって解る通り、この方法では誤差を生じることが避けられない。
【0123】
そこで、本発明の実施の形態1と同様、誤差項を利用することによって、この誤差を解消する。
【0124】
このようにして描いた表示図形605を図7に示す。
【0125】
具体的には、誤差項の初期値を「4」に設定したうえで、表示図形605の左端点A(2,0)から右端点B(14,0)まで、点(1,0)と点(2,0)と点(3,0)とを6つずつ繰り返し描く。
【0126】
そして、点(1,0)と点(2,0)と点(3,0)とのいずれかを1つ描く毎に、この誤差項に1を加え、誤差項の値が6になった時に、誤差項の値を0に戻すと同時に、描く点を点(1,0)から点(2,0)へ、あるいは、点(2,0)から点(3,0)へと切り替える。
【0127】
図7と図5とを比較することによって、このように誤差項を使って描いた表示図形605は、拡大図形403の一部である表示図形405と全く誤差を生じていないことが示される。
【0128】
上記、誤差項をe0とすると、その初期値「4」は、本発明の第1の実施の形態と同様、表示図形605の左端点A(2,0)に対応する元の図形601上の点のX座標値を、(数6)によって求めた時の、正確な値(小数部を含む値)の小数部を分数表現した時の、分子として求めることができる。
【0129】
例えば、表示図形605の左端点A(2,0)のX座標値2を、(数6)のX’に代入すると、(2+8)/6=10/6となり、その小数部は4/6である。従って、e0の初期値を4とする。
【0130】
なぜなら、表示図形605の左端点A(2,0)に対応する元の図形601上の点の正確な座標値は10/6であり、あと2回1/6を加えるとその値は12/6、即ち、小数部を切り捨てて整数化すると2になる。従って、元の図形601上の対応する点は、点(2,0)になる。
【0131】
従って、表示図形605の左端点A(2,0)から描画を開始して、2ドット分、右のドットを描画する時には、元の図形上の点(2,0)を描画しなければならない。
【0132】
そして、2ドット目を描く時に、描くドットを切り替えるためには、誤差項の初期値を4にしておくことが必要である。従って、誤差項の初期値は4、即ち、表示図形605の左端点A(2,0)に対応する元の図形601上の点の正確な座標値(10/6)の小数部(4/6)を分数表現した時の分子(4)でなければならない。
【0133】
本発明の実施の形態1と同様、この計算手順は、(数7)で表すこともできる。
【0134】
【数7】

【0135】
但し、(数7)において、e0は上記誤差項の初期値、u0_nは表示図形605の描画開始点A(2,0)のX座標値(2)に対応する元の図形601上の正確なX座標値(10/6)の分子、u0_dは表示図形605の描画開始点A(2,0)のX座標値(2)に対応する元の図形601上の正確なX座標値(10/6)の分母、int(・・・)は、カッコ内の値の小数部を切り捨てて整数化する関数を表している。
【0136】
なぜなら、(数7)は、誤差項の初期値e0が、表示図形605の描画開始点A(2,0)のX座標値(2)に対応する元の図形601上の正確なX座標値(10/6)の分子(10)の分母(6)を法とする剰余であることを表しており、これは、表示図形605の描画開始点A(2,0)のX座標値(2)に対応する元の図形601上の正確なX座標値(10/6)の小数部(4/6)を分数表記した時の分子(4)と同義である。
【0137】
従って、(数7)において、u0_nとu0_dとを求める時の分数表記は、あくまでも、図形の拡大倍率6を分母とする分数表記でなくてはならず、表示図形605の描画開始点A(2,0)のX座標値2に対応する元の図形601上の正確なX座標値10/6を、約分計算して5/3を求め、この時の分子5をu0_nとし、この時の分母3をu0_dとして、(数7)を使ってe0を求めることはできないことに注意しなければならない。
【0138】
尚、これらのデジタル画像表示方法およびデジタル画像表示装置の実施の形態は、マイクロコンピュータ(マイコン)を始めとするコンピュータとプログラムとによって実施され、そのプログラムはコンピュータ読み取り可能な記録媒体に記録されて実施されることがある。
【産業上の利用可能性】
【0139】
以上説明したように、本発明によると、直線の一部を描画した時、あるいは、原画像を拡大縮小してその一部を描画した時、高速に描画ができると同時に、誤差のない正確な画像を描画することができるので、産業上の利用可能性は非常に大きい。
【図面の簡単な説明】
【0140】
【図1】本発明に係る直線描画方法の一実施の形態によって直線を描く携帯電話装置の概略ブロック図
【図2】本発明に係る直線描画方法の一実施の形態によって直線を描く方法の一例を示す図
【図3】本発明に係る直線描画方法の一実施の形態によって直線の一部を描く方法の一例を示す図
【図4】本発明に係る直線描画方法の一実施の形態によって直線の一部を描く方法と対比するための図
【図5】本発明に係る図形拡大表示方法の一実施の形態によって図形の一部を拡大表示する方法の一例を示す図
【図6】図形の一部を拡大表示する方法において誤差を生じる例を示す図
【図7】本発明に係る図形拡大表示方法の一実施の形態によって誤差が生じないことを示す図
【図8】従来の直線描画方式の一例であるブレゼンハムのアルゴリズムで直線を描く方法の一例を示す図
【図9】従来の直線描画方式の一例であるブレゼンハムのアルゴリズムで直線の一部を描く方法の一例を示す図
【図10】従来の直線描画方式の一例であるブレゼンハムのアルゴリズムで直線の一例の一部を描く方法の一例を示す図
【符号の説明】
【0141】
100 携帯電話装置
106 内部バス
110 表示部
112 表示用メモリ部
120 CPU
122 プログラム用メモリ部
124 データ用メモリ部
132 操作部
134 通信部
136 音声入出力部
190 デジタル画像表示部
401,501,601 元の図形
403,503,603 拡大図形
405,505,605 表示図形

【特許請求の範囲】
【請求項1】
原画像を拡大し、その拡大された画像の一部の領域を表示するコンピュータによるデジタル画像表示方法であって、
表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示方法。
【請求項2】
原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するコンピュータによるデジタル画像表示方法であって、
表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示方法。
【請求項3】
ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するコンピュータによるデジタル画像表示方法であって、
前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示方法。
【請求項4】
2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を表示するコンピュータによるデジタル画像表示方法であって、
前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示方法。
【請求項5】
2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するコンピュータによるデジタル画像表示方法であって、
前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示方法。
【請求項6】
X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲を表示するコンピュータによるデジタル画像表示方法であって、
(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、
前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、
0.5から前記Fを引いた値をGとし、
もしもGが負の値ならばGに1を加えた値をGとし、
Gをu0_dを分母とする分数表現した時の分子をHとし、
u0_dからHを引いた値をKとし、
もしもKがu0_dと同じであれば0をKとし、
前記Kの値を画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示方法。
【請求項7】
原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するデジタル画像表示装置であって、
表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示装置。
【請求項8】
ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するデジタル画像表示装置であって、
前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示装置。
【請求項9】
2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するデジタル画像表示装置であって、
前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示装置。
【請求項10】
X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲を表示するデジタル画像表示装置であって、
(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、
前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、
0.5から前記Fを引いた値をGとし、
もしもGが負の値ならばGに1を加えた値をGとし、
Gをu0_dを分母とする分数表現した時の分子をHとし、
u0_dからHを引いた値をKとし、
もしもKがu0_dと同じであれば0をKとし、
前記Kを画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示装置。
【請求項11】
原画像を画素カウンターを使って拡大し、その拡大された画像の一部の領域を表示するコンピュータによって実行されるデジタル画像表示プログラムであって、
表示する原画像の1画素を拡大したセグメントが前記表示する領域と表示しない領域とにまたがる時、そのセグメントの前記表示しない領域に含まれる比率に相当する値を前記画素カウンターの初期値とし、そのセグメントの前記表示する領域に含まれる比率に相当する部分だけを表示する、デジタル画像表示プログラム。
【請求項12】
ある座標方向の所定の範囲をp倍に拡大した領域の一部である前記座標方向の座標X0を始点とする範囲を表示するコンピュータによって実行されるデジタル画像表示プログラムであって、
前記座標X0に対応する拡大前の座標の小数部を前記pを分母とする分数表現した時の分子を画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記座標X0を始点とする範囲を表示する、デジタル画像表示プログラム。
【請求項13】
2次元座標が指定された2点間を結ぶ線分をXY平面上の画素からなる画素集合とし、その一部分を画素カウンターを使って表示するコンピュータによって実行されるデジタル画像表示プログラムであって、
前記画素集合に含まれる画素でそのX方向位置またはY方向位置のどちらかが同一である画素を要素とする画素部分集合のいずれかが、前記表示する一部分とそれ以外の表示しない部分とにまたがる時、前記いずれかの画素部分集合の前記表示しない部分に含まれる比率に相当する値を前記画素カウンターの初期値とすることによって、前記いずれかの画素部分集合の前記表示する一部分に含まれる画素だけを表示する、デジタル画像表示プログラム。
【請求項14】
X0、Y0、X1、Y1を(X1−X0)>(Y1−Y0)が成立する任意の自然数とする時、XY平面上の座標が(X0,Y0)と(X1,Y1)とで与えられる2点間を結ぶ線分の一部であるX座標がX2から始まる範囲をコンピュータによって実行されるデジタル画像表示プログラムであって、
(Y1−Y0)/(X1−X0)を既約分数表現した時の分母をu0_dとし、
前記X座標X2に対応する前記線分上のY座標値の小数部をFとし、
0.5から前記Fを引いた値をGとし、
もしもGが負の値ならばGに1を加えた値をGとし、
Gをu0_dを分母とする分数表現した時の分子をHとし、
u0_dからHを引いた値をKとし、
もしもKがu0_dと同じであれば0をKとし、
前記Kを画素カウンターの初期値とし、
前記画素カウンターをインクレメントしながら前記線分の一部であるX座標がX2から始まる範囲を表示する、デジタル画像表示プログラム。
【請求項15】
コンピュータによって実行されるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
請求項11から請求項14のいずれか1項に記載のデジタル画像表示プログラムを記録した記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−201331(P2006−201331A)
【公開日】平成18年8月3日(2006.8.3)
【国際特許分類】
【出願番号】特願2005−11220(P2005−11220)
【出願日】平成17年1月19日(2005.1.19)
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】