JP3548806B2 - 画像変形方法およびその装置 - Google Patents

画像変形方法およびその装置 Download PDF

Info

Publication number
JP3548806B2
JP3548806B2 JP34752693A JP34752693A JP3548806B2 JP 3548806 B2 JP3548806 B2 JP 3548806B2 JP 34752693 A JP34752693 A JP 34752693A JP 34752693 A JP34752693 A JP 34752693A JP 3548806 B2 JP3548806 B2 JP 3548806B2
Authority
JP
Japan
Prior art keywords
image data
small
line
deformation
error
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP34752693A
Other languages
English (en)
Other versions
JPH07182501A (ja
Inventor
達也 飯島
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP34752693A priority Critical patent/JP3548806B2/ja
Publication of JPH07182501A publication Critical patent/JPH07182501A/ja
Application granted granted Critical
Publication of JP3548806B2 publication Critical patent/JP3548806B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Processing Or Creating Images (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Studio Circuits (AREA)
  • Controls And Circuits For Display Device (AREA)

Description

【0001】
【産業上の利用分野】
本発明は、画像変形方法およびその装置に係わり、詳しくはアニメーション、ゲーム等で用いられるキャラクター、背景データを始めとするドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようないわゆるビット配列形式の画像データの配列を変形する画像変形方法およびその方法を実現する装置に関する。
【0002】
【従来の技術】
従来、アニメーション、ゲーム等ではビット配列形式の画像データを用いることが多く、この画像データによりキャラクターや背景データを表示している。そして、このビット配列形式の画像データはドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようになっている。
【0003】
【発明が解決しようとする課題】
ところで、従来の画像変形方法において、アニメーション、ゲーム等でキャラクター又は背景に動きを与えたり、その形を変えるときには、全く異なる画像データを予めメモリに持っておき、例えば動きを与えるときには一定時間毎に、あるいはその形を変えるときには何かのきっかけでメモリ上にある画像データそのものを表示し直していた。そのため、多くのメモリを消費するという欠点があった。
また、画像データの拡大、縮小処理あるいはある形状の四角形から異なる形状の四角形への変形(例えば、正方形から台形への変形)等の単純な変形処理は、従来のゲーム中にも多く用いられているが、変形の度合いが限られ、滑らかな変形が困難であった。さらに、変形を使用する範囲が限定されてしまい(自由に変形できない)、予めメモリに多くのデータを持っておく方法を採らざるを得ず、この点でコスト高にもなっていた。
【0004】
そこで本発明は、少ないメモリ容量で、ビット配列形式の画像を自由にかつ滑らかに変形できる画像変形方法およびその装置を提供することを目的としている。
【0005】
【課題を解決するための手段】
上記目的達成のため、請求項1記載の発明による画像変形方法は、ビット配列形式の画像データを保有可能な変形対象を、複数の小多角形に分割し、複数に分割した各小多角形に対して、小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、画像データを割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って、変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成するようにしたことを特徴とする。
【0006】
請求項2記載の発明による画像変形装置は、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割する分割手段と、分割手段によって分割された小多角形に対して、小多角形単位のビット配列形式の画像データを1つずつ割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てる画像データ割り当て手段と、分割手段によって分割した各小多角形を所定の変形処理手順に従って異なる小多角形に変形する変形手段と、変形前の小多角形に含まれるビット配列形式の画像データを、各小多角形毎に、所定のデータ変換手順に従って、変形後の小多角形に対応するように順次変形して変形後の全体画像データを作成する画像データ作成手段と、を備えたことを特徴とする。
【0015】
【作用】
本発明では、まずビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当て割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理(例えば、座標変換処理)に従って異なる小多角形にそれぞれ変形する。次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データが作成される。したがって、変形対象の画像は各小多角形毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなくなり、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形できる。また、変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形できる。特に、複数に分割した後の小多角形単位で、ビット配列形式の画像データを割り当てるようにしているので、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【0016】
また、変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の1つのビット配列形式の画像データが左右反転あるいは上下反転して割り当られる。したがって、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、全く同様の効果を得ることができる。
【0017】
【実施例】
以下、図面を参照して本発明の実施例について説明する。
本発明の原理説明
最初に、本発明の原理から説明する。図1は多角形分割変形方法の原理を示す図である。図1(a)は変形前の画像データを示し、特にビット配列形式の画像データで、「口」(特に、唇)の画像(絵)Aを有している。この画像データを変形するために、変形対象全体を予め縦4分割、横6分割して合計で24個の小矩形(1)、(2)、(3)、・・・・・(24)を作成する。分割する多角形は四角形である。分割される各小矩形(1)、(2)、(3)、・・・・・(24)は、小矩形単位でビット配列形式の画像データが割り当られている。割り当られる画像データの一例は、図2のように示される。なお、画像データは、複数のドットによって構成され、かつ複数の各ドット毎に表示色番号あるいはパレット番号を持っている。
【0018】
図2に示す画像データは予め用意されており、例えば画像データaはデータの無い状態(透明状態)、画像データbは口の上側の一部、・・・・・・・・、画像データkは口の下側の一部というように、a〜kの画像データによって口の画像が複数のパートに分けられている。この場合、小矩形(1)は同一色で構成されているため、画像データは割り当てられておらず(つまり透明の状態)、小矩形(2)には画像データbが割り当てられている。同様に、小矩形(3)には画像データcが割り当てられ、小矩形(4)には画像データcを左右反転したものが割り当てられ、小矩形(5)には画像データbを左右反転したものが割り当てられ、小矩形(5)には画像データbをが割り当てられが割り当てられる。
このように、1つの画像を構成する全体のデータを分割して複数の小矩形(1)、(2)、(3)、・・・・・(24)にそれぞれ割り当て、さらに小矩形単位の画像データは左右反転あるいは上下反転して割り当てることもできる。そして、同一色で構成される小矩形を除くすべての小矩形に対して、小矩形単位の画像データを割り当てると、図1(a)に示すような「口」の画像(絵)Aとなり、これは各小矩形(1)、(2)、(3)、・・・・・(24)毎の画像データ全体によって表示される。
【0019】
次いで、変形対象全体が滑らかに変形されるように、所定の変形処理(例えば、後述の座標変換処理)に従って各小矩形(1)、(2)、(3)、・・・・・(24)を図1(b)に示すような異なる四角形(1)’、(2)’、(3)’、・・・・・(24)’にそれぞれ変形する。例えば、小矩形(1)は四角形(1)’に変形され、小矩形(2)は四角形(2)’に変形される。
この過程では、各小矩形(1)、(2)、(3)、・・・・・(24)の変形に伴って、それぞれの小矩形に割り当てられたビット配列形式の画像データの配列が所定のデータ変換処理(例えば、後述のいわゆるライン貼り付け処理)に従って変形する。すなわち、ドットの配列が変形の程度に応じて変わることになる。また、このとき画像データが割り当てられていない小矩形(1)、(6)、(9)、(10)等は、変形後の四角形が指定された色で塗りつぶされる。したがって、変形後の四角形(1)’、(2)’、(3)’、・・・・・(24)’を全体として合成すると、図1(b)に示すように、変形した「口」の画像(絵)Bが得られる。
【0020】
この場合、変形対象の画像データの配列に対して各小矩形(1)、(2)、(3)、・・・・・(24)毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなく、少ないメモリ容量でビット配列形式の画像を自由に変形できる。
また、変形対象を複数の小矩形(1)、(2)、(3)、・・・・・(24)に分割し、各小矩形(1)、(2)、(3)、・・・・・(24)毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することが可能になる。
特に、複数に分割した後の小矩形単位で、ビット配列形式の画像データが割り当てられるので、異なる小矩形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
さらに、小矩形が同一色で構成されている場合には、一部の小矩形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【0021】
次に、上記原理に基づく本発明の具体的な実施例について説明する。
画像変形装置の構成
図3は本発明に係る画像変形方法を実現する画像変形装置の一実施例を示す構成図である。図3において、画像変形装置は大きく分けてCPU31、入力操作子32、記憶装置33、画像信号発生回路(Video Display Prosseser:以下VDPという)34、VRAM35およびTVディスプレイ36によって構成される。
CPU31は装置全体を制御するもので、入力操作子32から画像変形指令が入力されると、その指令情報に対応すべく内部のメモリに格納されている制御プログラムに基づいて記憶装置33に記憶されているビット配列形式の画像データを保有可能な変形対象(ここでは図示略)を読み出して複数の小多角形に分割するとともに、複数に分割した各小多角形に対して記憶装置33に記憶されている小多角形単位で割り当て可能なビット配列形式の画像データ41を読み出して割り当て、画像データ41を割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、変形後のビット配列形式の画像データを合成してVDP34に出力する。また、CPU31は内部レジスタ31aを有しており、内部レジスタ31aには後述の図6に示すような各小矩形の格子点座標や図20に示すような端点バッファデータが格納されるようになっている。
【0022】
入力操作子(変形態様指定手段)32はオペレータによって操作されるもので、ビット配列形式の画像データの配列をどのように変形させるかを指定する(つまり、変形を行わせるきっかけを与えるための)第1の変形スイッチ51および第2の変形スイッチ52を有している。第1の変形スイッチ51は、例えば変形前の格子点座標で表される原画像に対して、変形後の格子点座標42で表される第1の変形画像のような変形(変形データ1)を与える指令を出力する。第2の変形スイッチ52は、例えば変形前の格子点座標で表される原画像に対して、変形後の格子点座標43で表される第2の変形画像のような変形(変形データ2)を与える指令を出力する。なお、各変形スイッチ51、52は単独操作のプッシュスイッチでもよいし、あるいは複数のスイッチからなるスイッチボード、キーボード等でもよい。また、入力操作子32としてスイッチボード等の他に、マウス、トラックボール等を用いてもよい。
【0023】
記憶装置(記憶手段)33は変形対象となるビット配列形式の画像データを保有可能な変形対象(原画像)をどのように矩形分割するかを示す変形前の格子点座標(変形前の小多角形の頂点の座標)、矩形分割された各小矩形をどのように変形するかを示す変形データ1に対応する変形後の格子点座標(変形後の異なる小多角形の頂点の座標)42および矩形分割された各小矩形をどのように変形するかを示す変形データ2に対応する変形後の格子点座標(変形後の異なる小多角形の頂点の座標)43を記憶している。例えば、格子点座標42は第1の変形画像に対応し、格子点座標43は第2の変形画像に対応しているとともに、これらの変形画像を処理する指令はそれぞれ第1の変形スイッチ51、第2の変形スイッチ52から出力される。
【0024】
また、記憶装置33は各小多角形にどのように画像データを割り当てるかを示す小多角形データ44を記憶している。小多角形データ44の詳しい内容は後述の図4に示す。
VDP34はCPU31から与えられた変形前のビット配列形式の画像データや変形後のビット配列形式の画像データをVRAM34に書き込む。VRAM34としては、例えば半導体メモリが用いられ、表示する画像を1画面単位で記憶する。VRAM34に書き込まれた画像データはTVディスプレイ(表示手段)36によって表示される。
上記CPU31は分割手段、変形手段、画像データ作成手段、座標変換手段、データ変換手段を構成するとともに、さらに画像変形制御手段を構成する。
【0025】
図4は各小多角形(ここでは小矩形、以下同様)に対してどのように画像データを割り当てるかを示す小多角形データ44の内容を表している。図4において、小多角形データ44としては、各小多角形毎に小多角形が同一色で構成されているか否かを示す一色塗りフラグ、一色塗りフラグ=0のときにどのビット配列形式画像データを用いるかを示す画像データ番号、一色塗りフラグが=1のときにどの色で塗りつぶすかを示す色番号、画像データを反転して用いるかどうかを示す左右反転フラグおよび上下反転フラグがある。
複数の小矩形は(0、0)、(0、1)、(0、2)・・・(3、5)というデータで区分され、これらの小矩形(0、0)、(0、1)・・・(3、5)に対して個別に一色塗りフラグ、画像データ番号、色番号、左右反転フラグ、上下反転フラグが割り当てられる。画像データ番号は図2に示した画像データを割り当てるもので、例えば、小矩形は(0、0)に対しては透明色(画像データa)が割り当てられ、小矩形は(0、1)に対しては画像データbが割り当てられている。
なお、一色塗りフラグ=1のときに一色塗りが行われ、一色塗りフラグ=0のときには通常の変形処理が行われるようになっている。また、左右反転フラグおよび上下反転フラグは、それぞれ[1]のときに画像データの反転が行われる。
【0026】
ここで、本実施例では変形前のビット配列形式の画像データを有する変形対象に対して図5に示すように、多数の小矩形に分割する処理が施される。この場合、矩形分割された各小矩形の頂点に当る部分を格子点と呼ぶことにする。図5の例では、変形対象を縦方向にm分割し、横方向にn分割している。したがって、変形対象は(m×n)個の小矩形に分割されることになり、各小矩形は左上端から右下端に行くに従って、小矩形(0、0)、小矩形(0、1)、小矩形(0、2)、・・・・・・・小矩形(m−1、n−1)としてそれぞれ表される。
また、変形対象の画像データの左上端の格子点を格子点(0、0)、その右隣の格子点を格子点(0、1)と呼び、以下同様に右に行くに従って格子点(0、2)、格子点(0、3)、と呼ぶことにする。したがって、右上端の格子点は格子点(0、n)になる。次いで、格子点(0、0)のすぐ下の格子点を格子点(1、0)と呼び、以下同様に下に行くに従って格子点(2、0)、格子点(3、0)と呼ぶことにする。したがって、左下端の格子点は格子点(m、0)になる。また、右下端の格子点は格子点(m、n)になる。
【0027】
CPU31の内部レジスタ31aには図5に示す各小矩形の格子点座標が記憶され、その様子は図6のように示される。図6において、内部レジスタ31aには各小矩形(0、0)、小矩形(0、1)、小矩形(0、2)、・・・・・・・小矩形(m−1、n−1)に対応する格子点の座標が以下のように格納されている。なお、各格子点の座標はX軸(横方向)およびY軸(縦方向)を基準とする2つの数値で表される。
格子点(0、0)のX座標
格子点(0、0)のY座標
格子点(0、1)のX座標
格子点(0、1)のY座標


格子点(m、n)のX座標
格子点(m、n)のY座標
【0028】
一方、記憶装置33には前述したように第1の変形スイッチ51からの指令に対応して第1の変形画像を矩形分割する場合の格子点座標42および第2の変形スイッチ52からの指令に対応して第2の変形画像を矩形分割する場合の格子点座標43が記憶されている。例えば、第1の変形スイッチ51が操作されると、このスイッチ51によって選択された変形番号に相当する変形後の格子点座標がCPU31の内部レジスタ31aに格納され、第2の変形スイッチ52が操作されると、このスイッチ52によって選択された変形番号に相当する変形後の格子点座標がCPU31の内部レジスタ31aに格納される。
これらの格子点座標42、43をCPU31の内部レジスタ31aに記憶されている各小矩形(0、0)、小矩形(0、1)、小矩形(0、2)、・・・・・・・小矩形(m−1、n−1)の格子点座標にそれぞれ対応させて示すと、図6のように表される。
【0029】
例えば、第1の変形画像を矩形分割する場合の格子点座標42と各小矩形の格子点座標とは以下のような対応関係になる。
格子点(0、0)のX座標……90(変形1の格子点座標、以下同様)
格子点(0、0)のY座標……90
格子点(0、1)のX座標……105
格子点(0、1)のY座標……95


格子点(m、n)のX座標……140
格子点(m、n)のY座標……130
なお、変形1とは、第1の変形スイッチ51からの指令に対応する第1の画像変形処理のことであり、変形2とは、第2の変形スイッチ52からの指令に対応する第2の画像変形処理のことである。したがって、変形1の格子点座標とは、第1の変形スイッチ51からの指令に対応する第1の変形画像を矩形分割した場合の格子点座標のことである。同様に、変形2の格子点座標とは、第2の変形スイッチ52からの指令に対応する第2の変形画像を矩形分割した場合の格子点座標のことである。
【0030】
次に、作用を説明する。
メインプログラム
図7は画像変形処理のメインプログラムを示すフローチャートである。このプログラムがスタートすると、まずステップS10でキー情報取り込み処理を行う。これは、入力操作子32における第1の変形スイッチ51あるいは第2の変形スイッチ52の操作情報を入力するものである。次いで、ステップS12で変形スイッチが押されたか否かを判別し、何れのスイッチも押されていなければ、今回のルーチンを終了し、次回のルーチンで再びステップS10を実行する。このとき、例えばスイッチフラグが設けられ、何れのスイッチも押されていなければ、スイッチフラグが[0]のままである。一方、何れかのスイッチが押されると、スイッチフラグを[1]にセットするとともに、ステップS14で押された変形スイッチの番号を判別する。その後、ステップS16あるいはステップS18で押された変形スイッチの番号に応じた変形後の格子点座標をCPU31の内部レジスタ31aに格納し、次いで、ステップS20に進む。
【0031】
具体的には、第1の変形スイッチ51が押された場合には、ステップS16に進んで記憶装置33内の第1の変形画像を矩形分割した場合の格子点座標(つまり、変形データ1に対応する変形後の格子点座標)42をコピーしてCPU31の内部レジスタ31aに格子点毎に格納する。したがって、例えば第1の変形スイッチ51が押されると、以下に示すように格子点座標42の値が内部レジスタ31aに順次格納されることになる。
格子点(0、0)のX座標……90(変形1の格子点座標、以下同様)
格子点(0、0)のY座標……90
格子点(0、1)のX座標……105
格子点(0、1)のY座標……95


格子点(m、n)のX座標……140
格子点(m、n)のY座標……130
【0032】
一方、第2の変形スイッチ52が押された場合には、ステップS18に進んで記憶装置33内の第2の変形画像を矩形分割した場合の格子点座標(つまり、変形データ2に対応する変形後の格子点座標)43をコピーしてCPU31の内部レジスタ31aに格子点毎に格納する。したがって、例えば第2の変形スイッチ52が押されると、以下に示すように格子点座標43の値が内部レジスタ31aに順次格納されることになる。
格子点(0、0)のX座標……90(変形2の格子点座標、以下同様)
格子点(0、0)のY座標……100
格子点(0、1)のX座標……105
格子点(0、1)のY座標……100


格子点(m、n)のX座標……170
格子点(m、n)のY座標……140
【0033】
ステップS16あるいはステップS18を経ると、続くステップS20に進み、記憶装置33から変形対象となる画像データの中から、処理すべき小矩形(i、j)に含まれる画像データを読み込んで小矩形の変形処理を行う(詳細はサブルーチンで後述)。これにより、小矩形(i、j)についてビット配列形式の画像データの配列が変形し、変形後の画像が得られることになる。小矩形(i、j)とは、例えば図1(a)に示すように変形対象を複数に分割した場合の小矩形(1)、(2)、(3)、・・・・・(24)の何れかを表す一般的な指定状態を示すものである。なお、ステップS20の処理では、小矩形(i、j)で示される変形後の画像データをVDP34に順次転送することが行われ、これにより、最終的にすべての小矩形(i、j)に対応する変形した画像データが合成されて変形画像が得られることになる。
次いで、ステップS22ですべての小矩形(i、j)に対して画像の変形処理をしたか否かを判別し、NOであればステップS20に戻って同様の処理を繰り返す。そして、すべての小矩形(i、j)に対して画像の変形処理が終了すると、ステップS22からYESに抜けて本ルーチンを終了する。このようにして、ステップS20およびステップS22において各小矩形単位で画像の変形処理が行われる。
【0034】
小矩形変形処理のサブルーチン
次に、図8はメインプログラムの小矩形変形処理(ステップS20)のサブルーチンを示すフローチャートである。このサブルーチンに移行すると、ステップS100で小多角形データ44の一色塗りフラグが[1]であるか否かを判別する。一色塗りフラグは各小多角形毎に小多角形が同一色で構成されているか否かを示すものであるから、小多角形が同一色で構成されていない場合(一色塗りフラグ=0のとき)はステップS102に進む。一方、小多角形が同一色で構成されている場合(一色塗りフラグ=1のとき)はステップS120に進む(詳細は後述の一色塗り処理参照)。
【0035】
A.小多角形が同一色で構成されていない場合(通常の変形処理)
ステップS102〜ステップS112で変形前の矩形を選択する処理を行う。まず、ステップS102で小多角形データ44より処理すべき小矩形(i、j)に使う画像データ番号を読み取る。例えば、小矩形は(0、0)に対しては透明色(画像データa)を使い、小矩形は(0、1)に対しては画像データbを使うというような画像データ番号を読み取る。このようにして、すべての小矩形(i、j)について図4に示す小多角形データ44の画像データ番号が読み取られる。次いで、ステップS104で読み取った画像データ番号に相当する小多角形単位のビット配列形式の画像データを得る。すなわち、読み出した画像データ番号に対応する小多角形単位のビット配列形式の画像データ(図2に示すもの)を記憶装置33から読み出す。これにより、画像データ番号に対して実際の画像データa、画像データb等が読み出され、すべての小矩形(i、j)について画像データが割り当てられる。
【0036】
次いで、ステップS106で小多角形データ44の左右反転フラグが[1]であるか否かを判別する。左右反転フラグは各小多角形毎に画像データを左右反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合(左右反転フラグ=1のとき)にはステップS108に進んで小多角形単位の画像データ左右反転する。これにより、例えば小矩形(0、2)に画像データcを割り当てたとき、小矩形(0、3)については左右反転フラグ=1であるから、画像データcが左右反転して割り当てられ、結局、図1に示すような口の画像に対応したものとなる。ステップS108を経ると、ステップS110に進む。一方、ステップS106で小多角形データ44の左右反転フラグが[0]であれば、ステップS108をジャンプしてステップS110に進む。したがって、このときは画像データの左右反転は行われず、読み出した画像データがそのまま小矩形(i、j)に割り当てられる。
【0037】
ステップS110では小多角形データ44の上下反転フラグが[1]であるか否かを判別する。上下反転フラグは各小多角形毎に画像データを上下反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合(上下反転フラグ=1のとき)にはステップS112に進んで小多角形単位の画像データ上下反転する。ステップS112を経ると、図9のステップS114に進む。一方、ステップS110で小多角形データ44の上下反転フラグが[0]であれば、ステップS112をジャンプしてステップS114に進む。したがって、このときは画像データの上下反転は行われず、読み出した画像データがそのまま小矩形(i、j)に割り当てられる。このようにして、変形前の矩形を選択する処理が行われたので、次いで、変形後の四角形の座標を算出する処理に移る。
【0038】
図9のステップS114で小矩形(i、j)の周囲4点の変形後の座標を、CPU31における内部レジスタ31aの格子点座標より得る処理を行う。言換えれば、CPU31の内部レジスタ31aに格納されている変形後の格子点座標から、処理すべき小矩形の頂点に当る4つの座標を読み出す。例えば、小矩形(i、j)の場合、その4つの頂点は格子点(i、j)、(i、j+1)、格子点(i+1、j)、格子点(i+1、j+1)となり、これらが変形後の四角形の座標である。そして、読み出した小矩形(i、j)の周囲4点の変形後の座標に基づいて変形対象の画像全体が滑らかに変形されるように、小矩形(i、j)を異なる四角形にそれぞれ変形する処理を行う。この処理(変形処理に相当)は座標変換処理であり、結局、この座標変換処理では前述したように分割された各小矩形の頂点の座標を求め、次いで、変形対象全体が滑らかに変形されるような変形後の各小四角形の頂点の座標を算出し、この算出した座標に基づいて変形後の異なる小四角形の形状を決定することにより、分割された各小矩形を異なる小四角形に変形することが行われる。
【0039】
次いで、ステップS116でいわゆるライン貼り付け法(データ変換処理に相当)により各小矩形内の画像データの配列を変形する処理を行う。ライン貼り付け法とは、変形元である分割した各小多角形のビット配列形式の画像データの配列を複数のラインに分割し、分割した各ラインを変形先の各多角形の対応する位置に順次転送するとともに、転送に際して転送先の大きさに合うように拡大又は縮小させながらそれぞれラインとして貼り付けていくことにより、変形後の各小多角形の画像データの配列を作成することをいう。
具体的には、図10(a)に示すように変形元となるビット配列形式の画像データにおける小矩形Cの画像データの配列を複数のライン1〜ラインnに分割し、分割した各ライン1〜nを図10(b)に示す変形先の四角形Dの対応する位置に、転送先の大きさに合うように拡大又は縮小させながらそれぞれライン1’〜ラインn’として貼り付けていくものである。このように、小矩形Cの画像データの配列を複数のライン1〜ラインnに分けて変形させながら貼り付けることで、画像の変形処理を行うことにより、元画像を滑らかに変形させることが可能になる。なお、ライン貼り付け法の詳しい処理方法は、サブルーチンで後述する。
【0040】
これにより、各小矩形は四角形へと変形処理され、最終的にすべての小矩形(i、j)に対応する画像データの配列が変形し、変形画像が得られることになる。
次いで、ステップS118でVDP34に変形済みの画像データを逐次転送する。これにより、小矩形(i、j)で示される変形後の画像データがVDP34に転送され、最終的にすべての小矩形(i、j)に対応する変形した画像データを合成することにより、TVディスプレイ36に変形後の画像が表示される。ステップS118の処理を経ると、メインプログラムにリターンする。
【0041】
B.小多角形が同一色で構成されている場合(一色塗り処理)
この場合はステップS100からステップS120に分岐し、ステップS120で小多角形データ44より処理すべき小矩形(i、j)を塗りつぶす色番号をを読み取る。例えば、小矩形(1、2)は一色塗りフラグ=1であるから、図4に示す赤という色番号を読み取る。同様に、小矩形(1、3)も一色塗りフラグ=1であり、赤という色番号を読み取る。次いで、図9のステップS122に進み、ステップS114の処理と同様に小矩形(i、j)の周囲4点の変形後の座標を、CPU31における内部レジスタ31aの格子点座標より得る処理を行う。これにより、小矩形(i、j)が四角形に変形される。次いで、ステップS124で変形後の四角形に対して小多角形単位の画像データを読み取った色番号に対応する色で塗りつぶす。これにより、例えば前述した小矩形(1、2)および(1、3)は共に赤の色て塗られることになる。ステップS124の処理を終了すると、ステップS118に進む。
【0042】
以上のルーチンを実行することにより、例えば図1(a)に示すような「口」の画像に対して適用した場合には、同図(b)に示すよう、各小矩形(1)、(2)、(3)、・・・・・(24)が小矩形単位で変形し、その変形に伴って各小矩形に割り当てられた画像データが変形する。したがって、ドットの配列が変形の程度に応じて変わることになり、また、このとき画像データが割り当てられていない小矩形(1)、(6)、(9)、(10)等は、変形後の四角形が指定された色で塗りつぶされる。その結果、変形後の四角形(1)’、(2)’、(3)’、・・・・・(24)’を全体として合成すると、図1(b)に示すように、変形した「口」の画像(絵)Bを作成することができる。
【0043】
変形例
なお、上記実施例ではビット配列形式の画像データを有する変形対象を小矩形に分割し、任意な四角形に変形しているが、これに限らず、本発明は任意の多角形に適用することが可能である。例えば、図11(a)に示すように、ビット配列形式で「口」の画像(絵)Eを構成する画像データを有する変形対象を複数の小六角形に分割し、各六角形を例えば上記実施例と同様の変形処理に従って異なる小六角形にそれぞれ変形することにより、図11(b)に示すような変形後の画像(「口」の画像(絵)Fを表す)を作成するようにしてもよい。
具体的に説明すると、図11(a)は変形前の画像データを示し、特にビット配列形式の画像データで、「口」の画像(絵)Eを有している。この画像データを変形するために、変形対象全体を予め分割して合計で22個の正六角形(以下、単に六角形という)(1)、(2)、(3)、・・・・・(22)を作成する。すなわち、分割する多角形は六角形である。分割された各六角形(1)、(2)、(3)、・・・・・(22)には、六角形単位でビット配列形式の画像データが割り当られている。割り当られる画像データの一例は、図12のように示される。なお、画像データは、複数のドットによって構成され、かつ複数の各ドット毎に表示色番号あるいはパレット番号を持っている。
【0044】
図12に示す画像データは予め用意されており、何れも六角形の形状をしている。例えば、六角形の画像データaはデータの無い状態(透明状態)、画像データbは口の上側の一部、・・・・・・・・、画像データiは口の下側の一部というように、a〜iの画像データによって口の画像が複数のパートに分けられている。この場合、六角形(1)、(2)は共に同一色で構成されているため、画像データは割り当てられておらず(つまり透明の状態)、六角形(3)には画像データbが割り当てられている。同様に、六角形(4)には画像データcを左右反転したものが割り当てられる。
このように、1つの画像を構成する全体のデータを分割して複数の六角形(1)、(2)、(3)、・・・・・(22)にそれぞれ割り当て、さらに六角形単位の画像データは左右反転あるいは上下反転して割り当てることもできる。そして、同一色で構成される六角形を除くすべての六角形に対して、六角形単位の画像データを割り当てると、図11(a)に示すような「口」の画像(絵)Eとなり、これは各六角形(1)、(2)、(3)、・・・・・(242毎の画像データ全体によって表示される

【0045】
次いで、変形対象全体が滑らかに変形されるように、所定の変形処理(例えば、前述の座標変換処理)に従って各六角形(1)、(2)、(3)、・・・・・(22)を図10(b)に示すような異なる六角形(1)’、(2)’、(3)’、・・・・・(22)’にそれぞれ変形する。例えば、六角形(1)は六角形(1)’に変形され、六角形(2)は六角形(2)’に変形される。
この過程では、各六角形(1)、(2)、(3)、・・・・・(22)の変形に伴って、それぞれの六角形に割り当てられたビット配列形式の画像データの配列が所定のデータ変換処理(例えば、いわゆるライン貼り付け処理)に従って変形する。すなわち、ドットの配列が変形の程度に応じて変わることになる。また、このとき画像データが割り当てられていない六角形(1)、(2)、(5)、(6)、(9)等は、変形後の六角形が指定された色で塗りつぶされる。したがって、変形後の六角形(1)’、(2)’、(3)’、・・・・・(22)’を全体として合成すると、図10(b)に示すように、変形した「口」の画像(絵)Fが得られる。
【0046】
この場合、変形対象の画像データの配列に対して各六角形(1)、(2)、(3)、・・・・・(22)毎に変形処理が行われるから、同様に少ないメモリ容量でビット配列形式の画像を自由に変形できる。また、変形対象を複数の六角形(1)、(2)、(3)、・・・・・(22)に分割し、各六角形(1)、(2)、(3)、・・・・・(22)毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することが可能になる。特に、複数に分割した後の六角形単位で、ビット配列形式の画像データが割り当てられるので、異なる六角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。さらに、六角形が同一色で構成されている場合には、一部の六角形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【0047】
このように本実施例では、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理(例えば、座標変換処理)に従って異なる小多角形にそれぞれ変形し、次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データが作成される。
【0048】
したがって、変形対象の画像は各小多角形毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなくなり、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形することができる。例えば、少ないメモリで従来と同等の画像変形処理を行うことが可能か、あるいは更にそれを上わまる効果を得ることができる。
また、変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形できる。
特に、複数に分割した後の小多角形単位で、ビット配列形式の画像データを割り当てるようにしているので、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【0049】
さらに、変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の1つのビット配列形式の画像データを割り当てたり、あるいは変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の1つのビット配列形式の画像データを左右反転又は上下反転して割り当てているので、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、全く同様の効果を得ることができる。また、分割後の小多角形単位で、画像データを割り当てるときに、異なる小多角形に同一の画像データを上下左右反転して用いることができ、画像データを大幅に減らすことができる。
【0050】
さらに、変形対象を複数の小多角形に分割した後に、各小多角形に対してビット配列形式の画像データを1つずつ割り当てるとき、他の小多角形と同一色で構成されている一部の複数の小多角形に対しては、その小多角形のビット配列形式の画像データ変形処理は行われず、異なる小多角形に変形した変形後の小多角形を同一色とする処理を行っている。したがって、小多角形が同一色で構成されている場合には、一部の小多角形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【0051】
具体的な波及効果としては、本発明の適用により、例えばアニメーション、ゲーム等のキャラクター又は背景データ等のようにドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようなビット配列形式の画像データを、自由にかつ滑らかに変形することができる。その結果、1つの元画像データから元画像データの一部又は全部が滑らかに変形した複数の画像データを作成することができる。
また、アニメーションに適用した場合、従来のように少しずつその形の異なる複数の画像データを予めメモリに持っておかなくても、一定時間毎に元画像データを本発明の変形法を用いて変形すれば、少ないメモリ容量で従来と同等のアニメーションを行うことができる。
ゲーム等に複数のキャラクターを登場させる場合にも、1つのキャラクターの画像データから全く別の複数のキャラクターを作ることができる。
ゲーム等に登場するキャラクターの一部分(例えば、目、鼻、手、足等のパーツ)の形を変える場合にも、元となる1つの画像データだけを持っていればよいという効果がある。
ゲーム等の背景等に特殊効果を付加する場合にも、従来のような拡大、縮小、四角形から四角形への変形等に比べてはるかに自由かつ滑らかな変形を行うことができ、従来にない特殊効果(例えば、背景を歪ませて異次元の世界を表現する等)を付加することができる。
【0052】
第2実施例
次に、本発明の第2実施例について説明する。
この第2実施例は一色塗り処理を省いたものであり、ハード的構成は前述した第1実施例と同様であり、説明を省略する。
図13、図14はメインプログラムの小矩形変形処理(ステップS20)のサブルーチンを示すフローチャートである。このサブルーチンに移行すると、ステップS200で小多角形データ44より処理すべき小矩形(i、j)に使う画像データ番号を読み取る。
【0053】
ここで、本実施例の小多角形データの内容は図15のように示される。図15において、小多角形データから前記実施例で用いた一色塗りフラグが省かれており、どのビット配列形式画像データを用いるかを示す画像データ番号、画像データを反転して用いるかどうかを示す左右反転フラグおよび上下反転フラグが設けられている。
複数の小矩形は(0、0)、(0、1)、(0、2)・・・(3、5)というデータで区分され、これらの小矩形(0、0)、(0、1)・・・(3、5)に対して個別に画像データ番号、左右反転フラグ、上下反転フラグが割り当てられる。例えば、小矩形は(0、0)に対しては画像データaが割り当てられ、小矩形は(0、1)に対しては画像データbが割り当てられている。
なお、本実施例では一色塗りフラグがないから、通常の変形処理が行われる。また、左右反転フラグおよび上下反転フラグは、それぞれ[1]のときに画像データの反転が行われる。
【0054】
さて、サブルーチンの説明に戻り、ステップS200で小多角形データより処理すべき小矩形(i、j)に使う画像データ番号を読み取る際には、例えば、小矩形は(0、0)に対しては画像データaを使い、小矩形は(0、1)に対しては画像データbを使うというような画像データ番号を読み取る。このようにして、すべての小矩形(i、j)について図15に示す小多角形データの画像データ番号が読み取られる。次いで、ステップS202で読み取った画像データ番号に相当する小多角形単位のビット配列形式の画像データを得る。すなわち、読み出した画像データ番号に対応する小多角形単位のビット配列形式の画像データ(図2に示すもの)を記憶装置33から読み出す。これにより、画像データ番号に対して実際の画像データa、画像データb等が読み出され、すべての小矩形(i、j)について画像データが割り当てられる。
【0055】
次いで、ステップS204で小多角形データの左右反転フラグが[1]であるか否かを判別する。左右反転フラグは各小多角形毎に画像データを左右反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合(左右反転フラグ=1のとき)にはステップS206に進んで小多角形単位の画像データ左右反転する。これにより、例えば小矩形(0、2)に画像データcを割り当てたとき、小矩形(0、3)については左右反転フラグ=1であるから、画像データcが左右反転して割り当てられる。ステップS206を経ると、ステップS208に進む。一方、ステップS204で小多角形データの左右反転フラグが[0]であれば、ステップS206をジャンプしてステップS208に進む。したがって、このときは画像データの左右反転は行われず、読み出した画像データがそのまま小矩形(i、j)に割り当てられる。
【0056】
ステップS208では小多角形データの上下反転フラグが[1]であるか否かを判別する。上下反転フラグは各小多角形毎に画像データを上下反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合(上下反転フラグ=1のとき)にはステップS210に進んで小多角形単位の画像データを上下反転する。ステップS210を経ると、図13のステップS212に進む。一方、ステップS208で小多角形データの上下反転フラグが[0]であれば、ステップS210をジャンプしてステップS212に進む。したがって、このときは画像データの上下反転は行われず、読み出した画像データがそのまま小矩形(i、j)に割り当てられる。このようにして、変形前の矩形を選択する処理が行われたので、次いで、変形後の四角形の座標を算出する処理に移る。
【0057】
図14のステップS212で小矩形(i、j)の周囲4点の変形後の座標を、CPU31における内部レジスタ31aの格子点座標より得る処理を行う。言換えれば、CPU31の内部レジスタ31aに格納されている変形後の格子点座標から、処理すべき小矩形の頂点に当る4つの座標を読み出す。例えば、小矩形(i、j)の場合、その4つの頂点は格子点(i、j)、(i、j+1)、格子点(i+1、j)、格子点(i+1、j+1)となり、これらが変形後の四角形の座標である。そして、読み出した小矩形(i、j)の周囲4点の変形後の座標に基づいて変形対象の画像全体が滑らかに変形されるように、小矩形(i、j)を異なる四角形にそれぞれ変形する処理を行う。この処理(変形処理に相当)は座標変換処理であり、結局、この座標変換処理では前述したように分割された各小矩形の頂点の座標を求め、次いで、変形対象全体が滑らかに変形されるような変形後の各小四角形の頂点の座標を算出し、この算出した座標に基づいて変形後の異なる小四角形の形状を決定することにより、分割された各小矩形を異なる小四角形に変形することが行われる。
【0058】
次いで、ステップS214でいわゆるライン貼り付け法(データ変換処理に相当)により各小矩形内の画像データの配列を変形する処理を行う。これにより、各小矩形は四角形へと変形処理され、最終的にすべての小矩形(i、j)に対応する画像データの配列が変形し、変形画像が得られることになる。
なお、ライン貼り付け法の詳しい処理方法は、同様にサブルーチンで後述する。
次いで、ステップS216でVDP34に変形済みの画像データを逐次転送する。これにより、小矩形(i、j)で示される変形後の画像データがVDP34に転送され、最終的にすべての小矩形(i、j)に対応する変形した画像データを合成することにより、TVディスプレイ36に変形後の画像が表示される。ステップS216の処理を経ると、メインプログラムにリターンする。
【0059】
以上のルーチンを実行することにより、例えば図1(a)に示すような「口」の画像に対して適用した場合には、同図(b)に示すよう、各小矩形(1)、(2)、(3)、・・・・・(24)が小矩形単位で変形し、その変形に伴って各小矩形に割り当てられた画像データが変形する。したがって、ドットの配列が変形の程度に応じて変わることになり、また、多角形分割した後の小矩形単位でビット配列形式の画像データを持っているので、異なる小多角形に同一の画像データをそのままあるいは上下左右反転して用いることができ、画像データを大幅に減らすことができる。
さらに、変形対象の画像データをすべて持つ場合に比べ、格段に少ない画像データで全く同様の効果を得ることができる。
【0060】
次に、前述したいわゆるライン貼り付け法の処理内容について、以下に具体的に詳述する。
ライン貼り付け処理のサブルーチン
次に、上記ステップS116(およびステップS214)におけるライン貼り付け法(矩形から任意の四角形への画像データの変形方法)の具体的な内容は以下の通りである。
図16はライン貼り付け法の処理を示すサブルーチンのフローチャートであり、このサブルーチンの処理の対象となる画像データの例は図17(a)、(b)のように示される。すなわち、図17(a)は変形前の元画像データを示し、詳しくは変形元となるビット配列形式の画像データを分割した場合のある1つの小矩形の画像データ(つまり、変形前の小矩形画像データ)に対応する。ここで説明するライン貼り付け法は、図17(a)に示すように変形前の小矩形画像データとして縦(Y)方向が12ピクセル、横(X)方向が16ピクセルで構成される元画像データ(矩形ABCDで表される)を、図17(b)に示すような四角形A’B’C’D’に変形する内容である。その変形処理では、まず元画像データを12本の水平ライン(ライン0〜ライン11)に分割する。そして、分割した各ラインを画像変形態様に応じて変形後の四角形に順番に貼り付けていく処理が行われ、変形画像が得られる。
【0061】
サブルーチンのステップを進めながら、上記処理について説明する。
このサブルーチンに移行すると、まずステップS100で辺A’B’についてラインの端点処理を行う。これは、変形後の四角形のラインの端点A’B’を求めるものである。なお、ステップS100の処理(辺A’B’の位置を求める方法)については、後述のサブルーチンで詳述する。
すなわち、図17(a)(b)に示すように、分割した各ラインを画像変形態様に応じて変形後の四角形に順番に貼り付けていく処理では、以下のような状態に着目する必要がある。辺AB上にあった各ラインの一方の端点は辺A’B’上に、また、辺DC上にあった他方の端点は辺D’C’上に移動する。このとき、辺ABと辺A’B’および辺DCと辺D’C’では、それらの長さが異なるので、辺A’B’、辺D’C’上でラインの端点が重なったりすることがある。これは、図17(b)の☆印で示す部分であり、辺A’B’上のライン5およびライン6が重なっている。また、同一のラインを2回以上貼り付けなければならないこともある。これは、図17(b)の★印で示す2つの部分であり、辺D’C’上のライン3およびライン8が2回繰り返され、それぞれライン3、3’およびライン8、8’となっている。
【0062】
図18にラインを2回貼り付ける様子を示す。図18(a)は変形前の元画像データであり、詳しくは変形元となるビット配列形式の画像データを分割した場合のある1つの小矩形の画像データに対応する。図18(b)は変形後の1つの四角形の画像データである。変形前の画像データのライン3が、変形後は途中のドットから右側6ドットだけライン3、3’として2ライン分貼り付けられる。また、変形前の画像データのライン5とライン6が、変形後は最初のドットから7ドットまで(つまり左側7ドット分)については同じドットに貼り付けられ、以後の右側7ドットについてはライン5、ライン6として別個に貼り付けられる。なお、図17〜図26はライン貼り付け法を実行する場合の、複数の実行過程における変形前の小矩形および変形後の四角形を示すものであり、各過程の具体例は後述のサブルーチンを説明するときに述べる。
【0063】
次いで、ステップS102で辺D’C’についてラインの端点処理を行う。これは、変形後の四角形のラインの端点D’C’を求めるものである。なお、ステップS102の処理(辺D’C’の位置を求める方法)については、同様に後述のサブルーチンで詳述する。
このようにして、各ラインの端点が移動する辺A’B’と辺D’C’の位置が求められると、これらのラインの端点位置は図27に示すように、CPU31の内部レジスタ31aにある端点バッファにデータを格納する。この場合、内部レジスタ31aには辺A’B’上の端点バッファと、辺D’C’上の端点バッファという2つの格納エリアがある。そして、これらの各端点バッファではラインの端点の座標と、そのライン番号を対応付けて格納する。2つの端点バッファは端点の位置を読み出すときや、ラインの描画位置を決めるときに使用される。
【0064】
次いで、ステップS104〜ステップS110でラインを描画する処理を行う。まず、ステップS104では2つの端点バッファからライン番号の同じデータを読み出す。次いで、ステップS106で同じライン番号のラインが複数あるときには描画回数が最小になるように組み合せる。これは、図28に示すように、例えば辺A’B’上で同じライン番号のラインが3本あり、一方、辺D’C’上で同じライン番号のラインが2本ある場合、上側の各端点同士を1本のラインで引き、辺A’B’上の2つの端点と辺D’C’上の1つの端点とを2本のラインで引くような処理を行うものである。
次いで、ステップS108で描画処理(詳細はサブルーチンで後述)を行う。次いで、ステップS110ですべてのラインについて処理したか否かを判別し、NOのときはステップS104に戻って同様の処理を繰り返す。そして、すべてのラインについてステップS104〜ステップS108の処理が終了すると、ステップS110からYESに抜けてルーチンを終了する。このようにして、各小矩形が異なる四角形にそれぞれ変形され、変形対象の画像全体が滑らかに変形することになる。
【0065】
ライン端点処理のサブルーチン
次に、上記ステップS100およびステップS102におけるラインの端点処理のサブルーチンについて説明する。
図29はラインの端点処理(ステップS110の処理)を示すサブルーチンのフローチャートである。まず、貼り付けるラインの一方の端点となる辺A’B’の位置を求める方法から説明する。なお、貼り付けるラインの他方の端点となる辺D’C’の位置を求める方法も同様である。
ステップS200で座標決定用誤差e1、ライン選択用誤差e2、現在ライン番号をすべて[0]に初期設定する。座標決定用誤差e1とは、端点の位置を決めるとき又はラインの描画位置を決めるときに用いる座標決定用誤差のことである。ライン選択用誤差e2とは、端点に割り当てるラインを選択するときに用いるライン選択用誤差のことである。これにより、最初は各誤差が[0]になる。
【0066】
次いで、ステップS202で処理を開始する点(A’又はD’)の座標をCPU31の内部レジスタ31aにある現在座標というエリアに格納する。例えば、貼り付けるラインの一方の端点となる辺A’B’の位置を求める処理では、A’の座標を格納する。一方、貼り付けるラインの他方の端点となる辺D’C’の位置を求める処理では、D’の座標を格納する。CPU31の内部レジスタ31aには図27に示すように、端点バッファの他に、以下のような格納エリアがある。
座標決定用誤差e1のエリア
座標決定用誤差増分Δe1のエリア
現在座標のエリア
ライン選択用誤差e2のエリア
ライン選択誤差増分Δe2のエリア
現在ライン番号
また、ドット選択用の格納エリアとしては、以下のようなものがある。
ドット選択用誤差e3のエリア
ドット選択用誤差増分Δe3のエリア
現在ドット番号のエリア
【0067】
次いで、ステップS204でY方向のピクセル数がX方向のピクセル数より多いか否かを判別する。いま、貼り付けるラインの一方の端点となる辺A’B’の位置を求める場合の具体例は図19に示される。図19(a)に示す変形前のラインの一方の端点となる辺ABを示し、図19(b)は貼り付けるラインの一方の端点となる辺A’B’の様子を示し、さらに図19(c)は辺A’B’におけるX方向およびY方向のピクセル数の変化を示している。この例に対応させて考えると、辺A’B’はY方向に11ピクセル、X方向に4ピクセルに渡って描画されるので、ステップS204の判別結果はYESとなり、このケースではステップS206に進む。一方、逆のケースではNOに分岐して図30に示すステップS238に進む。
また、この場合、図19に示すケースでは点A’から点B’に向ってY座標を1ずつ変えていったときにX座標の変化する位置を求めると、そのとき変化した座標が辺A’B’の位置となる。したがって、無条件に位置の決る始点(点A’)を除く10個のドットを打つときには、X座標の変化する位置としてX座標が変化する3箇所を求めることになる。
【0068】
ステップS206に進むと、座標決定用誤差増分Δe1を(Xピクセル数−1)/(Yピクセル数−1)に初期設定するとともに、ライン選択誤差増分Δe2を(元ライン数−1)/(Yピクセル数−1)に初期設定する。ステップS200〜ステップS206の処理により必要な初期設定が完了する。次いで、ステップS208で現在のライン番号と現在座標を端点バッファ(図27参照)に格納する。次いで、ステップS210で現在座標のY座標を変更する。次いで、ステップS212で座標決定用誤差e1についての判別を以下のようにして行う。すなわち、選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(X方向のピクセル数−1)/(Y方向のピクセル数−1)である。
【0069】
なお、ここでは、座標決定用であるからeをe1とし、ΔeをΔe1として処理をする。そうすると、e1=e1+Δe1となる。この値が1/2より大きくなったか否かを判別する。そして、誤差増分Δe1を加えた結果e1がe1≧(1/2)であれば、ステップS214に進んで次に打つ点の座標(次の現在座標に相当)のX座標を変更する。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。
【0070】
このようにすると、点A’から点B’に向ってY座標を1ずつ変えていったときに、少なくとも誤差増分Δe1が1の半分より大きい場合に、次の座標を変更するので、X座標の変化する位置が滑らかにつながることになる。なお、この方法はいわゆるBresenhamのアルゴリズムとして用いられるものである。
次いで、ステップS216で誤差補正を行い、e1=e1−1とする。これは、選択誤差が1/2以上になって次の座標を変更したので、1を減算することにより、再び次の現在座標から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS218に進む。
一方、誤差増分Δe1を加えた結果e1がe1<(1/2)であれば、ステップS214、ステップS216をジャンプしてステップS218に進む。このときは、次に打つ点のX座標は元のままにする。また、この場合は選択誤差e1は補正しない。以上のステップS210〜ステップS216を実行することにより、貼り付けるラインの一方の端点となる辺A’B’の位置が決定される。
【0071】
ここで、図19の場合(貼り付けるラインの一方の端点となる辺A’B’の位置を決定する場合)の具体例について説明する。
まず、最初の端点A’は無条件に決まる。この時点で、選択誤差eは[0]に初期設定されている。また、端点A’から端点B’に対してはY方向に11ピクセル、X方向に4ピクセルに渡って描画されるので、誤差増分Δeは
Δe=(4−1)/(11−1)=0.30である。次いで、選択誤差eとしてe=0を加え、誤差増分ΔeとしてΔe=0.30を加えると、
e=0+0.30=0.30<(1/2)となる。したがって、このときは次に打つ点▲1▼のX座標は変更しない(図19(c)参照)。また、選択誤差eは1/2より小さいので、選択誤差eの補正は行わない。次いで、ここまでの選択誤差e=0.30に誤差増分ΔeとしてΔe=0.30を加えると、
e=0.30+0.30=0.60≧(1/2)となるので、今度は次に打つ点▲2▼のX座標を変更する(図19(c)参照)。以上の処理を繰り返すことにより、点▲5▼、▲9▼の位置でX座標の変更が行われ、最終的に図19(c)に示すように、端点B’の位置が決定される。
【0072】
一方、上記ステップS204でY方向のピクセル数がX方向のピクセル数より小さいときは図30のステップS238に進み、今度はY座標の方を変更する処理を行う。すなわち、ステップS238で座標決定用誤差増分Δe1を(Yピクセル数−1)/(Xピクセル数−1)に初期設定するとともに、ライン選択誤差増分Δe2を(元ライン数−1)/(Xピクセル数−1)に初期設定する。次いで、ステップS240で現在のライン番号と現在座標を端点バッファ(図27参照)に格納する。次いで、ステップS242で現在座標のX座標を変更する。次いで、ステップS244で座標決定用誤差e1についての判別を以下のようにして行う。すなわち、選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(Y方向のピクセル数−1)/(X方向のピクセル数−1)である。なお、ここでは、同様に座標決定用であるからeをe1とし、ΔeをΔe1として処理をする。そうすると、e1=e1+Δe1となる。この値が1/2より大きくなったか否かを判別する。そして、誤差増分Δe1を加えた結果e1がe1≧(1/2)であれば、ステップS246に進んで次に打つ点の座標(次の現在座標に相当)のY座標を変更する。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。
【0073】
このようにすると、点D’から点C’に向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe1が1の半分より大きい場合に、次の座標を変更するので、Y座標の変化する位置が滑らかにつながることになる。次いで、ステップS248で誤差補正を行い、e1=e1−1とする。これは、選択誤差が1/2以上になって次の現在座標のY座標を変更したので、1を減算することにより、再び次の現在座標から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS250に進む。
一方、誤差増分Δe1を加えた結果e1がe1<(1/2)であれば、ステップS246、ステップS248をジャンプしてステップS250に進む。このときは、次に打つ点のY座標は元のままにする。また、この場合は選択誤差e1は補正しない。以上のステップS242〜ステップS248を実行することにより、貼り付けるラインの一方の端点となる辺D’C’の位置が決定される。
【0074】
ここで、図20の場合(貼り付けるラインの他方の端点となる辺D’C’の位置を決定する場合)の具体例について説明する。
図20(a)は変形前のラインの他方の端点となる辺DCを示し、図20(b)は貼り付けるラインの他方の端点となる辺D’C’の様子を示し、さらに図20(c)は辺D’C’におけるX方向およびY方向のピクセル数の変化を示している。この例に対応させて考えると、辺D’C’はY方向に14ピクセル、X方向に5ピクセルに渡って描画されるので、点D’から点C’に向ってY座標を1ずつ変えていったときにX座標の変化する位置を求めると、そのとき変化した座標が辺D’C’の位置となる。したがって、無条件に位置の決る始点(点D’)を除く13個のドットを打つときには、X座標の変化する位置としてX座標が変化する4箇所を求めることになる。
【0075】
まず、最初の端点D’は無条件に決まる。この時点で、選択誤差eは[0]に初期設定されている。また、端点D’から端点C’に対してはY方向に14ピクセル、X方向に5ピクセルに渡って描画されるので、誤差増分Δeは
Δe=(5−1)/(14−1)=0.30である。次いで、選択誤差eとしてe=0を加え、誤差増分ΔeとしてΔe=0.30を加えると、
e=0+0.30=0.30<(1/2)となる。したがって、このときは次に打つ点▲1▼のX座標は変更しない(図20(c)参照)。また、選択誤差eは1/2より小さいので、選択誤差eの補正は行わない。次いで、ここまでの選択誤差e=0.30に誤差増分ΔeとしてΔe=0.30を加えると、
e=0.30+0.30=0.60≧(1/2)となるので、今度は次に打つ点▲2▼のX座標を変更する(図20(c)参照)。以上の処理を繰り返すことにより、点▲5▼、▲9▼、(12)(なお、10以降の○付き数字は表示が困難につき、かっこ付きの半角数字で表す)の位置でX座標の変更が行われ、最終的に図20(c)に示すように、端点C’の位置が決定される。
【0076】
さて、再び図29のフローチャートに戻り、端点位置の決定が行われると、ステップS218に進む。ステップS218〜ステップS236およびステップS250〜ステップS266では、辺A’B’、辺D’C’に分割された水平ラインのうち、どのラインの端点を割り当てるかを求める処理を行う。
まず、図21(b)に示す辺A’B’のように図21(a)に示す元となる辺ABよりも短い辺に、貼り付けるラインの端点を割り当てる処理内容について説明する。元画像データの水平ライン数は12本、辺A’B’に貼り付けることのできるライン数は11本なので、元画像データの12本のラインのうち、2本のラインの端点が辺A’B’上で重なる。重なるラインの選択の処理は、次のようになる。
【0077】
ステップS218で選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(元画像のライン数−1)/(辺A’B’のピクセル数−1)である。なお、ここでは、ライン選択用であるからeをe2とし、ΔeをΔe2として処理をする。そうすると、e2=e2+Δe2となる。次いで、この値が1/2より大きくなったか否かをステップS220で判別する。そして、誤差増分Δe2を加えた結果e2がe2≧(1/2)であれば、ステップS224に進んで現在のライン番号を[1]だけインクリメントする(つまり、次のライン番号に進める)。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。現在のライン番号を1進めることにより、辺A’B’上の次の点には次のラインの端点が割り当てられる。
【0078】
このようにすると、点A’から点B’に向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe2が1の半分より大きい場合に、次のライン番号に変更するので、ライン端点の変化する位置が滑らかにつながることになる。
また、ステップS220でe2が1/2未満のときはステップS236にジャンプする。ステップS236ではすべての端点について処理したか否かを判別し、すべての端点について処理が終了していなければ、ステップS208に戻って同様の処理を繰り返す。したがって、誤差増分Δe2が1の半分より大きくなった時点でステップS236へジャンプせず、ステップS224の方に進むことになる。
【0079】
ステップS224を経ると、続くステップS224で誤差補正を行い、e2=e2−1とする。これは、選択誤差が1/2以上になって次のライン番号に変更したので、1を減算することにより、再び次のライン番号から誤差増分Δeを加えて同様の判別を始めるためである。次いで、ステップS228で再び選択誤差e2が1/2以上であるか否かを判別する。これは、誤差補正を行った結果について、再度選択誤差e2の大ささを判断するものである。そして、誤差補正を行った結果、選択誤差e2が依然として1/2以上であれば、ステップS230に進み、現在のライン番号と現在座標をCPU31の内部レジスタ31a内の端点バッファに格納する。次いで、ステップS232でライン番号を[1]だけインクリメントする(つまり、次のライン番号に進める)。これにより、辺A’B’上の同じ点に、次のラインの端点も割り当てられる。そして、選択誤差e2が1/2未満になるまで、同じ点に次のラインの端点が順次割り当てられていく。
【0080】
次いで、ステップS234で誤差補正を行い、e2=e2−1とする。これは、上記同様に選択誤差が1/2以上になって次のライン番号に変更したので、1を減算することにより、再び次のライン番号から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS228に戻って同様の処理を繰り返す。したがって、誤差を補正した結果(選択誤差)e2が未だ1/2より大きければ、ライン番号を更に1進めて辺A’B’上の同じ点に、次のラインの端点が割り当てられ、選択誤差e2が1/2未満になるまで、同じ点に次のラインの端点が割り当てられることになる。
【0081】
一方、ステップS228で誤差増分Δe2を加えた結果e2がe2<(1/2)であれば、ステップS236にジャンプする。このときは、次のライン番号に変更されず、ライン番号は元のままである。また、この場合は選択誤差e2は補正しない。ステップS236ではすべての端点について処理したか否かを判別する。すべての端点について処理が終了していなければ、ステップS208に戻って処理を繰り返す。これにより、点A’から点B’に向ってX座標を1ずつ変えていったときに、誤差増分Δe2の大きさに応じて上記のような処理が繰り返される。誤差増分Δe2が1/2より大きい場合に、次のライン番号に変更されていく。以上のステップS218〜ステップS236を実行することにより、辺A’B’のように元となる辺ABよりも短い辺に、貼り付けるラインの端点を割り当てる場合の各ライン端点の位置が決定される。
【0082】
ここで、図21の場合(辺A’B’のように元となる辺ABよりも短い辺に、ラインの一方の端点を割り当てる場合)の具体例について説明する。
図21(a)は変形前のラインの一方の端点となる辺ABを示し、図21(b)は貼り付けるラインの一方の端点となる辺A’B’の様子を示し、さらに図21(c)は辺A’B’におけるX方向およびY方向のピクセル数の変化を示している。まず、ライン0の端点が頂点A’上に決まる。この時点でライン番号は0、選択誤差eは[0]に初期設定されている。また、誤差増分Δeは
Δe=(12−1)/(11−1)=1.10である。次いで、選択誤差eをe=0とし、誤差増分ΔeとしてΔe=1.10を加えると、
e=0+1.10=1.10≧(1/2)となる。これにより、ライン番号を1進める(ライン1になる:図21(c)参照)。したがって、辺A’B’上の点▲1▼にはライン1の端点が割り当てられる(図21(b)参照)。このとき、選択誤差eを次のように補正する。
e=1.10−1=0.10<1/2
【0083】
ここまでの選択誤差e=0.10に、再び誤差増分Δe=1.10を加えると、
e=0.10+1.10=1.20≧(1/2)となる。これにより、ライン番号を1進める(今度はライン2になる:図21(c)参照)。したがって、辺A’B’上の点▲2▼にはライン2の端点が割り当てられる(図21(b)参照)。このとき、選択誤差eを次のように補正する。
e=1.20−1=0.20<1/2
以下、同様の処理を行い、辺A’B’上の点▲3▼にはライン3の端点が、点▲4▼にはライン4の端点が、点▲5▼にはライン5の端点がそれぞれ割り当てられる(図21(b)参照)。このとき、ライン5を割り当てて選択誤差eを補正した時点で選択誤差eは0.50になる。選択誤差eを補正した時点で未だe≧1/2なので、ライン番号を更に1進めて(ライン6になる)、点▲5▼にライン6の端点も割り当てる。次いで、さらに選択誤差eを以下のように補正する。
e=0.50−1=−0.50<1/2
以上の処理を繰り返すことにより、辺A’B’に分割された元の水平ライン内のどのラインの端点を割り当てるかが決まる。
【0084】
さて、再び図30のフローチャートに戻って説明する。
上述の説明は辺A’B’のように元となる辺ABよりも短い辺に、貼り付けるラインの端点を割り当てる処理内容であったが、今度は、図22(b)に示す辺D’C’のように図22(a)に示す元となる辺DCよりも長い辺に、貼り付けるラインの端点を割り当てる処理内容について説明する。この場合には図30に示すステップS250以降の処理が実行される。これは、先のステップS204の判別結果がNOである場合に相当し、この判別結果がNOということは元となる辺DCよりも長い辺D’C’の処理に進むケースである。
ステップS204の判別結果がNOであるときは図30のステップS238に分岐し、端点の位置決定を行った後、ステップS250以降の各ステップを実行する。
まず、元画像データの水平ライン数は12本、辺D’C’に貼り付けることのできるライン数は14本なので、元画像データの12本のラインのうち、2本のラインの端点が辺D’C’上で2回貼り付けられることになる。貼り付けられるラインの選択の処理は、次のようになる。
【0085】
ステップS250で選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(元画像のライン数−1)/(辺D’C’のピクセル数−1)である。なお、ここでは、ライン選択用であるからeをe2とし、ΔeをΔe2として処理をする。そうすると、e2=e2+Δe2となる。次いで、この値が1/2より大きくなったか否かをステップS252で判別する。そして、誤差増分Δe2を加えた結果e2がe2≧(1/2)であれば、ステップS254に進んで現在のライン番号を[1]だけインクリメントする(つまり、次のライン番号に進める)。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。現在のライン番号を1進めることにより、辺D’C’上の次の点には次のラインの端点が割り当てられる。
【0086】
このようにすると、点D’から点C’に向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe2が1の半分より大きい場合に、次のライン番号に変更するので、ライン端点の変化する位置が滑らかにつながることになる。
また、ステップS252でe2が1/2未満のときはステップS266にジャンプする。ステップS266ではすべての端点について処理したか否かを判別し、すべての端点について処理が終了していなければ、ステップS240に戻って同様の処理を繰り返す。したがって、誤差増分Δe2が1の半分より大きくなった時点でステップS266へジャンプせず、ステップS254の方に進むことになる。
【0087】
ステップS254を経ると、続くステップS256で誤差補正を行い、e2=e2−1とする。これは、選択誤差が1/2以上になって次のライン番号に変更したので、1を減算することにより、再び次のライン番号から誤差増分Δeを加えて同様の判別を始めるためである。次いで、ステップS258で再び選択誤差e2が1/2以上であるか否かを判別する。これは、誤差補正を行った結果について、再度選択誤差e2の大きさを判断するものである。そして、誤差補正を行った結果、選択誤差e2が依然として1/2以上であれば、ステップS260に進み、現在のライン番号と現在座標をCPU31の内部レジスタ31a内の端点バッファに格納する。次いで、ステップS262でライン番号を[1]だけインクリメントする(つまり、次のライン番号に進める)。これにより、辺D’C’上の同じ点に、次のラインの端点も割り当てられる。そして、選択誤差e2が1/2未満になるまで、同じ点に次のラインの端点が順次割り当てられていく。
【0088】
次いで、ステップS264で誤差補正を行い、e2=e2−1とする。これは、上記同様に選択誤差が1/2以上になって次のライン番号に変更したので、1を減算することにより、再び次のライン番号から誤差増分Δeを加えて同様の判別を始めるためである。その後、再びステップS258に戻って同様の処理を繰り返す。したがって、誤差を補正した結果(選択誤差)e2が未だ1/2より大きければ、ライン番号を更に1進めて辺D’C’上の同じ点に、次のラインの端点が割り当てられることになる。そして、選択誤差e2が1/2未満になるまで、同じ点に次のラインの端点が割り当てられていく。
【0089】
一方、ステップS258で誤差増分Δe2を加えた結果e2がe2<(1/2)であれば、ステップS266にジャンプする。このときは、次のライン番号に変更されず、ライン番号は元のままである。また、この場合は選択誤差e2は補正しない。ステップS266ではすべての端点について処理したか否かを判別する。すべての端点について処理が終了していなければ、ステップS240に戻って処理を繰り返す。これにより、点D’から点C’に向ってX座標を1ずつ変えていったときに、誤差増分Δe2の大きさに応じて上記のような処理が繰り返される。誤差増分Δe2が1/2より大きい場合に、次のライン番号に変更されていく。以上のステップS250〜ステップS266を実行することにより、辺D’C’のように元となる辺DCよりも長い辺に、貼り付けるラインの端点を割り当てる場合の各ライン端点の位置が決定される。
【0090】
ここで、図22の場合(辺D’C’のように元となる辺ABよりも長い辺に、ラインの一方の端点を割り当てる場合)の具体例について説明する。
図22(a)は変形前のラインの一方の端点となる辺DCを示し、図22(b)は貼り付けるラインの一方の端点となる辺D’C’の様子を示し、さらに図22(c)は辺D’C’におけるX方向およびY方向のピクセル数の変化を示している。まず、ライン0の端点が頂点てD’上に決まる。この時点でライン番号は0、選択誤差eは[0]に初期設定されている。また、誤差増分Δeは
Δe=(12−1)/(14−1)=0.84である。次いで、選択誤差eをe=0(初期設定値)とし、誤差増分ΔeとしてΔe=0.84を加えると、
e=0+0.84=0.84≧(1/2)となる。これにより、ライン番号を1進める(ライン1になる:図22(c)参照)。したがって、辺D’C’上の点▲1▼にはライン1の端点が割り当てられる(図22(b)参照)。このとき、選択誤差eを次のように補正する。
e=0.84−1=−0.16<1/2
【0091】
同様に、辺D’C’上の点▲2▼にはライン2の端点が、点▲3▼にはライン3の端点が割り当てられる(図22(b)参照)。
ライン3を割り当てて選択誤差eを補正して時点で、選択誤差eは−0.48になっている。ここまでの選択誤差e=−0.48に再び誤差増分Δe=0.84を加えると、
e=−0.48+0.84=0.36<(1/2)になるので、ライン3を点▲4▼にもう一度貼り付ける(図22(c)参照)。このとき、選択誤差eは補正しない。
以上の処理を繰り返すことにより、辺D’C’に分割された元の水平ライン内のどのラインの端点を割り当てるかが決まる。ライン端点処理が終わった時点における端点バッファへの格納データは図33に示すようになる。図33では、辺A’B’上のライン0〜ライン11の12個の端点位置が座標によって端点バッファに記憶される。また、辺D’C’上のライン0〜ライン11(そのうちライン3とライン8は2つある)の14個の端点位置が座標によって端点バッファに記憶される。
【0092】
ライン描画処理のサブルーチン
さて、その後はこのようにして求めた辺A’B’上に一方のラインの端点を持ち、辺D’C’上に他方の端点を持つような複数のラインに元画像データ(矩形ABCD)の対応するラインを順番に貼り付けていけば画像変形が行える。ただし、このとき転送先と転送元ではラインの長さ(ピクセル数)が異なるので、ライン毎に拡大あるいは縮小をしながら貼り付けていくことになる。
そこで、続いて前述の図16に示したステップS108のラインの描画処理のサブルーチンについて説明する。
図31はラインの描画処理を示すサブルーチンのフローチャートである。まず、貼り付けるラインの位置を求める処理から説明する。具体例としては、後にライン0の貼り付け位置を求める方法を説明をする。他のラインの貼り付け位置についても同様である。
まず、ステップS300で座標決定用誤差e1、ドット選択用誤差e3、現在ドット番号をすべて[0]に初期設定する。座標決定用誤差e1とは、ここではラインの描画位置を決めるときに用いる座標決定用誤差のことである。ドット選択用誤差e3とは、ラインに割り当てるドットを選択するときに用いるドット選択用誤差のことである。これにより、最初は各誤差が[0]になる。
【0093】
次いで、ステップS302で辺A’B’上の端点の座標をCPU31の内部レジスタ31aにある現在座標というエリアに格納する(図27参照)。なお、ドット選択処理の過程で使用される関連の格納エリアとしては、ドット選択用誤差e3のエリア、ドット選択用誤差増分Δe3のエリア、現在ドット番号のエリアが用いられる。
次いで、ステップS304でY方向のピクセル数がX方向のピクセル数より多いか否かを判別する。いま、ライン0を貼り付けるため各ドットの位置を求める場合の具体例は図16に示される。図23(a)は変形前のラインADを示し、図23(b)は変形後のライン辺A’D’の様子を示し、さらに図23(c)は辺A’D’におけるX方向およびY方向のピクセル数の変化を示している。この例に対応させて考えると、辺A’D’はY方向に10ピクセル、X方向に2ピクセルに渡って描画されるので、ステップS304の判別結果はYESとなり、このケースではステップS306に進む。一方、逆のケースではNOに分岐して図32に示すステップS338に進む。
また、この場合、図23に示すケースでは点A’から点D’に向ってX座標を1ずつ変えていったときにY座標の変化する位置を求めると、そのとき変化した座標がラインA’D’を貼り付けする位置となる。したがって、無条件に位置の決る始点(点A’)を除く9個のドットを打つときには、X座標の変化する位置としてX座標が変化する1箇所を求めることになる。
【0094】
ステップS306に進むと、座標決定用誤差増分Δe1を(Xピクセル数−1)/(Yピクセル数−1)に初期設定するとともに、ドット選択誤差増分Δe3を(転送元ドット数−1)/(転送先ドット数−1)に初期設定する。ステップS300〜ステップS306の処理により必要な初期設定が完了する。次いで、ステップS308で現在座標に描画されていなければ、現在ドット番号のドットを描画する。これにより、該当するラインの最初の点▲1▼がドットで描画される。次いで、ステップS310で現在座標のY座標を変更する。次いで、ステップS312で座標決定用誤差e1についての判別を以下のようにして行う。すなわち、選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(Y方向のピクセル数−1)/(X方向のピクセル数−1)である。なお、ここでは、座標決定用であるからeをe1とし、ΔeをΔe1として処理をする。そうすると、e1=e1+Δe1となる。この値が1/2より大きくなったか否かを判別する。そして、誤差増分Δe1を加えた結果e1がe1≧(1/2)であれば、ステップS314に進んで次に打つ点の座標(次の現在座標に相当)のX座標を変更する。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。
【0095】
このようにすると、点A’から点D’に向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe1が1の半分より大きい場合に、次の座標を変更するので、Y座標の変化する位置が滑らかにつながることになる。次いで、ステップS316で誤差補正を行い、e1=e1−1とする。これは、選択誤差が1/2以上になって次の座標を変更したので、1を減算することにより、再び次の現在座標から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS318に進む。
また、誤差増分Δe1を加えた結果e1がe1<(1/2)であれば、ステップS314、ステップS316をジャンプしてステップS318に進む。このときは、次に打つ点のX座標は元のままにする。また、この場合は選択誤差e1は補正しない。以上のステップS310〜ステップS316を実行することにより、Y方向のピクセル数がX方向のピクセル数より多い場合における該当するラインの貼り付け位置が決定される。
【0096】
一方、上記ステップS304でY方向のピクセル数がX方向のピクセル数より小さいときは図32のステップS328に進み、今度はX座標の方を変更する処理を行う。すなわち、ステップS328で座標決定用誤差増分Δe1を(Yピクセル数−1)/(Xピクセル数−1)に初期設定するとともに、ドット選択誤差増分Δe3を(転送元ドット数−1)/(転送先ドット数−1)に初期設定する。次いで、ステップS330で現在座標に描画されていなければ、現在ドット番号のドットを描画する。これにより、該当するラインの最初の点▲1▼がドットで描画される。次いで、ステップS332で現在座標のX座標を変更する。次いで、ステップS334で座標決定用誤差e1についての判別を以下のようにして行う。
【0097】
すなわち、選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(Y方向のピクセル数−1)/(X方向のピクセル数−1)である。なお、ここでは、座標決定用であるからeをe1とし、ΔeをΔe1として処理をする。そうすると、e1=e1+Δe1となる。この値が1/2より大きくなったか否かを判別する。そして、誤差増分Δe1を加えた結果e1がe1≧(1/2)であれば、ステップS336に進んで次に打つ点の座標(次の現在座標に相当)のY座標を変更する。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。
【0098】
このようにすると、点A’から点D’に向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe1が1の半分より大きい場合に、次の座標を変更するので、Y座標の変化する位置が滑らかにつながることになる。次いで、ステップS340で誤差補正を行い、e1=e1−1とする。これは、選択誤差が1/2以上になって次の座標を変更したので、1を減算することにより、再び次の現在座標から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS342に進む。
また、誤差増分Δe1を加えた結果e1がe1<(1/2)であれば、ステップS338、ステップS340をジャンプしてステップS342に進む。このときは、次に打つ点のX座標は元のままにする。また、この場合は選択誤差e1は補正しない。以上のステップS332〜ステップS340を実行することにより、Y方向のピクセル数がX方向のピクセル数より小さい場合における該当するラインの貼り付け位置が決定される。
【0099】
なお、上記処理は前述した図29に示すステップS210〜ステップS216と同様の処理内容であるが、図29のルーチンに比べてXとYが逆になっている部分がある。これは、X方向とY方向のピクセル数の多い方を基準として考えているからである。図29のルーチンではピクセル数の多いY座標を基準として考え、Y座標を1つずつ変えていったときに、X座標がどう変化するかを決定したのに対して、図31のルーチンではピクセル数の多いX座標を基準として考え、X座標を1つずつ変えていったときに、Y座標がどう変化するかを決定している。
他のラインの貼り付け位置についても、同様の方法で求める処理が行われる。
【0100】
以上で、各ラインの貼り付け位置が求まったので、次に、元となる水平ドットラインのドット内のうち、どのドットを割り当てる(つまり、ドットを選択する)かを求める処理内容を説明する。
まず、ドット選択の処理として示されるステップS318以降の処理で、転送先ラインのピクセル数が転送元ラインのピクセル数より少ないとき、つまりラインを縮小する方法を説明する。この方法は、ドット選択の処理であるステップS318〜ステップS326で示される。
転送元ラインの最初のドット(ドット0)を無条件に選択するものとすると、その他のドットの選択の方法は以下のようになる。すなわち、まずステップS318で選択誤差(初期値=0)eを決め、選択誤差eに誤差増分Δeを加える(e=e+Δe)。Δeは(転送元のドット数−1)/(転送先のドット数−1)である。なお、ここでは、ドット選択用であるからeをe3とし、ΔeをΔe3として処理をする。そうすると、e3=e3+Δe3となる。
【0101】
次いで、この値が1/2より大きくなったか否かをステップS320で判別する。そして、誤差増分Δe3を加えた結果e3がe3≧(1/2)であれば、ステップS322に進んで現在ドット番号(転送元ラインのドット番号)を[1]だけインクリメントする(つまり、次のドット番号に進める)。これは、選択誤差に誤差増分を加え、その結果が1/2より大きいか小さいかによって処理を選択するもので、選択誤差が1/2以上のときに誤差を補正する。転送元ラインのドット番号を1進めることにより、辺AD上で次に選択すべき転送元ラインのドット番号が割り当てられる。
【0102】
このようにすると、点Aから点Dに向ってX座標を1ずつ変えていったときに、少なくとも誤差増分Δe3が1の半分より大きい場合に、次のドット番号に変更するので、ドットの変化する位置が滑らかにつながることになる。次いで、ステップS324で誤差補正を行い、e3=e3−1とする。これは、選択誤差が1/2以上になって次のドット番号を変更したので、1を減算することにより、再び次の現在ドット番号から誤差増分Δeを加えて同様の判別を始めるためである。その後、ステップS344に戻ってステップS344〜ステップS348のループを繰り返す。そして、ステップS320でe3が1/2未満になると、ステップS350に分岐する。
【0103】
一方、ステップS320でe3が当初から1/2未満のときはステップS326にジャンプする。ステップS326ではすべてのドットについて処理したか否かを判別し、すべてのドットについて処理が終了していなければ、ステップS330に戻って同様の処理を繰り返す。したがって、誤差増分Δe3が1の半分より大きくなった時点ではステップS350へジャンプせず、ステップS346の方へ進むことになる。
このように、誤差増分Δe3を加えた結果(選択誤差)e3がe3<(1/2)であれば、転送先ラインの次のドットには1つ前のドットと同じデータが再び転送される。このとき、水平ドット番号と選択誤差e3の変更は行われない。
【0104】
ここで、ドット選択の具体例について図25を参照して説明する。
図25(a)は変形前の転送元ラインのドットの様子を示し、図25(b)は変形後の転送先ラインのドットの様子を示し、さらに図25(c)は転送ラインにおけるX方向およびY方向のピクセル数の変化を示している。この例は、転送先ラインのピクセル数が転送元ラインのピクセル数より多いとき、つまりラインを拡大する処理に相当するものである。
この例に対応させて考えると、転送元ラインのドット数は16個、転送先ラインのドット数は17個なので、転送先の17個のドットのうち1個は1つ前のドットと同じデータを転送することになる。転送元ラインの最初のドット(ドット0)を無条件に転送するものとすると、その他のドットの転送の処理は次のようにして行われる。
【0105】
まず、最初にドット0を転送する。この時点で、選択誤差eは[0]に初期設定され、ドット番号は0になっている。また、転送元ラインのドット数は16個、転送先ラインのドット数は17個であるから、誤差増分Δeは
Δe=(16−1)/(17−1)=0.93である。次いで、選択誤差eをe=0(初期設定値)とし、誤差増分ΔeとしてΔe=0.93を加えると、
e=0+0.93=0.93≧(1/2)となる。したがって、このときはドット番号を1進める(ドット1になる)。同時に、選択誤差eを以下のように補正する。
e=0.93−1=−0.07<(1/2)
この時点で選択誤差eが1/2より小さくなるので、点▲1▼にはドット1が転送される(図25(b)、図25(c)参照)。
【0106】
次いで、同様にここまでの選択誤差e=−0.07に誤差増分ΔeとしてΔe=0.93を加えると、
e=−0.07+0.93=0.86≧(1/2)になるので、ドット番号を1進める(ドット2になる)とともに、選択誤差eを以下のように補正する。
e=0.86−1=−0.14<(1/2)
この時点で選択誤差eが1/2より小さくなり、点▲2▼に表示すべきドットとして、ドット2が転送される(図25(b)、図25(c)参照)。
【0107】
以後、同様の処理を行うと、点▲3▼にはドット3が、点▲4▼にはドット4が、点▲5▼にはドット5が、点▲6▼にはドット6が、点▲7▼にはドット7がそれぞれ割り当てられる。ドット7を割り当てた時点で選択誤差eは−0.49になる。ここまでの選択誤差e=−0.49に誤差増分Δe=0.93を加えると、
e=−0.49+0.93=0.44<(1/2)になるので、今度はドット番号は7のままで、選択誤差eも変更しない。したがって、点▲8▼にはドット7が再び転送される(図25(b)、図25(c)参照)。
以上の処理を繰り返すことにより、転送先ラインの16個のドットから1個のドット(ドット7)が2回転送されて、転送先ラインの17個のドットが決定される。このようにして、転送先ラインのピクセル数が転送元ラインのピクセル数より多い場合に、ラインを拡大する処理が行われる。
【0108】
上述した各プログラムを実行することにより、変形前の画像データのラインを変形後の画像データとして貼り付ける処理が行われるが、このときラインの貼り付けは辺A’B’と辺D’C’のうち、長い方の辺が有するピクセル数分だけ行われる。例えば、図17の例では辺A’B’と辺D’C’の各ピクセル数を比較すると、辺A’B’のピクセル数が11、辺D’C’のピクセル数が14であるから、辺D’C’のピクセル数分(=14)だけ行われる。具体的には、図17(b)に示すように辺D’C’のピクセル数に対応して、ライン0、ライン0、ライン1、ライン2、ライン3、ライン3’、ライン4、ライン5、ライン6、ライン7、ライン8、ライン8’、ライン9、ライン10、ライン11の14回ラインの貼り付けるが行われる。そして、各ラインを貼り付けた最終的な状態は図26(b)のように示される。なお、図26(a)は変形前の画像データのラインである。
なお、図18(a)、(b)に示すように貼り付けた2つのラインが重なる部分が生じるが、本実施例では先に書かれたものを優先するようにしている。また、この他に、後に書かれたものを優先する方法、あるいは重なった部分では2つのドットデータの色コードを合成する毎に、その値を加えて1/2する等の処理方法もある。ドットデータの色コードを合成する場合には、例えばR(赤成分)、G(緑成分)、B(青成分)というように色コードを分ける。
【0109】
なお、ビット配列形式の画像データを有する変形対象を分割する形状は上記の2種類(例えば、小矩形、六角形)に限るものではなく、本発明の目的の範囲内が各種の変形が可能である。
さらに、本発明の適用はアニメーション、ゲーム等のキャラクター又は背景データ等に限るものではなく、他の分野、他の画像データにも適用できる。
【0110】
【発明の効果】
本発明によれば、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理(例えば、座標変換処理)に従って異なる小多角形にそれぞれ変形し、次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成しているので、以下の効果を得ることができる。
(1)変形対象の画像は各小多角形毎に変形処理が行われるので、従来のように全く異なる全体の画像データを予め持つ必要がなく、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形することができる。
(2)変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することができる。
(3)特に、変形対象を複数の小多角形に分割した後に、少なくとも一部の複数の小多角形に対して、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てるようにすれば、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【図面の簡単な説明】
【図1】本発明による多角形分割変形方法の原理を説明する図である。
【図2】本発明による小矩形単位の画像データの一例を示す図である。
【図3】本発明に係る画像変形装置の第1実施例の構成図である。
【図4】同実施例の小多角形データの一例を示す図である。
【図5】同実施例の変形対象を多数の小矩形に分割する例を示す図である。
【図6】同実施例のCPUの内部レジスタへのデータの格納例を示す図である。
【図7】同実施例の画像変形処理のメインプログラムを示すフローチャートである。
【図8】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図9】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図10】同実施例のライン貼り付け法を説明する図である。
【図11】同実施例の多角形分割変形方法の変形例を示す図である。
【図12】上記変形例の小矩形単位の画像データの一例を示す図である。
【図13】本発明の第2実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図14】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図15】同実施例の小多角形データの一例を示す図である。
【図16】上記各実施例のライン貼り付け処理のサブルーチンを示すフローチャートである。
【図17】上記各実施例の画像データの変形例を示す図である。
【図18】上記各実施例の画像データの変形例を示す図である。
【図19】上記各実施例の画像データの変形例を示す図である。
【図20】上記各実施例の画像データの変形例を示す図である。
【図21】上記各実施例の画像データの変形例を示す図である。
【図22】上記各実施例の画像データの変形例を示す図である。
【図23】上記各実施例の画像データの変形例を示す図である。
【図24】同実施例の画像データの変形例を示す図である。
【図25】上記各実施例の画像データの変形例を示す図である。
【図26】上記各実施例の画像データの変形例を示す図である。
【図27】上記各実施例のCPUの内部レジスタへのデータの格納例を示す図である。
【図28】上記各実施例のライン描画の一例を説明する図である。
【図29】上記各実施例のライン端点処理のサブルーチンの一部を示すフローチャートである。
【図30】上記各実施例のライン端点処理のサブルーチンの一部を示すフローチャートである。
【図31】上記各実施例のライン描画処理のサブルーチンの一部を示すフローチャートである。
【図32】上記各実施例のライン描画処理のサブルーチンの一部を示すフローチャートである。
【図33】上記各実施例の端点バッファへのデータの格納例を示す図である。
【符号の説明】
31 CPU(分割手段、変形手段、画像データ作成手段、座標変換手段、データ変換手段、画像変形制御手段)
32 入力操作子(変形態様指定手段)
33 記憶装置(記憶手段)
34 VDP
35 VRAM
36 TVディスプレイ(表示手段)
41 小多角形単位で割り当て可能な画像データ
42、43 変形後の格子点座標
44 小多角形データ
51 第1の変形スイッチ
52 第2の変形スイッチ

Claims (2)

  1. ビット配列形式の画像データを保有可能な変形対象を、複数の小多角形に分割し、
    複数に分割した各小多角形に対して、小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て
    画像データを割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、
    変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って、変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成するようにしたことを特徴とする画像変形方法。
  2. ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割する分割手段と、
    分割手段によって分割された小多角形に対して、小多角形単位のビット配列形式の画像データを1つずつ割り当てるとともに、所定の複数の小多角形に対しては、同一の1つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てる画像データ割り当て手段と、
    分割手段によって分割した各小多角形を所定の変形処理手順に従って異なる小多角形に変形する変形手段と、
    変形前の小多角形に含まれるビット配列形式の画像データを、各小多角形毎に、所定のデータ変換手順に従って、変形後の小多角形に対応するように順次変形して変形後の全体画像データを作成する画像データ作成手段と、
    を備えたことを特徴とする画像変形装置。
JP34752693A 1993-12-24 1993-12-24 画像変形方法およびその装置 Expired - Fee Related JP3548806B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP34752693A JP3548806B2 (ja) 1993-12-24 1993-12-24 画像変形方法およびその装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP34752693A JP3548806B2 (ja) 1993-12-24 1993-12-24 画像変形方法およびその装置

Publications (2)

Publication Number Publication Date
JPH07182501A JPH07182501A (ja) 1995-07-21
JP3548806B2 true JP3548806B2 (ja) 2004-07-28

Family

ID=18390827

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34752693A Expired - Fee Related JP3548806B2 (ja) 1993-12-24 1993-12-24 画像変形方法およびその装置

Country Status (1)

Country Link
JP (1) JP3548806B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10045012B2 (en) 2014-07-31 2018-08-07 Samsung Electronics Co., Ltd. Display apparatus and method of controlling screen thereof

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114638911A (zh) * 2022-02-18 2022-06-17 广州镭晨智能装备科技有限公司 一种多边形拆分的方法、自动光学检测设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10045012B2 (en) 2014-07-31 2018-08-07 Samsung Electronics Co., Ltd. Display apparatus and method of controlling screen thereof

Also Published As

Publication number Publication date
JPH07182501A (ja) 1995-07-21

Similar Documents

Publication Publication Date Title
US5586234A (en) Parallel processing three-dimensional drawing apparatus for simultaneously mapping a plurality of texture patterns
JP4725741B2 (ja) 描画装置及び描画方法
JPS6158083A (ja) 高速メモリ−・システム、デ−タ処理方法及びメモリ−・セグメント
GB2285377A (en) Method for generating a subpixel mask for anti-aliasing in a computer graphics system and apparatus thereof
JPH05307610A (ja) テクスチャマッピング方法およびその装置
JPH02171877A (ja) 画像シェーディング方法及び記憶装置ローディング方法
JP4154336B2 (ja) ラスター画像のフレームを描画する方法及び装置
US4951230A (en) Method and apparatus for tiling an image
US20050168475A1 (en) Image processing method and apparatus
US5579461A (en) Method and apparatus for filling polygons
JP3548806B2 (ja) 画像変形方法およびその装置
JP3979162B2 (ja) 画像処理装置およびその方法
JP2002157604A (ja) テクスチャ描画方法、エンタテインメント装置および記録媒体
JPH07182497A (ja) 画像変形方法およびその装置
JP3463125B2 (ja) 画像変形方法およびその装置
JP3548867B2 (ja) 画像変形方法およびその装置
JPH06223199A (ja) 画像合成装置
JPH07200800A (ja) 画像変形方法およびその装置
JP2782904B2 (ja) 多角形塗りつぶし方式
JPH07192122A (ja) 画像変形方法およびその装置
JP2656753B2 (ja) 画像データ処理装置及びそれを用いたシステム
JPH10261095A (ja) 画像処理装置及び画像処理方法
JPH0350686A (ja) 図形処理方式
JP4411939B2 (ja) 演算装置および画像処理装置
WO1993013490A1 (en) Method for drawing figure in graphic display system

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20031218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040216

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040316

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040329

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees