(57)【特許請求の範囲】
【請求項１】
ビット配列形式の画像データを保有可能な変形対象を、複数の小多角形に分割し、
複数に分割した各小多角形に対して、小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、
画像データを割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、
変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って、変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成するようにしたことを特徴とする画像変形方法。
【請求項２】
ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割する分割手段と、
分割手段によって分割された小多角形に対して、小多角形単位のビット配列形式の画像データを１つずつ割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てる画像データ割り当て手段と、
分割手段によって分割した各小多角形を所定の変形処理手順に従って異なる小多角形に変形する変形手段と、
変形前の小多角形に含まれるビット配列形式の画像データを、各小多角形毎に、所定のデータ変換手順に従って、変形後の小多角形に対応するように順次変形して変形後の全体画像データを作成する画像データ作成手段と、
を備えたことを特徴とする画像変形装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、画像変形方法およびその装置に係わり、詳しくはアニメーション、ゲーム等で用いられるキャラクター、背景データを始めとするドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようないわゆるビット配列形式の画像データの配列を変形する画像変形方法およびその方法を実現する装置に関する。
【０００２】
【従来の技術】
従来、アニメーション、ゲーム等ではビット配列形式の画像データを用いることが多く、この画像データによりキャラクターや背景データを表示している。そして、このビット配列形式の画像データはドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようになっている。
【０００３】
【発明が解決しようとする課題】
ところで、従来の画像変形方法において、アニメーション、ゲーム等でキャラクター又は背景に動きを与えたり、その形を変えるときには、全く異なる画像データを予めメモリに持っておき、例えば動きを与えるときには一定時間毎に、あるいはその形を変えるときには何かのきっかけでメモリ上にある画像データそのものを表示し直していた。そのため、多くのメモリを消費するという欠点があった。
また、画像データの拡大、縮小処理あるいはある形状の四角形から異なる形状の四角形への変形（例えば、正方形から台形への変形）等の単純な変形処理は、従来のゲーム中にも多く用いられているが、変形の度合いが限られ、滑らかな変形が困難であった。さらに、変形を使用する範囲が限定されてしまい（自由に変形できない）、予めメモリに多くのデータを持っておく方法を採らざるを得ず、この点でコスト高にもなっていた。
【０００４】
そこで本発明は、少ないメモリ容量で、ビット配列形式の画像を自由にかつ滑らかに変形できる画像変形方法およびその装置を提供することを目的としている。
【０００５】
【課題を解決するための手段】
上記目的達成のため、請求項１記載の発明による画像変形方法は、ビット配列形式の画像データを保有可能な変形対象を、複数の小多角形に分割し、複数に分割した各小多角形に対して、小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、画像データを割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って、変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成するようにしたことを特徴とする。
【０００６】
請求項２記載の発明による画像変形装置は、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割する分割手段と、分割手段によって分割された小多角形に対して、小多角形単位のビット配列形式の画像データを１つずつ割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てる画像データ割り当て手段と、分割手段によって分割した各小多角形を所定の変形処理手順に従って異なる小多角形に変形する変形手段と、変形前の小多角形に含まれるビット配列形式の画像データを、各小多角形毎に、所定のデータ変換手順に従って、変形後の小多角形に対応するように順次変形して変形後の全体画像データを作成する画像データ作成手段と、を備えたことを特徴とする。
【００１５】
【作用】
本発明では、まずビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当て割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理（例えば、座標変換処理）に従って異なる小多角形にそれぞれ変形する。次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データが作成される。したがって、変形対象の画像は各小多角形毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなくなり、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形できる。また、変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形できる。特に、複数に分割した後の小多角形単位で、ビット配列形式の画像データを割り当てるようにしているので、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【００１６】
また、変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の１つのビット配列形式の画像データが左右反転あるいは上下反転して割り当られる。したがって、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、全く同様の効果を得ることができる。
【００１７】
【実施例】
以下、図面を参照して本発明の実施例について説明する。
本発明の原理説明
最初に、本発明の原理から説明する。図１は多角形分割変形方法の原理を示す図である。図１（ａ）は変形前の画像データを示し、特にビット配列形式の画像データで、「口」（特に、唇）の画像（絵）Ａを有している。この画像データを変形するために、変形対象全体を予め縦４分割、横６分割して合計で２４個の小矩形(1)、(2)、(3)、・・・・・(24)を作成する。分割する多角形は四角形である。分割される各小矩形(1)、(2)、(3)、・・・・・(24)は、小矩形単位でビット配列形式の画像データが割り当られている。割り当られる画像データの一例は、図２のように示される。なお、画像データは、複数のドットによって構成され、かつ複数の各ドット毎に表示色番号あるいはパレット番号を持っている。
【００１８】
図２に示す画像データは予め用意されており、例えば画像データａはデータの無い状態（透明状態）、画像データｂは口の上側の一部、・・・・・・・・、画像データｋは口の下側の一部というように、ａ〜ｋの画像データによって口の画像が複数のパートに分けられている。この場合、小矩形(1)は同一色で構成されているため、画像データは割り当てられておらず（つまり透明の状態）、小矩形(2)には画像データｂが割り当てられている。同様に、小矩形(3)には画像データｃが割り当てられ、小矩形(4)には画像データｃを左右反転したものが割り当てられ、小矩形(5)には画像データｂを左右反転したものが割り当てられ、小矩形(5)には画像データｂをが割り当てられが割り当てられる。
このように、１つの画像を構成する全体のデータを分割して複数の小矩形(1)、(2)、(3)、・・・・・(24)にそれぞれ割り当て、さらに小矩形単位の画像データは左右反転あるいは上下反転して割り当てることもできる。そして、同一色で構成される小矩形を除くすべての小矩形に対して、小矩形単位の画像データを割り当てると、図１（ａ）に示すような「口」の画像（絵）Ａとなり、これは各小矩形(1)、(2)、(3)、・・・・・(24)毎の画像データ全体によって表示される。
【００１９】
次いで、変形対象全体が滑らかに変形されるように、所定の変形処理（例えば、後述の座標変換処理）に従って各小矩形(1)、(2)、(3)、・・・・・(24)を図１（ｂ）に示すような異なる四角形(1)’、(2)’、(3)’、・・・・・(24)’にそれぞれ変形する。例えば、小矩形(1)は四角形(1)’に変形され、小矩形(2)は四角形(2)’に変形される。
この過程では、各小矩形(1)、(2)、(3)、・・・・・(24)の変形に伴って、それぞれの小矩形に割り当てられたビット配列形式の画像データの配列が所定のデータ変換処理（例えば、後述のいわゆるライン貼り付け処理）に従って変形する。すなわち、ドットの配列が変形の程度に応じて変わることになる。また、このとき画像データが割り当てられていない小矩形(1)、(6)、(9)、(10)等は、変形後の四角形が指定された色で塗りつぶされる。したがって、変形後の四角形(1)’、(2)’、(3)’、・・・・・(24)’を全体として合成すると、図１（ｂ）に示すように、変形した「口」の画像（絵）Ｂが得られる。
【００２０】
この場合、変形対象の画像データの配列に対して各小矩形(1)、(2)、(3)、・・・・・(24)毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなく、少ないメモリ容量でビット配列形式の画像を自由に変形できる。
また、変形対象を複数の小矩形(1)、(2)、(3)、・・・・・(24)に分割し、各小矩形(1)、(2)、(3)、・・・・・(24)毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することが可能になる。
特に、複数に分割した後の小矩形単位で、ビット配列形式の画像データが割り当てられるので、異なる小矩形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
さらに、小矩形が同一色で構成されている場合には、一部の小矩形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【００２１】
次に、上記原理に基づく本発明の具体的な実施例について説明する。
画像変形装置の構成
図３は本発明に係る画像変形方法を実現する画像変形装置の一実施例を示す構成図である。図３において、画像変形装置は大きく分けてＣＰＵ３１、入力操作子３２、記憶装置３３、画像信号発生回路（Video Display Prosseser：以下ＶＤＰという）３４、ＶＲＡＭ３５およびＴＶディスプレイ３６によって構成される。
ＣＰＵ３１は装置全体を制御するもので、入力操作子３２から画像変形指令が入力されると、その指令情報に対応すべく内部のメモリに格納されている制御プログラムに基づいて記憶装置３３に記憶されているビット配列形式の画像データを保有可能な変形対象（ここでは図示略）を読み出して複数の小多角形に分割するとともに、複数に分割した各小多角形に対して記憶装置３３に記憶されている小多角形単位で割り当て可能なビット配列形式の画像データ４１を読み出して割り当て、画像データ４１を割り当てた各小多角形を所定の変形処理に従って異なる小多角形に変形し、変形後のビット配列形式の画像データを合成してＶＤＰ３４に出力する。また、ＣＰＵ３１は内部レジスタ３１ａを有しており、内部レジスタ３１ａには後述の図６に示すような各小矩形の格子点座標や図２０に示すような端点バッファデータが格納されるようになっている。
【００２２】
入力操作子（変形態様指定手段）３２はオペレータによって操作されるもので、ビット配列形式の画像データの配列をどのように変形させるかを指定する（つまり、変形を行わせるきっかけを与えるための）第１の変形スイッチ５１および第２の変形スイッチ５２を有している。第１の変形スイッチ５１は、例えば変形前の格子点座標で表される原画像に対して、変形後の格子点座標４２で表される第１の変形画像のような変形（変形データ１）を与える指令を出力する。第２の変形スイッチ５２は、例えば変形前の格子点座標で表される原画像に対して、変形後の格子点座標４３で表される第２の変形画像のような変形（変形データ２）を与える指令を出力する。なお、各変形スイッチ５１、５２は単独操作のプッシュスイッチでもよいし、あるいは複数のスイッチからなるスイッチボード、キーボード等でもよい。また、入力操作子３２としてスイッチボード等の他に、マウス、トラックボール等を用いてもよい。
【００２３】
記憶装置（記憶手段）３３は変形対象となるビット配列形式の画像データを保有可能な変形対象（原画像）をどのように矩形分割するかを示す変形前の格子点座標（変形前の小多角形の頂点の座標）、矩形分割された各小矩形をどのように変形するかを示す変形データ１に対応する変形後の格子点座標（変形後の異なる小多角形の頂点の座標）４２および矩形分割された各小矩形をどのように変形するかを示す変形データ２に対応する変形後の格子点座標（変形後の異なる小多角形の頂点の座標）４３を記憶している。例えば、格子点座標４２は第１の変形画像に対応し、格子点座標４３は第２の変形画像に対応しているとともに、これらの変形画像を処理する指令はそれぞれ第１の変形スイッチ５１、第２の変形スイッチ５２から出力される。
【００２４】
また、記憶装置３３は各小多角形にどのように画像データを割り当てるかを示す小多角形データ４４を記憶している。小多角形データ４４の詳しい内容は後述の図４に示す。
ＶＤＰ３４はＣＰＵ３１から与えられた変形前のビット配列形式の画像データや変形後のビット配列形式の画像データをＶＲＡＭ３４に書き込む。ＶＲＡＭ３４としては、例えば半導体メモリが用いられ、表示する画像を１画面単位で記憶する。ＶＲＡＭ３４に書き込まれた画像データはＴＶディスプレイ（表示手段）３６によって表示される。
上記ＣＰＵ３１は分割手段、変形手段、画像データ作成手段、座標変換手段、データ変換手段を構成するとともに、さらに画像変形制御手段を構成する。
【００２５】
図４は各小多角形（ここでは小矩形、以下同様）に対してどのように画像データを割り当てるかを示す小多角形データ４４の内容を表している。図４において、小多角形データ４４としては、各小多角形毎に小多角形が同一色で構成されているか否かを示す一色塗りフラグ、一色塗りフラグ＝０のときにどのビット配列形式画像データを用いるかを示す画像データ番号、一色塗りフラグが＝１のときにどの色で塗りつぶすかを示す色番号、画像データを反転して用いるかどうかを示す左右反転フラグおよび上下反転フラグがある。
複数の小矩形は（０、０）、（０、１）、（０、２）・・・（３、５）というデータで区分され、これらの小矩形（０、０）、（０、１）・・・（３、５）に対して個別に一色塗りフラグ、画像データ番号、色番号、左右反転フラグ、上下反転フラグが割り当てられる。画像データ番号は図２に示した画像データを割り当てるもので、例えば、小矩形は（０、０）に対しては透明色（画像データａ）が割り当てられ、小矩形は（０、１）に対しては画像データｂが割り当てられている。
なお、一色塗りフラグ＝１のときに一色塗りが行われ、一色塗りフラグ＝０のときには通常の変形処理が行われるようになっている。また、左右反転フラグおよび上下反転フラグは、それぞれ［１］のときに画像データの反転が行われる。
【００２６】
ここで、本実施例では変形前のビット配列形式の画像データを有する変形対象に対して図５に示すように、多数の小矩形に分割する処理が施される。この場合、矩形分割された各小矩形の頂点に当る部分を格子点と呼ぶことにする。図５の例では、変形対象を縦方向にｍ分割し、横方向にｎ分割している。したがって、変形対象は（ｍ×ｎ）個の小矩形に分割されることになり、各小矩形は左上端から右下端に行くに従って、小矩形（０、０）、小矩形（０、１）、小矩形（０、２）、・・・・・・・小矩形（ｍ−１、ｎ−１）としてそれぞれ表される。
また、変形対象の画像データの左上端の格子点を格子点（０、０）、その右隣の格子点を格子点（０、１）と呼び、以下同様に右に行くに従って格子点（０、２）、格子点（０、３）、と呼ぶことにする。したがって、右上端の格子点は格子点（０、ｎ）になる。次いで、格子点（０、０）のすぐ下の格子点を格子点（１、０）と呼び、以下同様に下に行くに従って格子点（２、０）、格子点（３、０）と呼ぶことにする。したがって、左下端の格子点は格子点（ｍ、０）になる。また、右下端の格子点は格子点（ｍ、ｎ）になる。
【００２７】
ＣＰＵ３１の内部レジスタ３１ａには図５に示す各小矩形の格子点座標が記憶され、その様子は図６のように示される。図６において、内部レジスタ３１ａには各小矩形（０、０）、小矩形（０、１）、小矩形（０、２）、・・・・・・・小矩形（ｍ−１、ｎ−１）に対応する格子点の座標が以下のように格納されている。なお、各格子点の座標はＸ軸（横方向）およびＹ軸（縦方向）を基準とする２つの数値で表される。
格子点（０、０）のＸ座標
格子点（０、０）のＹ座標
格子点（０、１）のＸ座標
格子点（０、１）のＹ座標
・
・
格子点（ｍ、ｎ）のＸ座標
格子点（ｍ、ｎ）のＹ座標
【００２８】
一方、記憶装置３３には前述したように第１の変形スイッチ５１からの指令に対応して第１の変形画像を矩形分割する場合の格子点座標４２および第２の変形スイッチ５２からの指令に対応して第２の変形画像を矩形分割する場合の格子点座標４３が記憶されている。例えば、第１の変形スイッチ５１が操作されると、このスイッチ５１によって選択された変形番号に相当する変形後の格子点座標がＣＰＵ３１の内部レジスタ３１ａに格納され、第２の変形スイッチ５２が操作されると、このスイッチ５２によって選択された変形番号に相当する変形後の格子点座標がＣＰＵ３１の内部レジスタ３１ａに格納される。
これらの格子点座標４２、４３をＣＰＵ３１の内部レジスタ３１ａに記憶されている各小矩形（０、０）、小矩形（０、１）、小矩形（０、２）、・・・・・・・小矩形（ｍ−１、ｎ−１）の格子点座標にそれぞれ対応させて示すと、図６のように表される。
【００２９】
例えば、第１の変形画像を矩形分割する場合の格子点座標４２と各小矩形の格子点座標とは以下のような対応関係になる。
格子点（０、０）のＸ座標……９０（変形１の格子点座標、以下同様）
格子点（０、０）のＹ座標……９０
格子点（０、１）のＸ座標……１０５
格子点（０、１）のＹ座標……９５
・
・
格子点（ｍ、ｎ）のＸ座標……１４０
格子点（ｍ、ｎ）のＹ座標……１３０
なお、変形１とは、第１の変形スイッチ５１からの指令に対応する第１の画像変形処理のことであり、変形２とは、第２の変形スイッチ５２からの指令に対応する第２の画像変形処理のことである。したがって、変形１の格子点座標とは、第１の変形スイッチ５１からの指令に対応する第１の変形画像を矩形分割した場合の格子点座標のことである。同様に、変形２の格子点座標とは、第２の変形スイッチ５２からの指令に対応する第２の変形画像を矩形分割した場合の格子点座標のことである。
【００３０】
次に、作用を説明する。
メインプログラム
図７は画像変形処理のメインプログラムを示すフローチャートである。このプログラムがスタートすると、まずステップＳ１０でキー情報取り込み処理を行う。これは、入力操作子３２における第１の変形スイッチ５１あるいは第２の変形スイッチ５２の操作情報を入力するものである。次いで、ステップＳ１２で変形スイッチが押されたか否かを判別し、何れのスイッチも押されていなければ、今回のルーチンを終了し、次回のルーチンで再びステップＳ１０を実行する。このとき、例えばスイッチフラグが設けられ、何れのスイッチも押されていなければ、スイッチフラグが［０］のままである。一方、何れかのスイッチが押されると、スイッチフラグを［１］にセットするとともに、ステップＳ１４で押された変形スイッチの番号を判別する。その後、ステップＳ１６あるいはステップＳ１８で押された変形スイッチの番号に応じた変形後の格子点座標をＣＰＵ３１の内部レジスタ３１ａに格納し、次いで、ステップＳ２０に進む。
【００３１】
具体的には、第１の変形スイッチ５１が押された場合には、ステップＳ１６に進んで記憶装置３３内の第１の変形画像を矩形分割した場合の格子点座標（つまり、変形データ１に対応する変形後の格子点座標）４２をコピーしてＣＰＵ３１の内部レジスタ３１ａに格子点毎に格納する。したがって、例えば第１の変形スイッチ５１が押されると、以下に示すように格子点座標４２の値が内部レジスタ３１ａに順次格納されることになる。
格子点（０、０）のＸ座標……９０（変形１の格子点座標、以下同様）
格子点（０、０）のＹ座標……９０
格子点（０、１）のＸ座標……１０５
格子点（０、１）のＹ座標……９５
・
・
格子点（ｍ、ｎ）のＸ座標……１４０
格子点（ｍ、ｎ）のＹ座標……１３０
【００３２】
一方、第２の変形スイッチ５２が押された場合には、ステップＳ１８に進んで記憶装置３３内の第２の変形画像を矩形分割した場合の格子点座標（つまり、変形データ２に対応する変形後の格子点座標）４３をコピーしてＣＰＵ３１の内部レジスタ３１ａに格子点毎に格納する。したがって、例えば第２の変形スイッチ５２が押されると、以下に示すように格子点座標４３の値が内部レジスタ３１ａに順次格納されることになる。
格子点（０、０）のＸ座標……９０（変形２の格子点座標、以下同様）
格子点（０、０）のＹ座標……１００
格子点（０、１）のＸ座標……１０５
格子点（０、１）のＹ座標……１００
・
・
格子点（ｍ、ｎ）のＸ座標……１７０
格子点（ｍ、ｎ）のＹ座標……１４０
【００３３】
ステップＳ１６あるいはステップＳ１８を経ると、続くステップＳ２０に進み、記憶装置３３から変形対象となる画像データの中から、処理すべき小矩形（ｉ、ｊ）に含まれる画像データを読み込んで小矩形の変形処理を行う（詳細はサブルーチンで後述）。これにより、小矩形（ｉ、ｊ）についてビット配列形式の画像データの配列が変形し、変形後の画像が得られることになる。小矩形（ｉ、ｊ）とは、例えば図１（ａ）に示すように変形対象を複数に分割した場合の小矩形(1)、(2)、(3)、・・・・・(24)の何れかを表す一般的な指定状態を示すものである。なお、ステップＳ２０の処理では、小矩形（ｉ、ｊ）で示される変形後の画像データをＶＤＰ３４に順次転送することが行われ、これにより、最終的にすべての小矩形（ｉ、ｊ）に対応する変形した画像データが合成されて変形画像が得られることになる。
次いで、ステップＳ２２ですべての小矩形（ｉ、ｊ）に対して画像の変形処理をしたか否かを判別し、ＮＯであればステップＳ２０に戻って同様の処理を繰り返す。そして、すべての小矩形（ｉ、ｊ）に対して画像の変形処理が終了すると、ステップＳ２２からＹＥＳに抜けて本ルーチンを終了する。このようにして、ステップＳ２０およびステップＳ２２において各小矩形単位で画像の変形処理が行われる。
【００３４】
小矩形変形処理のサブルーチン
次に、図８はメインプログラムの小矩形変形処理（ステップＳ２０）のサブルーチンを示すフローチャートである。このサブルーチンに移行すると、ステップＳ１００で小多角形データ４４の一色塗りフラグが［１］であるか否かを判別する。一色塗りフラグは各小多角形毎に小多角形が同一色で構成されているか否かを示すものであるから、小多角形が同一色で構成されていない場合（一色塗りフラグ＝０のとき）はステップＳ１０２に進む。一方、小多角形が同一色で構成されている場合（一色塗りフラグ＝１のとき）はステップＳ１２０に進む（詳細は後述の一色塗り処理参照）。
【００３５】
Ａ．小多角形が同一色で構成されていない場合（通常の変形処理）
ステップＳ１０２〜ステップＳ１１２で変形前の矩形を選択する処理を行う。まず、ステップＳ１０２で小多角形データ４４より処理すべき小矩形（ｉ、ｊ）に使う画像データ番号を読み取る。例えば、小矩形は（０、０）に対しては透明色（画像データａ）を使い、小矩形は（０、１）に対しては画像データｂを使うというような画像データ番号を読み取る。このようにして、すべての小矩形（ｉ、ｊ）について図４に示す小多角形データ４４の画像データ番号が読み取られる。次いで、ステップＳ１０４で読み取った画像データ番号に相当する小多角形単位のビット配列形式の画像データを得る。すなわち、読み出した画像データ番号に対応する小多角形単位のビット配列形式の画像データ（図２に示すもの）を記憶装置３３から読み出す。これにより、画像データ番号に対して実際の画像データａ、画像データｂ等が読み出され、すべての小矩形（ｉ、ｊ）について画像データが割り当てられる。
【００３６】
次いで、ステップＳ１０６で小多角形データ４４の左右反転フラグが［１］であるか否かを判別する。左右反転フラグは各小多角形毎に画像データを左右反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合（左右反転フラグ＝１のとき）にはステップＳ１０８に進んで小多角形単位の画像データ左右反転する。これにより、例えば小矩形（０、２）に画像データｃを割り当てたとき、小矩形（０、３）については左右反転フラグ＝１であるから、画像データｃが左右反転して割り当てられ、結局、図１に示すような口の画像に対応したものとなる。ステップＳ１０８を経ると、ステップＳ１１０に進む。一方、ステップＳ１０６で小多角形データ４４の左右反転フラグが［０］であれば、ステップＳ１０８をジャンプしてステップＳ１１０に進む。したがって、このときは画像データの左右反転は行われず、読み出した画像データがそのまま小矩形（ｉ、ｊ）に割り当てられる。
【００３７】
ステップＳ１１０では小多角形データ４４の上下反転フラグが［１］であるか否かを判別する。上下反転フラグは各小多角形毎に画像データを上下反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合（上下反転フラグ＝１のとき）にはステップＳ１１２に進んで小多角形単位の画像データ上下反転する。ステップＳ１１２を経ると、図９のステップＳ１１４に進む。一方、ステップＳ１１０で小多角形データ４４の上下反転フラグが［０］であれば、ステップＳ１１２をジャンプしてステップＳ１１４に進む。したがって、このときは画像データの上下反転は行われず、読み出した画像データがそのまま小矩形（ｉ、ｊ）に割り当てられる。このようにして、変形前の矩形を選択する処理が行われたので、次いで、変形後の四角形の座標を算出する処理に移る。
【００３８】
図９のステップＳ１１４で小矩形（ｉ、ｊ）の周囲４点の変形後の座標を、ＣＰＵ３１における内部レジスタ３１ａの格子点座標より得る処理を行う。言換えれば、ＣＰＵ３１の内部レジスタ３１ａに格納されている変形後の格子点座標から、処理すべき小矩形の頂点に当る４つの座標を読み出す。例えば、小矩形（ｉ、ｊ）の場合、その４つの頂点は格子点（ｉ、ｊ）、（ｉ、ｊ＋１）、格子点（ｉ＋１、ｊ）、格子点（ｉ＋１、ｊ＋１）となり、これらが変形後の四角形の座標である。そして、読み出した小矩形（ｉ、ｊ）の周囲４点の変形後の座標に基づいて変形対象の画像全体が滑らかに変形されるように、小矩形（ｉ、ｊ）を異なる四角形にそれぞれ変形する処理を行う。この処理（変形処理に相当）は座標変換処理であり、結局、この座標変換処理では前述したように分割された各小矩形の頂点の座標を求め、次いで、変形対象全体が滑らかに変形されるような変形後の各小四角形の頂点の座標を算出し、この算出した座標に基づいて変形後の異なる小四角形の形状を決定することにより、分割された各小矩形を異なる小四角形に変形することが行われる。
【００３９】
次いで、ステップＳ１１６でいわゆるライン貼り付け法（データ変換処理に相当）により各小矩形内の画像データの配列を変形する処理を行う。ライン貼り付け法とは、変形元である分割した各小多角形のビット配列形式の画像データの配列を複数のラインに分割し、分割した各ラインを変形先の各多角形の対応する位置に順次転送するとともに、転送に際して転送先の大きさに合うように拡大又は縮小させながらそれぞれラインとして貼り付けていくことにより、変形後の各小多角形の画像データの配列を作成することをいう。
具体的には、図１０（ａ）に示すように変形元となるビット配列形式の画像データにおける小矩形Ｃの画像データの配列を複数のライン１〜ラインｎに分割し、分割した各ライン１〜ｎを図１０（ｂ）に示す変形先の四角形Ｄの対応する位置に、転送先の大きさに合うように拡大又は縮小させながらそれぞれライン１’〜ラインｎ’として貼り付けていくものである。このように、小矩形Ｃの画像データの配列を複数のライン１〜ラインｎに分けて変形させながら貼り付けることで、画像の変形処理を行うことにより、元画像を滑らかに変形させることが可能になる。なお、ライン貼り付け法の詳しい処理方法は、サブルーチンで後述する。
【００４０】
これにより、各小矩形は四角形へと変形処理され、最終的にすべての小矩形（ｉ、ｊ）に対応する画像データの配列が変形し、変形画像が得られることになる。
次いで、ステップＳ１１８でＶＤＰ３４に変形済みの画像データを逐次転送する。これにより、小矩形（ｉ、ｊ）で示される変形後の画像データがＶＤＰ３４に転送され、最終的にすべての小矩形（ｉ、ｊ）に対応する変形した画像データを合成することにより、ＴＶディスプレイ３６に変形後の画像が表示される。ステップＳ１１８の処理を経ると、メインプログラムにリターンする。
【００４１】
Ｂ．小多角形が同一色で構成されている場合（一色塗り処理）
この場合はステップＳ１００からステップＳ１２０に分岐し、ステップＳ１２０で小多角形データ４４より処理すべき小矩形（ｉ、ｊ）を塗りつぶす色番号をを読み取る。例えば、小矩形（１、２）は一色塗りフラグ＝１であるから、図４に示す赤という色番号を読み取る。同様に、小矩形（１、３）も一色塗りフラグ＝１であり、赤という色番号を読み取る。次いで、図９のステップＳ１２２に進み、ステップＳ１１４の処理と同様に小矩形（ｉ、ｊ）の周囲４点の変形後の座標を、ＣＰＵ３１における内部レジスタ３１ａの格子点座標より得る処理を行う。これにより、小矩形（ｉ、ｊ）が四角形に変形される。次いで、ステップＳ１２４で変形後の四角形に対して小多角形単位の画像データを読み取った色番号に対応する色で塗りつぶす。これにより、例えば前述した小矩形（１、２）および（１、３）は共に赤の色て塗られることになる。ステップＳ１２４の処理を終了すると、ステップＳ１１８に進む。
【００４２】
以上のルーチンを実行することにより、例えば図１（ａ）に示すような「口」の画像に対して適用した場合には、同図（ｂ）に示すよう、各小矩形(1)、(2)、(3)、・・・・・(24)が小矩形単位で変形し、その変形に伴って各小矩形に割り当てられた画像データが変形する。したがって、ドットの配列が変形の程度に応じて変わることになり、また、このとき画像データが割り当てられていない小矩形(1)、(6)、(9)、(10)等は、変形後の四角形が指定された色で塗りつぶされる。その結果、変形後の四角形(1)’、(2)’、(3)’、・・・・・(24)’を全体として合成すると、図１（ｂ）に示すように、変形した「口」の画像（絵）Ｂを作成することができる。
【００４３】
変形例
なお、上記実施例ではビット配列形式の画像データを有する変形対象を小矩形に分割し、任意な四角形に変形しているが、これに限らず、本発明は任意の多角形に適用することが可能である。例えば、図１１（ａ）に示すように、ビット配列形式で「口」の画像（絵）Ｅを構成する画像データを有する変形対象を複数の小六角形に分割し、各六角形を例えば上記実施例と同様の変形処理に従って異なる小六角形にそれぞれ変形することにより、図１１（ｂ）に示すような変形後の画像（「口」の画像（絵）Ｆを表す）を作成するようにしてもよい。
具体的に説明すると、図１１（ａ）は変形前の画像データを示し、特にビット配列形式の画像データで、「口」の画像（絵）Ｅを有している。この画像データを変形するために、変形対象全体を予め分割して合計で２２個の正六角形（以下、単に六角形という）(1)、(2)、(3)、・・・・・(22)を作成する。すなわち、分割する多角形は六角形である。分割された各六角形(1)、(2)、(3)、・・・・・(22)には、六角形単位でビット配列形式の画像データが割り当られている。割り当られる画像データの一例は、図１２のように示される。なお、画像データは、複数のドットによって構成され、かつ複数の各ドット毎に表示色番号あるいはパレット番号を持っている。
【００４４】
図１２に示す画像データは予め用意されており、何れも六角形の形状をしている。例えば、六角形の画像データａはデータの無い状態（透明状態）、画像データｂは口の上側の一部、・・・・・・・・、画像データｉは口の下側の一部というように、ａ〜ｉの画像データによって口の画像が複数のパートに分けられている。この場合、六角形(1)、(2)は共に同一色で構成されているため、画像データは割り当てられておらず（つまり透明の状態）、六角形(3)には画像データｂが割り当てられている。同様に、六角形(4)には画像データｃを左右反転したものが割り当てられる。
このように、１つの画像を構成する全体のデータを分割して複数の六角形(1)、(2)、(3)、・・・・・(22)にそれぞれ割り当て、さらに六角形単位の画像データは左右反転あるいは上下反転して割り当てることもできる。そして、同一色で構成される六角形を除くすべての六角形に対して、六角形単位の画像データを割り当てると、図１１（ａ）に示すような「口」の画像（絵）Ｅとなり、これは各六角形(1)、(2)、(3)、・・・・・(242毎の画像データ全体によって表示される
。
【００４５】
次いで、変形対象全体が滑らかに変形されるように、所定の変形処理（例えば、前述の座標変換処理）に従って各六角形(1)、(2)、(3)、・・・・・(22)を図１０（ｂ）に示すような異なる六角形(1)’、(2)’、(3)’、・・・・・(22)’にそれぞれ変形する。例えば、六角形(1)は六角形(1)’に変形され、六角形(2)は六角形(2)’に変形される。
この過程では、各六角形(1)、(2)、(3)、・・・・・(22)の変形に伴って、それぞれの六角形に割り当てられたビット配列形式の画像データの配列が所定のデータ変換処理（例えば、いわゆるライン貼り付け処理）に従って変形する。すなわち、ドットの配列が変形の程度に応じて変わることになる。また、このとき画像データが割り当てられていない六角形(1)、(2)、(5)、(6)、(9)等は、変形後の六角形が指定された色で塗りつぶされる。したがって、変形後の六角形(1)’、(2)’、(3)’、・・・・・(22)’を全体として合成すると、図１０（ｂ）に示すように、変形した「口」の画像（絵）Ｆが得られる。
【００４６】
この場合、変形対象の画像データの配列に対して各六角形(1)、(2)、(3)、・・・・・(22)毎に変形処理が行われるから、同様に少ないメモリ容量でビット配列形式の画像を自由に変形できる。また、変形対象を複数の六角形(1)、(2)、(3)、・・・・・(22)に分割し、各六角形(1)、(2)、(3)、・・・・・(22)毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することが可能になる。特に、複数に分割した後の六角形単位で、ビット配列形式の画像データが割り当てられるので、異なる六角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。さらに、六角形が同一色で構成されている場合には、一部の六角形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【００４７】
このように本実施例では、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理（例えば、座標変換処理）に従って異なる小多角形にそれぞれ変形し、次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データが作成される。
【００４８】
したがって、変形対象の画像は各小多角形毎に変形処理が行われるから、従来のように全く異なる全体の画像データを予め持つ必要がなくなり、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形することができる。例えば、少ないメモリで従来と同等の画像変形処理を行うことが可能か、あるいは更にそれを上わまる効果を得ることができる。
また、変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形できる。
特に、複数に分割した後の小多角形単位で、ビット配列形式の画像データを割り当てるようにしているので、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【００４９】
さらに、変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の１つのビット配列形式の画像データを割り当てたり、あるいは変形対象を複数の小多角形に分割した後に、所定の小多角形に対して、同一の１つのビット配列形式の画像データを左右反転又は上下反転して割り当てているので、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、全く同様の効果を得ることができる。また、分割後の小多角形単位で、画像データを割り当てるときに、異なる小多角形に同一の画像データを上下左右反転して用いることができ、画像データを大幅に減らすことができる。
【００５０】
さらに、変形対象を複数の小多角形に分割した後に、各小多角形に対してビット配列形式の画像データを１つずつ割り当てるとき、他の小多角形と同一色で構成されている一部の複数の小多角形に対しては、その小多角形のビット配列形式の画像データ変形処理は行われず、異なる小多角形に変形した変形後の小多角形を同一色とする処理を行っている。したがって、小多角形が同一色で構成されている場合には、一部の小多角形について画像データを持つ必要がなく、画像データをさらに減らすことができるとともに、変形対象全体の変形処理時間を減らすことができる。
【００５１】
具体的な波及効果としては、本発明の適用により、例えばアニメーション、ゲーム等のキャラクター又は背景データ等のようにドットで構成され、かつ各ドット毎に表示色番号あるいはパレット番号を持つようなビット配列形式の画像データを、自由にかつ滑らかに変形することができる。その結果、１つの元画像データから元画像データの一部又は全部が滑らかに変形した複数の画像データを作成することができる。
また、アニメーションに適用した場合、従来のように少しずつその形の異なる複数の画像データを予めメモリに持っておかなくても、一定時間毎に元画像データを本発明の変形法を用いて変形すれば、少ないメモリ容量で従来と同等のアニメーションを行うことができる。
ゲーム等に複数のキャラクターを登場させる場合にも、１つのキャラクターの画像データから全く別の複数のキャラクターを作ることができる。
ゲーム等に登場するキャラクターの一部分（例えば、目、鼻、手、足等のパーツ）の形を変える場合にも、元となる１つの画像データだけを持っていればよいという効果がある。
ゲーム等の背景等に特殊効果を付加する場合にも、従来のような拡大、縮小、四角形から四角形への変形等に比べてはるかに自由かつ滑らかな変形を行うことができ、従来にない特殊効果（例えば、背景を歪ませて異次元の世界を表現する等）を付加することができる。
【００５２】
第２実施例
次に、本発明の第２実施例について説明する。
この第２実施例は一色塗り処理を省いたものであり、ハード的構成は前述した第１実施例と同様であり、説明を省略する。
図１３、図１４はメインプログラムの小矩形変形処理（ステップＳ２０）のサブルーチンを示すフローチャートである。このサブルーチンに移行すると、ステップＳ２００で小多角形データ４４より処理すべき小矩形（ｉ、ｊ）に使う画像データ番号を読み取る。
【００５３】
ここで、本実施例の小多角形データの内容は図１５のように示される。図１５において、小多角形データから前記実施例で用いた一色塗りフラグが省かれており、どのビット配列形式画像データを用いるかを示す画像データ番号、画像データを反転して用いるかどうかを示す左右反転フラグおよび上下反転フラグが設けられている。
複数の小矩形は（０、０）、（０、１）、（０、２）・・・（３、５）というデータで区分され、これらの小矩形（０、０）、（０、１）・・・（３、５）に対して個別に画像データ番号、左右反転フラグ、上下反転フラグが割り当てられる。例えば、小矩形は（０、０）に対しては画像データａが割り当てられ、小矩形は（０、１）に対しては画像データｂが割り当てられている。
なお、本実施例では一色塗りフラグがないから、通常の変形処理が行われる。また、左右反転フラグおよび上下反転フラグは、それぞれ［１］のときに画像データの反転が行われる。
【００５４】
さて、サブルーチンの説明に戻り、ステップＳ２００で小多角形データより処理すべき小矩形（ｉ、ｊ）に使う画像データ番号を読み取る際には、例えば、小矩形は（０、０）に対しては画像データａを使い、小矩形は（０、１）に対しては画像データｂを使うというような画像データ番号を読み取る。このようにして、すべての小矩形（ｉ、ｊ）について図１５に示す小多角形データの画像データ番号が読み取られる。次いで、ステップＳ２０２で読み取った画像データ番号に相当する小多角形単位のビット配列形式の画像データを得る。すなわち、読み出した画像データ番号に対応する小多角形単位のビット配列形式の画像データ（図２に示すもの）を記憶装置３３から読み出す。これにより、画像データ番号に対して実際の画像データａ、画像データｂ等が読み出され、すべての小矩形（ｉ、ｊ）について画像データが割り当てられる。
【００５５】
次いで、ステップＳ２０４で小多角形データの左右反転フラグが［１］であるか否かを判別する。左右反転フラグは各小多角形毎に画像データを左右反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合（左右反転フラグ＝１のとき）にはステップＳ２０６に進んで小多角形単位の画像データ左右反転する。これにより、例えば小矩形（０、２）に画像データｃを割り当てたとき、小矩形（０、３）については左右反転フラグ＝１であるから、画像データｃが左右反転して割り当てられる。ステップＳ２０６を経ると、ステップＳ２０８に進む。一方、ステップＳ２０４で小多角形データの左右反転フラグが［０］であれば、ステップＳ２０６をジャンプしてステップＳ２０８に進む。したがって、このときは画像データの左右反転は行われず、読み出した画像データがそのまま小矩形（ｉ、ｊ）に割り当てられる。
【００５６】
ステップＳ２０８では小多角形データの上下反転フラグが［１］であるか否かを判別する。上下反転フラグは各小多角形毎に画像データを上下反転して用いるかどうかを示すものであるから、画像データを反転して用いる場合（上下反転フラグ＝１のとき）にはステップＳ２１０に進んで小多角形単位の画像データを上下反転する。ステップＳ２１０を経ると、図１３のステップＳ２１２に進む。一方、ステップＳ２０８で小多角形データの上下反転フラグが［０］であれば、ステップＳ２１０をジャンプしてステップＳ２１２に進む。したがって、このときは画像データの上下反転は行われず、読み出した画像データがそのまま小矩形（ｉ、ｊ）に割り当てられる。このようにして、変形前の矩形を選択する処理が行われたので、次いで、変形後の四角形の座標を算出する処理に移る。
【００５７】
図１４のステップＳ２１２で小矩形（ｉ、ｊ）の周囲４点の変形後の座標を、ＣＰＵ３１における内部レジスタ３１ａの格子点座標より得る処理を行う。言換えれば、ＣＰＵ３１の内部レジスタ３１ａに格納されている変形後の格子点座標から、処理すべき小矩形の頂点に当る４つの座標を読み出す。例えば、小矩形（ｉ、ｊ）の場合、その４つの頂点は格子点（ｉ、ｊ）、（ｉ、ｊ＋１）、格子点（ｉ＋１、ｊ）、格子点（ｉ＋１、ｊ＋１）となり、これらが変形後の四角形の座標である。そして、読み出した小矩形（ｉ、ｊ）の周囲４点の変形後の座標に基づいて変形対象の画像全体が滑らかに変形されるように、小矩形（ｉ、ｊ）を異なる四角形にそれぞれ変形する処理を行う。この処理（変形処理に相当）は座標変換処理であり、結局、この座標変換処理では前述したように分割された各小矩形の頂点の座標を求め、次いで、変形対象全体が滑らかに変形されるような変形後の各小四角形の頂点の座標を算出し、この算出した座標に基づいて変形後の異なる小四角形の形状を決定することにより、分割された各小矩形を異なる小四角形に変形することが行われる。
【００５８】
次いで、ステップＳ２１４でいわゆるライン貼り付け法（データ変換処理に相当）により各小矩形内の画像データの配列を変形する処理を行う。これにより、各小矩形は四角形へと変形処理され、最終的にすべての小矩形（ｉ、ｊ）に対応する画像データの配列が変形し、変形画像が得られることになる。
なお、ライン貼り付け法の詳しい処理方法は、同様にサブルーチンで後述する。
次いで、ステップＳ２１６でＶＤＰ３４に変形済みの画像データを逐次転送する。これにより、小矩形（ｉ、ｊ）で示される変形後の画像データがＶＤＰ３４に転送され、最終的にすべての小矩形（ｉ、ｊ）に対応する変形した画像データを合成することにより、ＴＶディスプレイ３６に変形後の画像が表示される。ステップＳ２１６の処理を経ると、メインプログラムにリターンする。
【００５９】
以上のルーチンを実行することにより、例えば図１（ａ）に示すような「口」の画像に対して適用した場合には、同図（ｂ）に示すよう、各小矩形(1)、(2)、(3)、・・・・・(24)が小矩形単位で変形し、その変形に伴って各小矩形に割り当てられた画像データが変形する。したがって、ドットの配列が変形の程度に応じて変わることになり、また、多角形分割した後の小矩形単位でビット配列形式の画像データを持っているので、異なる小多角形に同一の画像データをそのままあるいは上下左右反転して用いることができ、画像データを大幅に減らすことができる。
さらに、変形対象の画像データをすべて持つ場合に比べ、格段に少ない画像データで全く同様の効果を得ることができる。
【００６０】
次に、前述したいわゆるライン貼り付け法の処理内容について、以下に具体的に詳述する。
ライン貼り付け処理のサブルーチン
次に、上記ステップＳ１１６（およびステップＳ２１４）におけるライン貼り付け法（矩形から任意の四角形への画像データの変形方法）の具体的な内容は以下の通りである。
図１６はライン貼り付け法の処理を示すサブルーチンのフローチャートであり、このサブルーチンの処理の対象となる画像データの例は図１７（ａ）、（ｂ）のように示される。すなわち、図１７（ａ）は変形前の元画像データを示し、詳しくは変形元となるビット配列形式の画像データを分割した場合のある１つの小矩形の画像データ（つまり、変形前の小矩形画像データ）に対応する。ここで説明するライン貼り付け法は、図１７（ａ）に示すように変形前の小矩形画像データとして縦（Ｙ）方向が１２ピクセル、横（Ｘ）方向が１６ピクセルで構成される元画像データ（矩形ＡＢＣＤで表される）を、図１７（ｂ）に示すような四角形Ａ’Ｂ’Ｃ’Ｄ’に変形する内容である。その変形処理では、まず元画像データを１２本の水平ライン（ライン０〜ライン１１）に分割する。そして、分割した各ラインを画像変形態様に応じて変形後の四角形に順番に貼り付けていく処理が行われ、変形画像が得られる。
【００６１】
サブルーチンのステップを進めながら、上記処理について説明する。
このサブルーチンに移行すると、まずステップＳ１００で辺Ａ’Ｂ’についてラインの端点処理を行う。これは、変形後の四角形のラインの端点Ａ’Ｂ’を求めるものである。なお、ステップＳ１００の処理（辺Ａ’Ｂ’の位置を求める方法）については、後述のサブルーチンで詳述する。
すなわち、図１７（ａ）（ｂ）に示すように、分割した各ラインを画像変形態様に応じて変形後の四角形に順番に貼り付けていく処理では、以下のような状態に着目する必要がある。辺ＡＢ上にあった各ラインの一方の端点は辺Ａ’Ｂ’上に、また、辺ＤＣ上にあった他方の端点は辺Ｄ’Ｃ’上に移動する。このとき、辺ＡＢと辺Ａ’Ｂ’および辺ＤＣと辺Ｄ’Ｃ’では、それらの長さが異なるので、辺Ａ’Ｂ’、辺Ｄ’Ｃ’上でラインの端点が重なったりすることがある。これは、図１７（ｂ）の☆印で示す部分であり、辺Ａ’Ｂ’上のライン５およびライン６が重なっている。また、同一のラインを２回以上貼り付けなければならないこともある。これは、図１７（ｂ）の★印で示す２つの部分であり、辺Ｄ’Ｃ’上のライン３およびライン８が２回繰り返され、それぞれライン３、３’およびライン８、８’となっている。
【００６２】
図１８にラインを２回貼り付ける様子を示す。図１８（ａ）は変形前の元画像データであり、詳しくは変形元となるビット配列形式の画像データを分割した場合のある１つの小矩形の画像データに対応する。図１８（ｂ）は変形後の１つの四角形の画像データである。変形前の画像データのライン３が、変形後は途中のドットから右側６ドットだけライン３、３’として２ライン分貼り付けられる。また、変形前の画像データのライン５とライン６が、変形後は最初のドットから７ドットまで（つまり左側７ドット分）については同じドットに貼り付けられ、以後の右側７ドットについてはライン５、ライン６として別個に貼り付けられる。なお、図１７〜図２６はライン貼り付け法を実行する場合の、複数の実行過程における変形前の小矩形および変形後の四角形を示すものであり、各過程の具体例は後述のサブルーチンを説明するときに述べる。
【００６３】
次いで、ステップＳ１０２で辺Ｄ’Ｃ’についてラインの端点処理を行う。これは、変形後の四角形のラインの端点Ｄ’Ｃ’を求めるものである。なお、ステップＳ１０２の処理（辺Ｄ’Ｃ’の位置を求める方法）については、同様に後述のサブルーチンで詳述する。
このようにして、各ラインの端点が移動する辺Ａ’Ｂ’と辺Ｄ’Ｃ’の位置が求められると、これらのラインの端点位置は図２７に示すように、ＣＰＵ３１の内部レジスタ３１ａにある端点バッファにデータを格納する。この場合、内部レジスタ３１ａには辺Ａ’Ｂ’上の端点バッファと、辺Ｄ’Ｃ’上の端点バッファという２つの格納エリアがある。そして、これらの各端点バッファではラインの端点の座標と、そのライン番号を対応付けて格納する。２つの端点バッファは端点の位置を読み出すときや、ラインの描画位置を決めるときに使用される。
【００６４】
次いで、ステップＳ１０４〜ステップＳ１１０でラインを描画する処理を行う。まず、ステップＳ１０４では２つの端点バッファからライン番号の同じデータを読み出す。次いで、ステップＳ１０６で同じライン番号のラインが複数あるときには描画回数が最小になるように組み合せる。これは、図２８に示すように、例えば辺Ａ’Ｂ’上で同じライン番号のラインが３本あり、一方、辺Ｄ’Ｃ’上で同じライン番号のラインが２本ある場合、上側の各端点同士を１本のラインで引き、辺Ａ’Ｂ’上の２つの端点と辺Ｄ’Ｃ’上の１つの端点とを２本のラインで引くような処理を行うものである。
次いで、ステップＳ１０８で描画処理（詳細はサブルーチンで後述）を行う。次いで、ステップＳ１１０ですべてのラインについて処理したか否かを判別し、ＮＯのときはステップＳ１０４に戻って同様の処理を繰り返す。そして、すべてのラインについてステップＳ１０４〜ステップＳ１０８の処理が終了すると、ステップＳ１１０からＹＥＳに抜けてルーチンを終了する。このようにして、各小矩形が異なる四角形にそれぞれ変形され、変形対象の画像全体が滑らかに変形することになる。
【００６５】
ライン端点処理のサブルーチン
次に、上記ステップＳ１００およびステップＳ１０２におけるラインの端点処理のサブルーチンについて説明する。
図２９はラインの端点処理（ステップＳ１１０の処理）を示すサブルーチンのフローチャートである。まず、貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の位置を求める方法から説明する。なお、貼り付けるラインの他方の端点となる辺Ｄ’Ｃ’の位置を求める方法も同様である。
ステップＳ２００で座標決定用誤差ｅ１、ライン選択用誤差ｅ２、現在ライン番号をすべて［０］に初期設定する。座標決定用誤差ｅ１とは、端点の位置を決めるとき又はラインの描画位置を決めるときに用いる座標決定用誤差のことである。ライン選択用誤差ｅ２とは、端点に割り当てるラインを選択するときに用いるライン選択用誤差のことである。これにより、最初は各誤差が［０］になる。
【００６６】
次いで、ステップＳ２０２で処理を開始する点（Ａ’又はＤ’）の座標をＣＰＵ３１の内部レジスタ３１ａにある現在座標というエリアに格納する。例えば、貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の位置を求める処理では、Ａ’の座標を格納する。一方、貼り付けるラインの他方の端点となる辺Ｄ’Ｃ’の位置を求める処理では、Ｄ’の座標を格納する。ＣＰＵ３１の内部レジスタ３１ａには図２７に示すように、端点バッファの他に、以下のような格納エリアがある。
座標決定用誤差ｅ１のエリア
座標決定用誤差増分Δｅ１のエリア
現在座標のエリア
ライン選択用誤差ｅ２のエリア
ライン選択誤差増分Δｅ２のエリア
現在ライン番号
また、ドット選択用の格納エリアとしては、以下のようなものがある。
ドット選択用誤差ｅ３のエリア
ドット選択用誤差増分Δｅ３のエリア
現在ドット番号のエリア
【００６７】
次いで、ステップＳ２０４でＹ方向のピクセル数がＸ方向のピクセル数より多いか否かを判別する。いま、貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の位置を求める場合の具体例は図１９に示される。図１９（ａ）に示す変形前のラインの一方の端点となる辺ＡＢを示し、図１９（ｂ）は貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の様子を示し、さらに図１９（ｃ）は辺Ａ’Ｂ’におけるＸ方向およびＹ方向のピクセル数の変化を示している。この例に対応させて考えると、辺Ａ’Ｂ’はＹ方向に１１ピクセル、Ｘ方向に４ピクセルに渡って描画されるので、ステップＳ２０４の判別結果はＹＥＳとなり、このケースではステップＳ２０６に進む。一方、逆のケースではＮＯに分岐して図３０に示すステップＳ２３８に進む。
また、この場合、図１９に示すケースでは点Ａ’から点Ｂ’に向ってＹ座標を１ずつ変えていったときにＸ座標の変化する位置を求めると、そのとき変化した座標が辺Ａ’Ｂ’の位置となる。したがって、無条件に位置の決る始点（点Ａ’）を除く１０個のドットを打つときには、Ｘ座標の変化する位置としてＸ座標が変化する３箇所を求めることになる。
【００６８】
ステップＳ２０６に進むと、座標決定用誤差増分Δｅ１を（Ｘピクセル数−１）／（Ｙピクセル数−１）に初期設定するとともに、ライン選択誤差増分Δｅ２を（元ライン数−１）／（Ｙピクセル数−１）に初期設定する。ステップＳ２００〜ステップＳ２０６の処理により必要な初期設定が完了する。次いで、ステップＳ２０８で現在のライン番号と現在座標を端点バッファ（図２７参照）に格納する。次いで、ステップＳ２１０で現在座標のＹ座標を変更する。次いで、ステップＳ２１２で座標決定用誤差ｅ１についての判別を以下のようにして行う。すなわち、選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（Ｘ方向のピクセル数−１）／（Ｙ方向のピクセル数−１）である。
【００６９】
なお、ここでは、座標決定用であるからｅをｅ１とし、ΔｅをΔｅ１として処理をする。そうすると、ｅ１＝ｅ１＋Δｅ１となる。この値が１／２より大きくなったか否かを判別する。そして、誤差増分Δｅ１を加えた結果ｅ１がｅ１≧（１／２）であれば、ステップＳ２１４に進んで次に打つ点の座標（次の現在座標に相当）のＸ座標を変更する。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。
【００７０】
このようにすると、点Ａ’から点Ｂ’に向ってＹ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ１が１の半分より大きい場合に、次の座標を変更するので、Ｘ座標の変化する位置が滑らかにつながることになる。なお、この方法はいわゆるBresenhamのアルゴリズムとして用いられるものである。
次いで、ステップＳ２１６で誤差補正を行い、ｅ１＝ｅ１−１とする。これは、選択誤差が１／２以上になって次の座標を変更したので、１を減算することにより、再び次の現在座標から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ２１８に進む。
一方、誤差増分Δｅ１を加えた結果ｅ１がｅ１＜（１／２）であれば、ステップＳ２１４、ステップＳ２１６をジャンプしてステップＳ２１８に進む。このときは、次に打つ点のＸ座標は元のままにする。また、この場合は選択誤差ｅ１は補正しない。以上のステップＳ２１０〜ステップＳ２１６を実行することにより、貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の位置が決定される。
【００７１】
ここで、図１９の場合（貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の位置を決定する場合）の具体例について説明する。
まず、最初の端点Ａ’は無条件に決まる。この時点で、選択誤差ｅは［０］に初期設定されている。また、端点Ａ’から端点Ｂ’に対してはＹ方向に１１ピクセル、Ｘ方向に４ピクセルに渡って描画されるので、誤差増分Δｅは
Δｅ＝（４−１）／（１１−１）＝０．３０である。次いで、選択誤差ｅとしてｅ＝０を加え、誤差増分ΔｅとしてΔｅ＝０．３０を加えると、
ｅ＝０＋０．３０＝０．３０＜（１／２）となる。したがって、このときは次に打つ点▲１▼のＸ座標は変更しない（図１９（ｃ）参照）。また、選択誤差ｅは１／２より小さいので、選択誤差ｅの補正は行わない。次いで、ここまでの選択誤差ｅ＝０．３０に誤差増分ΔｅとしてΔｅ＝０．３０を加えると、
ｅ＝０．３０＋０．３０＝０．６０≧（１／２）となるので、今度は次に打つ点▲２▼のＸ座標を変更する（図１９（ｃ）参照）。以上の処理を繰り返すことにより、点▲５▼、▲９▼の位置でＸ座標の変更が行われ、最終的に図１９（ｃ）に示すように、端点Ｂ’の位置が決定される。
【００７２】
一方、上記ステップＳ２０４でＹ方向のピクセル数がＸ方向のピクセル数より小さいときは図３０のステップＳ２３８に進み、今度はＹ座標の方を変更する処理を行う。すなわち、ステップＳ２３８で座標決定用誤差増分Δｅ１を（Ｙピクセル数−１）／（Ｘピクセル数−１）に初期設定するとともに、ライン選択誤差増分Δｅ２を（元ライン数−１）／（Ｘピクセル数−１）に初期設定する。次いで、ステップＳ２４０で現在のライン番号と現在座標を端点バッファ（図２７参照）に格納する。次いで、ステップＳ２４２で現在座標のＸ座標を変更する。次いで、ステップＳ２４４で座標決定用誤差ｅ１についての判別を以下のようにして行う。すなわち、選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（Ｙ方向のピクセル数−１）／（Ｘ方向のピクセル数−１）である。なお、ここでは、同様に座標決定用であるからｅをｅ１とし、ΔｅをΔｅ１として処理をする。そうすると、ｅ１＝ｅ１＋Δｅ１となる。この値が１／２より大きくなったか否かを判別する。そして、誤差増分Δｅ１を加えた結果ｅ１がｅ１≧（１／２）であれば、ステップＳ２４６に進んで次に打つ点の座標（次の現在座標に相当）のＹ座標を変更する。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。
【００７３】
このようにすると、点Ｄ’から点Ｃ’に向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ１が１の半分より大きい場合に、次の座標を変更するので、Ｙ座標の変化する位置が滑らかにつながることになる。次いで、ステップＳ２４８で誤差補正を行い、ｅ１＝ｅ１−１とする。これは、選択誤差が１／２以上になって次の現在座標のＹ座標を変更したので、１を減算することにより、再び次の現在座標から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ２５０に進む。
一方、誤差増分Δｅ１を加えた結果ｅ１がｅ１＜（１／２）であれば、ステップＳ２４６、ステップＳ２４８をジャンプしてステップＳ２５０に進む。このときは、次に打つ点のＹ座標は元のままにする。また、この場合は選択誤差ｅ１は補正しない。以上のステップＳ２４２〜ステップＳ２４８を実行することにより、貼り付けるラインの一方の端点となる辺Ｄ’Ｃ’の位置が決定される。
【００７４】
ここで、図２０の場合（貼り付けるラインの他方の端点となる辺Ｄ’Ｃ’の位置を決定する場合）の具体例について説明する。
図２０（ａ）は変形前のラインの他方の端点となる辺ＤＣを示し、図２０（ｂ）は貼り付けるラインの他方の端点となる辺Ｄ’Ｃ’の様子を示し、さらに図２０（ｃ）は辺Ｄ’Ｃ’におけるＸ方向およびＹ方向のピクセル数の変化を示している。この例に対応させて考えると、辺Ｄ’Ｃ’はＹ方向に１４ピクセル、Ｘ方向に５ピクセルに渡って描画されるので、点Ｄ’から点Ｃ’に向ってＹ座標を１ずつ変えていったときにＸ座標の変化する位置を求めると、そのとき変化した座標が辺Ｄ’Ｃ’の位置となる。したがって、無条件に位置の決る始点（点Ｄ’）を除く１３個のドットを打つときには、Ｘ座標の変化する位置としてＸ座標が変化する４箇所を求めることになる。
【００７５】
まず、最初の端点Ｄ’は無条件に決まる。この時点で、選択誤差ｅは［０］に初期設定されている。また、端点Ｄ’から端点Ｃ’に対してはＹ方向に１４ピクセル、Ｘ方向に５ピクセルに渡って描画されるので、誤差増分Δｅは
Δｅ＝（５−１）／（１４−１）＝０．３０である。次いで、選択誤差ｅとしてｅ＝０を加え、誤差増分ΔｅとしてΔｅ＝０．３０を加えると、
ｅ＝０＋０．３０＝０．３０＜（１／２）となる。したがって、このときは次に打つ点▲１▼のＸ座標は変更しない（図２０（ｃ）参照）。また、選択誤差ｅは１／２より小さいので、選択誤差ｅの補正は行わない。次いで、ここまでの選択誤差ｅ＝０．３０に誤差増分ΔｅとしてΔｅ＝０．３０を加えると、
ｅ＝０．３０＋０．３０＝０．６０≧（１／２）となるので、今度は次に打つ点▲２▼のＸ座標を変更する（図２０（ｃ）参照）。以上の処理を繰り返すことにより、点▲５▼、▲９▼、(12)（なお、１０以降の○付き数字は表示が困難につき、かっこ付きの半角数字で表す）の位置でＸ座標の変更が行われ、最終的に図２０（ｃ）に示すように、端点Ｃ’の位置が決定される。
【００７６】
さて、再び図２９のフローチャートに戻り、端点位置の決定が行われると、ステップＳ２１８に進む。ステップＳ２１８〜ステップＳ２３６およびステップＳ２５０〜ステップＳ２６６では、辺Ａ’Ｂ’、辺Ｄ’Ｃ’に分割された水平ラインのうち、どのラインの端点を割り当てるかを求める処理を行う。
まず、図２１（ｂ）に示す辺Ａ’Ｂ’のように図２１（ａ）に示す元となる辺ＡＢよりも短い辺に、貼り付けるラインの端点を割り当てる処理内容について説明する。元画像データの水平ライン数は１２本、辺Ａ’Ｂ’に貼り付けることのできるライン数は１１本なので、元画像データの１２本のラインのうち、２本のラインの端点が辺Ａ’Ｂ’上で重なる。重なるラインの選択の処理は、次のようになる。
【００７７】
ステップＳ２１８で選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（元画像のライン数−１）／（辺Ａ’Ｂ’のピクセル数−１）である。なお、ここでは、ライン選択用であるからｅをｅ２とし、ΔｅをΔｅ２として処理をする。そうすると、ｅ２＝ｅ２＋Δｅ２となる。次いで、この値が１／２より大きくなったか否かをステップＳ２２０で判別する。そして、誤差増分Δｅ２を加えた結果ｅ２がｅ２≧（１／２）であれば、ステップＳ２２４に進んで現在のライン番号を［１］だけインクリメントする（つまり、次のライン番号に進める）。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。現在のライン番号を１進めることにより、辺Ａ’Ｂ’上の次の点には次のラインの端点が割り当てられる。
【００７８】
このようにすると、点Ａ’から点Ｂ’に向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ２が１の半分より大きい場合に、次のライン番号に変更するので、ライン端点の変化する位置が滑らかにつながることになる。
また、ステップＳ２２０でｅ２が１／２未満のときはステップＳ２３６にジャンプする。ステップＳ２３６ではすべての端点について処理したか否かを判別し、すべての端点について処理が終了していなければ、ステップＳ２０８に戻って同様の処理を繰り返す。したがって、誤差増分Δｅ２が１の半分より大きくなった時点でステップＳ２３６へジャンプせず、ステップＳ２２４の方に進むことになる。
【００７９】
ステップＳ２２４を経ると、続くステップＳ２２４で誤差補正を行い、ｅ２＝ｅ２−１とする。これは、選択誤差が１／２以上になって次のライン番号に変更したので、１を減算することにより、再び次のライン番号から誤差増分Δｅを加えて同様の判別を始めるためである。次いで、ステップＳ２２８で再び選択誤差ｅ２が１／２以上であるか否かを判別する。これは、誤差補正を行った結果について、再度選択誤差ｅ２の大ささを判断するものである。そして、誤差補正を行った結果、選択誤差ｅ２が依然として１／２以上であれば、ステップＳ２３０に進み、現在のライン番号と現在座標をＣＰＵ３１の内部レジスタ３１ａ内の端点バッファに格納する。次いで、ステップＳ２３２でライン番号を［１］だけインクリメントする（つまり、次のライン番号に進める）。これにより、辺Ａ’Ｂ’上の同じ点に、次のラインの端点も割り当てられる。そして、選択誤差ｅ２が１／２未満になるまで、同じ点に次のラインの端点が順次割り当てられていく。
【００８０】
次いで、ステップＳ２３４で誤差補正を行い、ｅ２＝ｅ２−１とする。これは、上記同様に選択誤差が１／２以上になって次のライン番号に変更したので、１を減算することにより、再び次のライン番号から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ２２８に戻って同様の処理を繰り返す。したがって、誤差を補正した結果（選択誤差）ｅ２が未だ１／２より大きければ、ライン番号を更に１進めて辺Ａ’Ｂ’上の同じ点に、次のラインの端点が割り当てられ、選択誤差ｅ２が１／２未満になるまで、同じ点に次のラインの端点が割り当てられることになる。
【００８１】
一方、ステップＳ２２８で誤差増分Δｅ２を加えた結果ｅ２がｅ２＜（１／２）であれば、ステップＳ２３６にジャンプする。このときは、次のライン番号に変更されず、ライン番号は元のままである。また、この場合は選択誤差ｅ２は補正しない。ステップＳ２３６ではすべての端点について処理したか否かを判別する。すべての端点について処理が終了していなければ、ステップＳ２０８に戻って処理を繰り返す。これにより、点Ａ’から点Ｂ’に向ってＸ座標を１ずつ変えていったときに、誤差増分Δｅ２の大きさに応じて上記のような処理が繰り返される。誤差増分Δｅ２が１／２より大きい場合に、次のライン番号に変更されていく。以上のステップＳ２１８〜ステップＳ２３６を実行することにより、辺Ａ’Ｂ’のように元となる辺ＡＢよりも短い辺に、貼り付けるラインの端点を割り当てる場合の各ライン端点の位置が決定される。
【００８２】
ここで、図２１の場合（辺Ａ’Ｂ’のように元となる辺ＡＢよりも短い辺に、ラインの一方の端点を割り当てる場合）の具体例について説明する。
図２１（ａ）は変形前のラインの一方の端点となる辺ＡＢを示し、図２１（ｂ）は貼り付けるラインの一方の端点となる辺Ａ’Ｂ’の様子を示し、さらに図２１（ｃ）は辺Ａ’Ｂ’におけるＸ方向およびＹ方向のピクセル数の変化を示している。まず、ライン０の端点が頂点Ａ’上に決まる。この時点でライン番号は０、選択誤差ｅは［０］に初期設定されている。また、誤差増分Δｅは
Δｅ＝（１２−１）／（１１−１）＝１．１０である。次いで、選択誤差ｅをｅ＝０とし、誤差増分ΔｅとしてΔｅ＝１．１０を加えると、
ｅ＝０＋１．１０＝１．１０≧（１／２）となる。これにより、ライン番号を１進める（ライン１になる：図２１（ｃ）参照）。したがって、辺Ａ’Ｂ’上の点▲１▼にはライン１の端点が割り当てられる（図２１（ｂ）参照）。このとき、選択誤差ｅを次のように補正する。
ｅ＝１．１０−１＝０．１０＜１／２
【００８３】
ここまでの選択誤差ｅ＝０．１０に、再び誤差増分Δｅ＝１．１０を加えると、
ｅ＝０．１０＋１．１０＝１．２０≧（１／２）となる。これにより、ライン番号を１進める（今度はライン２になる：図２１（ｃ）参照）。したがって、辺Ａ’Ｂ’上の点▲２▼にはライン２の端点が割り当てられる（図２１（ｂ）参照）。このとき、選択誤差ｅを次のように補正する。
ｅ＝１．２０−１＝０．２０＜１／２
以下、同様の処理を行い、辺Ａ’Ｂ’上の点▲３▼にはライン３の端点が、点▲４▼にはライン４の端点が、点▲５▼にはライン５の端点がそれぞれ割り当てられる（図２１（ｂ）参照）。このとき、ライン５を割り当てて選択誤差ｅを補正した時点で選択誤差ｅは０．５０になる。選択誤差ｅを補正した時点で未だｅ≧１／２なので、ライン番号を更に１進めて（ライン６になる）、点▲５▼にライン６の端点も割り当てる。次いで、さらに選択誤差ｅを以下のように補正する。
ｅ＝０．５０−１＝−０．５０＜１／２
以上の処理を繰り返すことにより、辺Ａ’Ｂ’に分割された元の水平ライン内のどのラインの端点を割り当てるかが決まる。
【００８４】
さて、再び図３０のフローチャートに戻って説明する。
上述の説明は辺Ａ’Ｂ’のように元となる辺ＡＢよりも短い辺に、貼り付けるラインの端点を割り当てる処理内容であったが、今度は、図２２（ｂ）に示す辺Ｄ’Ｃ’のように図２２（ａ）に示す元となる辺ＤＣよりも長い辺に、貼り付けるラインの端点を割り当てる処理内容について説明する。この場合には図３０に示すステップＳ２５０以降の処理が実行される。これは、先のステップＳ２０４の判別結果がＮＯである場合に相当し、この判別結果がＮＯということは元となる辺ＤＣよりも長い辺Ｄ’Ｃ’の処理に進むケースである。
ステップＳ２０４の判別結果がＮＯであるときは図３０のステップＳ２３８に分岐し、端点の位置決定を行った後、ステップＳ２５０以降の各ステップを実行する。
まず、元画像データの水平ライン数は１２本、辺Ｄ’Ｃ’に貼り付けることのできるライン数は１４本なので、元画像データの１２本のラインのうち、２本のラインの端点が辺Ｄ’Ｃ’上で２回貼り付けられることになる。貼り付けられるラインの選択の処理は、次のようになる。
【００８５】
ステップＳ２５０で選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（元画像のライン数−１）／（辺Ｄ’Ｃ’のピクセル数−１）である。なお、ここでは、ライン選択用であるからｅをｅ２とし、ΔｅをΔｅ２として処理をする。そうすると、ｅ２＝ｅ２＋Δｅ２となる。次いで、この値が１／２より大きくなったか否かをステップＳ２５２で判別する。そして、誤差増分Δｅ２を加えた結果ｅ２がｅ２≧（１／２）であれば、ステップＳ２５４に進んで現在のライン番号を［１］だけインクリメントする（つまり、次のライン番号に進める）。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。現在のライン番号を１進めることにより、辺Ｄ’Ｃ’上の次の点には次のラインの端点が割り当てられる。
【００８６】
このようにすると、点Ｄ’から点Ｃ’に向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ２が１の半分より大きい場合に、次のライン番号に変更するので、ライン端点の変化する位置が滑らかにつながることになる。
また、ステップＳ２５２でｅ２が１／２未満のときはステップＳ２６６にジャンプする。ステップＳ２６６ではすべての端点について処理したか否かを判別し、すべての端点について処理が終了していなければ、ステップＳ２４０に戻って同様の処理を繰り返す。したがって、誤差増分Δｅ２が１の半分より大きくなった時点でステップＳ２６６へジャンプせず、ステップＳ２５４の方に進むことになる。
【００８７】
ステップＳ２５４を経ると、続くステップＳ２５６で誤差補正を行い、ｅ２＝ｅ２−１とする。これは、選択誤差が１／２以上になって次のライン番号に変更したので、１を減算することにより、再び次のライン番号から誤差増分Δｅを加えて同様の判別を始めるためである。次いで、ステップＳ２５８で再び選択誤差ｅ２が１／２以上であるか否かを判別する。これは、誤差補正を行った結果について、再度選択誤差ｅ２の大きさを判断するものである。そして、誤差補正を行った結果、選択誤差ｅ２が依然として１／２以上であれば、ステップＳ２６０に進み、現在のライン番号と現在座標をＣＰＵ３１の内部レジスタ３１ａ内の端点バッファに格納する。次いで、ステップＳ２６２でライン番号を［１］だけインクリメントする（つまり、次のライン番号に進める）。これにより、辺Ｄ’Ｃ’上の同じ点に、次のラインの端点も割り当てられる。そして、選択誤差ｅ２が１／２未満になるまで、同じ点に次のラインの端点が順次割り当てられていく。
【００８８】
次いで、ステップＳ２６４で誤差補正を行い、ｅ２＝ｅ２−１とする。これは、上記同様に選択誤差が１／２以上になって次のライン番号に変更したので、１を減算することにより、再び次のライン番号から誤差増分Δｅを加えて同様の判別を始めるためである。その後、再びステップＳ２５８に戻って同様の処理を繰り返す。したがって、誤差を補正した結果（選択誤差）ｅ２が未だ１／２より大きければ、ライン番号を更に１進めて辺Ｄ’Ｃ’上の同じ点に、次のラインの端点が割り当てられることになる。そして、選択誤差ｅ２が１／２未満になるまで、同じ点に次のラインの端点が割り当てられていく。
【００８９】
一方、ステップＳ２５８で誤差増分Δｅ２を加えた結果ｅ２がｅ２＜（１／２）であれば、ステップＳ２６６にジャンプする。このときは、次のライン番号に変更されず、ライン番号は元のままである。また、この場合は選択誤差ｅ２は補正しない。ステップＳ２６６ではすべての端点について処理したか否かを判別する。すべての端点について処理が終了していなければ、ステップＳ２４０に戻って処理を繰り返す。これにより、点Ｄ’から点Ｃ’に向ってＸ座標を１ずつ変えていったときに、誤差増分Δｅ２の大きさに応じて上記のような処理が繰り返される。誤差増分Δｅ２が１／２より大きい場合に、次のライン番号に変更されていく。以上のステップＳ２５０〜ステップＳ２６６を実行することにより、辺Ｄ’Ｃ’のように元となる辺ＤＣよりも長い辺に、貼り付けるラインの端点を割り当てる場合の各ライン端点の位置が決定される。
【００９０】
ここで、図２２の場合（辺Ｄ’Ｃ’のように元となる辺ＡＢよりも長い辺に、ラインの一方の端点を割り当てる場合）の具体例について説明する。
図２２（ａ）は変形前のラインの一方の端点となる辺ＤＣを示し、図２２（ｂ）は貼り付けるラインの一方の端点となる辺Ｄ’Ｃ’の様子を示し、さらに図２２（ｃ）は辺Ｄ’Ｃ’におけるＸ方向およびＹ方向のピクセル数の変化を示している。まず、ライン０の端点が頂点てＤ’上に決まる。この時点でライン番号は０、選択誤差ｅは［０］に初期設定されている。また、誤差増分Δｅは
Δｅ＝（１２−１）／（１４−１）＝０．８４である。次いで、選択誤差ｅをｅ＝０（初期設定値）とし、誤差増分ΔｅとしてΔｅ＝０．８４を加えると、
ｅ＝０＋０．８４＝０．８４≧（１／２）となる。これにより、ライン番号を１進める（ライン１になる：図２２（ｃ）参照）。したがって、辺Ｄ’Ｃ’上の点▲１▼にはライン１の端点が割り当てられる（図２２（ｂ）参照）。このとき、選択誤差ｅを次のように補正する。
ｅ＝０．８４−１＝−０．１６＜１／２
【００９１】
同様に、辺Ｄ’Ｃ’上の点▲２▼にはライン２の端点が、点▲３▼にはライン３の端点が割り当てられる（図２２（ｂ）参照）。
ライン３を割り当てて選択誤差ｅを補正して時点で、選択誤差ｅは−０．４８になっている。ここまでの選択誤差ｅ＝−０．４８に再び誤差増分Δｅ＝０．８４を加えると、
ｅ＝−０．４８＋０．８４＝０．３６＜（１／２）になるので、ライン３を点▲４▼にもう一度貼り付ける（図２２（ｃ）参照）。このとき、選択誤差ｅは補正しない。
以上の処理を繰り返すことにより、辺Ｄ’Ｃ’に分割された元の水平ライン内のどのラインの端点を割り当てるかが決まる。ライン端点処理が終わった時点における端点バッファへの格納データは図３３に示すようになる。図３３では、辺Ａ’Ｂ’上のライン０〜ライン１１の１２個の端点位置が座標によって端点バッファに記憶される。また、辺Ｄ’Ｃ’上のライン０〜ライン１１（そのうちライン３とライン８は２つある）の１４個の端点位置が座標によって端点バッファに記憶される。
【００９２】
ライン描画処理のサブルーチン
さて、その後はこのようにして求めた辺Ａ’Ｂ’上に一方のラインの端点を持ち、辺Ｄ’Ｃ’上に他方の端点を持つような複数のラインに元画像データ（矩形ＡＢＣＤ）の対応するラインを順番に貼り付けていけば画像変形が行える。ただし、このとき転送先と転送元ではラインの長さ（ピクセル数）が異なるので、ライン毎に拡大あるいは縮小をしながら貼り付けていくことになる。
そこで、続いて前述の図１６に示したステップＳ１０８のラインの描画処理のサブルーチンについて説明する。
図３１はラインの描画処理を示すサブルーチンのフローチャートである。まず、貼り付けるラインの位置を求める処理から説明する。具体例としては、後にライン０の貼り付け位置を求める方法を説明をする。他のラインの貼り付け位置についても同様である。
まず、ステップＳ３００で座標決定用誤差ｅ１、ドット選択用誤差ｅ３、現在ドット番号をすべて［０］に初期設定する。座標決定用誤差ｅ１とは、ここではラインの描画位置を決めるときに用いる座標決定用誤差のことである。ドット選択用誤差ｅ３とは、ラインに割り当てるドットを選択するときに用いるドット選択用誤差のことである。これにより、最初は各誤差が［０］になる。
【００９３】
次いで、ステップＳ３０２で辺Ａ’Ｂ’上の端点の座標をＣＰＵ３１の内部レジスタ３１ａにある現在座標というエリアに格納する（図２７参照）。なお、ドット選択処理の過程で使用される関連の格納エリアとしては、ドット選択用誤差ｅ３のエリア、ドット選択用誤差増分Δｅ３のエリア、現在ドット番号のエリアが用いられる。
次いで、ステップＳ３０４でＹ方向のピクセル数がＸ方向のピクセル数より多いか否かを判別する。いま、ライン０を貼り付けるため各ドットの位置を求める場合の具体例は図１６に示される。図２３（ａ）は変形前のラインＡＤを示し、図２３（ｂ）は変形後のライン辺Ａ’Ｄ’の様子を示し、さらに図２３（ｃ）は辺Ａ’Ｄ’におけるＸ方向およびＹ方向のピクセル数の変化を示している。この例に対応させて考えると、辺Ａ’Ｄ’はＹ方向に１０ピクセル、Ｘ方向に２ピクセルに渡って描画されるので、ステップＳ３０４の判別結果はＹＥＳとなり、このケースではステップＳ３０６に進む。一方、逆のケースではＮＯに分岐して図３２に示すステップＳ３３８に進む。
また、この場合、図２３に示すケースでは点Ａ’から点Ｄ’に向ってＸ座標を１ずつ変えていったときにＹ座標の変化する位置を求めると、そのとき変化した座標がラインＡ’Ｄ’を貼り付けする位置となる。したがって、無条件に位置の決る始点（点Ａ’）を除く９個のドットを打つときには、Ｘ座標の変化する位置としてＸ座標が変化する１箇所を求めることになる。
【００９４】
ステップＳ３０６に進むと、座標決定用誤差増分Δｅ１を（Ｘピクセル数−１）／（Ｙピクセル数−１）に初期設定するとともに、ドット選択誤差増分Δｅ３を（転送元ドット数−１）／（転送先ドット数−１）に初期設定する。ステップＳ３００〜ステップＳ３０６の処理により必要な初期設定が完了する。次いで、ステップＳ３０８で現在座標に描画されていなければ、現在ドット番号のドットを描画する。これにより、該当するラインの最初の点▲１▼がドットで描画される。次いで、ステップＳ３１０で現在座標のＹ座標を変更する。次いで、ステップＳ３１２で座標決定用誤差ｅ１についての判別を以下のようにして行う。すなわち、選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（Ｙ方向のピクセル数−１）／（Ｘ方向のピクセル数−１）である。なお、ここでは、座標決定用であるからｅをｅ１とし、ΔｅをΔｅ１として処理をする。そうすると、ｅ１＝ｅ１＋Δｅ１となる。この値が１／２より大きくなったか否かを判別する。そして、誤差増分Δｅ１を加えた結果ｅ１がｅ１≧（１／２）であれば、ステップＳ３１４に進んで次に打つ点の座標（次の現在座標に相当）のＸ座標を変更する。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。
【００９５】
このようにすると、点Ａ’から点Ｄ’に向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ１が１の半分より大きい場合に、次の座標を変更するので、Ｙ座標の変化する位置が滑らかにつながることになる。次いで、ステップＳ３１６で誤差補正を行い、ｅ１＝ｅ１−１とする。これは、選択誤差が１／２以上になって次の座標を変更したので、１を減算することにより、再び次の現在座標から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ３１８に進む。
また、誤差増分Δｅ１を加えた結果ｅ１がｅ１＜（１／２）であれば、ステップＳ３１４、ステップＳ３１６をジャンプしてステップＳ３１８に進む。このときは、次に打つ点のＸ座標は元のままにする。また、この場合は選択誤差ｅ１は補正しない。以上のステップＳ３１０〜ステップＳ３１６を実行することにより、Ｙ方向のピクセル数がＸ方向のピクセル数より多い場合における該当するラインの貼り付け位置が決定される。
【００９６】
一方、上記ステップＳ３０４でＹ方向のピクセル数がＸ方向のピクセル数より小さいときは図３２のステップＳ３２８に進み、今度はＸ座標の方を変更する処理を行う。すなわち、ステップＳ３２８で座標決定用誤差増分Δｅ１を（Ｙピクセル数−１）／（Ｘピクセル数−１）に初期設定するとともに、ドット選択誤差増分Δｅ３を（転送元ドット数−１）／（転送先ドット数−１）に初期設定する。次いで、ステップＳ３３０で現在座標に描画されていなければ、現在ドット番号のドットを描画する。これにより、該当するラインの最初の点▲１▼がドットで描画される。次いで、ステップＳ３３２で現在座標のＸ座標を変更する。次いで、ステップＳ３３４で座標決定用誤差ｅ１についての判別を以下のようにして行う。
【００９７】
すなわち、選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（Ｙ方向のピクセル数−１）／（Ｘ方向のピクセル数−１）である。なお、ここでは、座標決定用であるからｅをｅ１とし、ΔｅをΔｅ１として処理をする。そうすると、ｅ１＝ｅ１＋Δｅ１となる。この値が１／２より大きくなったか否かを判別する。そして、誤差増分Δｅ１を加えた結果ｅ１がｅ１≧（１／２）であれば、ステップＳ３３６に進んで次に打つ点の座標（次の現在座標に相当）のＹ座標を変更する。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。
【００９８】
このようにすると、点Ａ’から点Ｄ’に向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ１が１の半分より大きい場合に、次の座標を変更するので、Ｙ座標の変化する位置が滑らかにつながることになる。次いで、ステップＳ３４０で誤差補正を行い、ｅ１＝ｅ１−１とする。これは、選択誤差が１／２以上になって次の座標を変更したので、１を減算することにより、再び次の現在座標から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ３４２に進む。
また、誤差増分Δｅ１を加えた結果ｅ１がｅ１＜（１／２）であれば、ステップＳ３３８、ステップＳ３４０をジャンプしてステップＳ３４２に進む。このときは、次に打つ点のＸ座標は元のままにする。また、この場合は選択誤差ｅ１は補正しない。以上のステップＳ３３２〜ステップＳ３４０を実行することにより、Ｙ方向のピクセル数がＸ方向のピクセル数より小さい場合における該当するラインの貼り付け位置が決定される。
【００９９】
なお、上記処理は前述した図２９に示すステップＳ２１０〜ステップＳ２１６と同様の処理内容であるが、図２９のルーチンに比べてＸとＹが逆になっている部分がある。これは、Ｘ方向とＹ方向のピクセル数の多い方を基準として考えているからである。図２９のルーチンではピクセル数の多いＹ座標を基準として考え、Ｙ座標を１つずつ変えていったときに、Ｘ座標がどう変化するかを決定したのに対して、図３１のルーチンではピクセル数の多いＸ座標を基準として考え、Ｘ座標を１つずつ変えていったときに、Ｙ座標がどう変化するかを決定している。
他のラインの貼り付け位置についても、同様の方法で求める処理が行われる。
【０１００】
以上で、各ラインの貼り付け位置が求まったので、次に、元となる水平ドットラインのドット内のうち、どのドットを割り当てる（つまり、ドットを選択する）かを求める処理内容を説明する。
まず、ドット選択の処理として示されるステップＳ３１８以降の処理で、転送先ラインのピクセル数が転送元ラインのピクセル数より少ないとき、つまりラインを縮小する方法を説明する。この方法は、ドット選択の処理であるステップＳ３１８〜ステップＳ３２６で示される。
転送元ラインの最初のドット（ドット０）を無条件に選択するものとすると、その他のドットの選択の方法は以下のようになる。すなわち、まずステップＳ３１８で選択誤差（初期値＝０）ｅを決め、選択誤差ｅに誤差増分Δｅを加える（ｅ＝ｅ＋Δｅ）。Δｅは（転送元のドット数−１）／（転送先のドット数−１）である。なお、ここでは、ドット選択用であるからｅをｅ３とし、ΔｅをΔｅ３として処理をする。そうすると、ｅ３＝ｅ３＋Δｅ３となる。
【０１０１】
次いで、この値が１／２より大きくなったか否かをステップＳ３２０で判別する。そして、誤差増分Δｅ３を加えた結果ｅ３がｅ３≧（１／２）であれば、ステップＳ３２２に進んで現在ドット番号（転送元ラインのドット番号）を［１］だけインクリメントする（つまり、次のドット番号に進める）。これは、選択誤差に誤差増分を加え、その結果が１／２より大きいか小さいかによって処理を選択するもので、選択誤差が１／２以上のときに誤差を補正する。転送元ラインのドット番号を１進めることにより、辺ＡＤ上で次に選択すべき転送元ラインのドット番号が割り当てられる。
【０１０２】
このようにすると、点Ａから点Ｄに向ってＸ座標を１ずつ変えていったときに、少なくとも誤差増分Δｅ３が１の半分より大きい場合に、次のドット番号に変更するので、ドットの変化する位置が滑らかにつながることになる。次いで、ステップＳ３２４で誤差補正を行い、ｅ３＝ｅ３−１とする。これは、選択誤差が１／２以上になって次のドット番号を変更したので、１を減算することにより、再び次の現在ドット番号から誤差増分Δｅを加えて同様の判別を始めるためである。その後、ステップＳ３４４に戻ってステップＳ３４４〜ステップＳ３４８のループを繰り返す。そして、ステップＳ３２０でｅ３が１／２未満になると、ステップＳ３５０に分岐する。
【０１０３】
一方、ステップＳ３２０でｅ３が当初から１／２未満のときはステップＳ３２６にジャンプする。ステップＳ３２６ではすべてのドットについて処理したか否かを判別し、すべてのドットについて処理が終了していなければ、ステップＳ３３０に戻って同様の処理を繰り返す。したがって、誤差増分Δｅ３が１の半分より大きくなった時点ではステップＳ３５０へジャンプせず、ステップＳ３４６の方へ進むことになる。
このように、誤差増分Δｅ３を加えた結果（選択誤差）ｅ３がｅ３＜（１／２）であれば、転送先ラインの次のドットには１つ前のドットと同じデータが再び転送される。このとき、水平ドット番号と選択誤差ｅ３の変更は行われない。
【０１０４】
ここで、ドット選択の具体例について図２５を参照して説明する。
図２５（ａ）は変形前の転送元ラインのドットの様子を示し、図２５（ｂ）は変形後の転送先ラインのドットの様子を示し、さらに図２５（ｃ）は転送ラインにおけるＸ方向およびＹ方向のピクセル数の変化を示している。この例は、転送先ラインのピクセル数が転送元ラインのピクセル数より多いとき、つまりラインを拡大する処理に相当するものである。
この例に対応させて考えると、転送元ラインのドット数は１６個、転送先ラインのドット数は１７個なので、転送先の１７個のドットのうち１個は１つ前のドットと同じデータを転送することになる。転送元ラインの最初のドット（ドット０）を無条件に転送するものとすると、その他のドットの転送の処理は次のようにして行われる。
【０１０５】
まず、最初にドット０を転送する。この時点で、選択誤差ｅは［０］に初期設定され、ドット番号は０になっている。また、転送元ラインのドット数は１６個、転送先ラインのドット数は１７個であるから、誤差増分Δｅは
Δｅ＝（１６−１）／（１７−１）＝０．９３である。次いで、選択誤差ｅをｅ＝０（初期設定値）とし、誤差増分ΔｅとしてΔｅ＝０．９３を加えると、
ｅ＝０＋０．９３＝０．９３≧（１／２）となる。したがって、このときはドット番号を１進める（ドット１になる）。同時に、選択誤差ｅを以下のように補正する。
ｅ＝０．９３−１＝−０．０７＜（１／２）
この時点で選択誤差ｅが１／２より小さくなるので、点▲１▼にはドット１が転送される（図２５（ｂ）、図２５（ｃ）参照）。
【０１０６】
次いで、同様にここまでの選択誤差ｅ＝−０．０７に誤差増分ΔｅとしてΔｅ＝０．９３を加えると、
ｅ＝−０．０７＋０．９３＝０．８６≧（１／２）になるので、ドット番号を１進める（ドット２になる）とともに、選択誤差ｅを以下のように補正する。
ｅ＝０．８６−１＝−０．１４＜（１／２）
この時点で選択誤差ｅが１／２より小さくなり、点▲２▼に表示すべきドットとして、ドット２が転送される（図２５（ｂ）、図２５（ｃ）参照）。
【０１０７】
以後、同様の処理を行うと、点▲３▼にはドット３が、点▲４▼にはドット４が、点▲５▼にはドット５が、点▲６▼にはドット６が、点▲７▼にはドット７がそれぞれ割り当てられる。ドット７を割り当てた時点で選択誤差ｅは−０．４９になる。ここまでの選択誤差ｅ＝−０．４９に誤差増分Δｅ＝０．９３を加えると、
ｅ＝−０．４９＋０．９３＝０．４４＜（１／２）になるので、今度はドット番号は７のままで、選択誤差ｅも変更しない。したがって、点▲８▼にはドット７が再び転送される（図２５（ｂ）、図２５（ｃ）参照）。
以上の処理を繰り返すことにより、転送先ラインの１６個のドットから１個のドット（ドット７）が２回転送されて、転送先ラインの１７個のドットが決定される。このようにして、転送先ラインのピクセル数が転送元ラインのピクセル数より多い場合に、ラインを拡大する処理が行われる。
【０１０８】
上述した各プログラムを実行することにより、変形前の画像データのラインを変形後の画像データとして貼り付ける処理が行われるが、このときラインの貼り付けは辺Ａ’Ｂ’と辺Ｄ’Ｃ’のうち、長い方の辺が有するピクセル数分だけ行われる。例えば、図１７の例では辺Ａ’Ｂ’と辺Ｄ’Ｃ’の各ピクセル数を比較すると、辺Ａ’Ｂ’のピクセル数が１１、辺Ｄ’Ｃ’のピクセル数が１４であるから、辺Ｄ’Ｃ’のピクセル数分（＝１４）だけ行われる。具体的には、図１７（ｂ）に示すように辺Ｄ’Ｃ’のピクセル数に対応して、ライン０、ライン０、ライン１、ライン２、ライン３、ライン３’、ライン４、ライン５、ライン６、ライン７、ライン８、ライン８’、ライン９、ライン１０、ライン１１の１４回ラインの貼り付けるが行われる。そして、各ラインを貼り付けた最終的な状態は図２６（ｂ）のように示される。なお、図２６（ａ）は変形前の画像データのラインである。
なお、図１８（ａ）、（ｂ）に示すように貼り付けた２つのラインが重なる部分が生じるが、本実施例では先に書かれたものを優先するようにしている。また、この他に、後に書かれたものを優先する方法、あるいは重なった部分では２つのドットデータの色コードを合成する毎に、その値を加えて１／２する等の処理方法もある。ドットデータの色コードを合成する場合には、例えばＲ（赤成分）、Ｇ（緑成分）、Ｂ（青成分）というように色コードを分ける。
【０１０９】
なお、ビット配列形式の画像データを有する変形対象を分割する形状は上記の２種類（例えば、小矩形、六角形）に限るものではなく、本発明の目的の範囲内が各種の変形が可能である。
さらに、本発明の適用はアニメーション、ゲーム等のキャラクター又は背景データ等に限るものではなく、他の分野、他の画像データにも適用できる。
【０１１０】
【発明の効果】
本発明によれば、ビット配列形式の画像データを保有可能な変形対象を複数の小多角形に分割し、複数に分割した各小多角形に対して小多角形単位でビット配列形式の画像データを割り当てるとともに、所定の複数の小多角形に対しては、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当て、次いで、画像データを割り当てた各小多角形を所定の変形処理（例えば、座標変換処理）に従って異なる小多角形にそれぞれ変形し、次いで、変形前の小多角形に含まれるビット配列形式の画像データの配列を、各小多角形毎に、所定のデータ変換処理に従って変形後の小多角形のデータに対応するように順次変更して変更後の全体画像データを作成しているので、以下の効果を得ることができる。
（１）変形対象の画像は各小多角形毎に変形処理が行われるので、従来のように全く異なる全体の画像データを予め持つ必要がなく、少ないメモリ容量で、ビット配列形式の画像データの配列を自由に変形することができる。
（２）変形対象を複数の小多角形に分割し、各小多角形毎に変形処理が行われるので、変形に自由度があり、予めメモリに多くのデータを持たなくても、画像を滑らかに変形することができる。
（３）特に、変形対象を複数の小多角形に分割した後に、少なくとも一部の複数の小多角形に対して、同一の１つのビット配列形式の画像データを左右反転あるいは上下反転して割り当てるようにすれば、変形対象の画像データをすべて持つ場合に比べて格段に少ない画像データで、異なる小多角形に同一の画像データをそのまま用いることができ、画像データを大幅に減らすことができる。
【図面の簡単な説明】
【図１】本発明による多角形分割変形方法の原理を説明する図である。
【図２】本発明による小矩形単位の画像データの一例を示す図である。
【図３】本発明に係る画像変形装置の第１実施例の構成図である。
【図４】同実施例の小多角形データの一例を示す図である。
【図５】同実施例の変形対象を多数の小矩形に分割する例を示す図である。
【図６】同実施例のＣＰＵの内部レジスタへのデータの格納例を示す図である。
【図７】同実施例の画像変形処理のメインプログラムを示すフローチャートである。
【図８】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図９】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図１０】同実施例のライン貼り付け法を説明する図である。
【図１１】同実施例の多角形分割変形方法の変形例を示す図である。
【図１２】上記変形例の小矩形単位の画像データの一例を示す図である。
【図１３】本発明の第２実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図１４】同実施例の小矩形変形処理のサブルーチンを示すフローチャートである。
【図１５】同実施例の小多角形データの一例を示す図である。
【図１６】上記各実施例のライン貼り付け処理のサブルーチンを示すフローチャートである。
【図１７】上記各実施例の画像データの変形例を示す図である。
【図１８】上記各実施例の画像データの変形例を示す図である。
【図１９】上記各実施例の画像データの変形例を示す図である。
【図２０】上記各実施例の画像データの変形例を示す図である。
【図２１】上記各実施例の画像データの変形例を示す図である。
【図２２】上記各実施例の画像データの変形例を示す図である。
【図２３】上記各実施例の画像データの変形例を示す図である。
【図２４】同実施例の画像データの変形例を示す図である。
【図２５】上記各実施例の画像データの変形例を示す図である。
【図２６】上記各実施例の画像データの変形例を示す図である。
【図２７】上記各実施例のＣＰＵの内部レジスタへのデータの格納例を示す図である。
【図２８】上記各実施例のライン描画の一例を説明する図である。
【図２９】上記各実施例のライン端点処理のサブルーチンの一部を示すフローチャートである。
【図３０】上記各実施例のライン端点処理のサブルーチンの一部を示すフローチャートである。
【図３１】上記各実施例のライン描画処理のサブルーチンの一部を示すフローチャートである。
【図３２】上記各実施例のライン描画処理のサブルーチンの一部を示すフローチャートである。
【図３３】上記各実施例の端点バッファへのデータの格納例を示す図である。
【符号の説明】
３１  ＣＰＵ（分割手段、変形手段、画像データ作成手段、座標変換手段、データ変換手段、画像変形制御手段）
３２  入力操作子（変形態様指定手段）
３３  記憶装置（記憶手段）
３４  ＶＤＰ
３５  ＶＲＡＭ
３６  ＴＶディスプレイ（表示手段）
４１  小多角形単位で割り当て可能な画像データ
４２、４３  変形後の格子点座標
４４  小多角形データ
５１  第１の変形スイッチ
５２  第２の変形スイッチ
【図１】
0003548806.tif 000002
【図２】
0003548806.tif 000003
【図３】
0003548806.tif 000004
【図４】
0003548806.tif 000005
【図５】
0003548806.tif 000006
【図６】
0003548806.tif 000007
【図７】
0003548806.tif 000008
【図８】
0003548806.tif 000009
【図９】
0003548806.tif 000010
【図１０】
0003548806.tif 000011
【図１１】
0003548806.tif 000012
【図１２】
0003548806.tif 000013
【図１３】
0003548806.tif 000014
【図１４】
0003548806.tif 000015
【図１５】
0003548806.tif 000016
【図１６】
0003548806.tif 000017
【図１７】
0003548806.tif 000018
【図１８】
0003548806.tif 000019
【図１９】
0003548806.tif 000020
【図２０】
0003548806.tif 000021
【図２１】
0003548806.tif 000022
【図２２】
0003548806.tif 000023
【図２３】
0003548806.tif 000024
【図２４】
0003548806.tif 000025
【図２５】
0003548806.tif 000026
【図２６】
0003548806.tif 000027
【図２７】
0003548806.tif 000028
【図２８】
0003548806.tif 000029
【図２９】
0003548806.tif 000030
【図３０】
0003548806.tif 000031
【図３１】
0003548806.tif 000032
【図３２】
0003548806.tif 000033
【図３３】
0003548806.tif 000034