図面を参照して、本発明の一実施形態に係る画像処理プログラムを実行する画像処理装置について説明する。本発明の画像処理プログラムは、任意のコンピュータシステムで実行されることによって適用することができるが、画像処理装置の一例としてゲーム装置1を用い、ゲーム装置1で実行される画像処理プログラムを用いて説明する。なお、図1は、本発明の画像処理プログラムを実行するゲーム装置1の外観図である。ここでは、ゲーム装置1の一例として、携帯ゲーム装置を示す。なお、ゲーム装置1は、カメラを内蔵しており、当該カメラによって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりする撮像装置としても機能する。なお、本明細書においては、カメラによって画像データを取り込むことを「撮像」と記し、撮像した画像データを記憶することを「撮影」と記す。
図1において、ゲーム装置1は、折り畳み型の携帯ゲーム装置であり、開いた状態(開状態)のゲーム装置1を示している。ゲーム装置1は、開いた状態においてもユーザが両手または片手で把持することができるようなサイズで構成される。
ゲーム装置1は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に連結されている。図1の例では、下側ハウジング11および上側ハウジング21は、それぞれ横長の長方形の板状で形成され、互いの長辺部分で回動可能に連結されている。通常、ユーザは、開状態でゲーム装置1を使用する。そして、ユーザは、ゲーム装置1を使用しない場合には閉状態としてゲーム装置1を保管する。また、図1に示した例では、ゲーム装置1は、上記閉状態および開状態のみでなく、下側ハウジング11と上側ハウジング21とのなす角度が閉状態と開状態との間の任意の角度において、連結部分に発生する摩擦力などによってその開閉角度を維持することができる。つまり、上側ハウジング21を下側ハウジング11に対して任意の角度で静止させることができる。
下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12が設けられる。下側LCD12は横長形状であり、長辺方向が下側ハウジング11の長辺方向に一致するように配置される。なお、本実施形態では、ゲーム装置1に内蔵されている表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を利用してもよい。また、ゲーム装置1は、任意の解像度の表示装置を利用することができる。
下側ハウジング11には、入力装置として、各操作ボタン14A〜14Kおよびタッチパネル13が設けられる。図1に示されるように、各操作ボタン14A〜14Kのうち、方向入力ボタン14A、操作ボタン14B、操作ボタン14C、操作ボタン14D、操作ボタン14E、電源ボタン14F、スタートボタン14G、およびセレクトボタン14Hは、上側ハウジング21と下側ハウジング11とを折りたたんだときに内側となる、下側ハウジング11の内側主面上に設けられる。方向入力ボタン14Aは、例えば選択操作等に用いられる。各操作ボタン14B〜14Eは、例えば決定操作やキャンセル操作等に用いられる。電源ボタン14Fは、ゲーム装置1の電源をオン/オフするために用いられる。図1に示す例では、方向入力ボタン14Aおよび電源ボタン14Fは、下側ハウジング11の内側主面中央付近に設けられる下側LCD12に対して、左右一方側(図1では左側)の当該主面上に設けられる。また、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、下側LCD12に対して左右他方側(図1では右側)となる下側ハウジング11の内側主面上に設けられる。方向入力ボタン14A、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、ゲーム装置1に対する各種操作を行うために用いられる。
なお、図1においては、操作ボタン14I〜14Kの図示を省略している。例えば、Lボタン14Iは、下側ハウジング11の上側面の左端部に設けられ、Rボタン14Jは、下側ハウジング11の上側面の右端部に設けられる。Lボタン14IおよびRボタン14Jは、ゲーム装置1に対して、例えば撮影指示操作(シャッター操作)を行うために用いられる。さらに、音量ボタン14Kは、下側ハウジング11の左側面に設けられる。音量ボタン14Kは、ゲーム装置1が備えるスピーカの音量を調整するために用いられる。
また、ゲーム装置1は、各操作ボタン14A〜14Kとは別の入力装置として、さらにタッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上を覆うように装着されている。なお、本実施形態では、タッチパネル13は、例えば抵抗膜方式のタッチパネルが用いられる。ただし、タッチパネル13は、抵抗膜方式に限らず、任意の押圧式のタッチパネルを用いることができる。また、本実施形態では、タッチパネル13として、例えば下側LCD12の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度とが一致している必要はない。また、下側ハウジング11の右側面には、タッチペン27の挿入口(図1に示す破線)が設けられている。上記挿入口は、タッチパネル13に対する操作を行うために用いられるタッチペン27を収納することができる。なお、タッチパネル13に対する入力は、通常タッチペン27を用いて行われるが、タッチペン27に限らずユーザの指等でタッチパネル13を操作することも可能である。
また、下側ハウジング11の右側面には、メモリカード28を収納するための挿入口(図1では、二点鎖線で示している)が設けられている。この挿入口の内側には、ゲーム装置1とメモリカード28とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード28は、例えばSD(Secure Digital)メモリカードであり、上記コネクタに着脱自在に装着される。メモリカード28は、例えば、ゲーム装置1によって撮像された画像を記憶(保存)したり、他の装置で生成された画像をゲーム装置1に読み込んだりするため等に用いられる。
さらに、下側ハウジング11の上側面には、メモリカード29を収納するための挿入口(図1では、一点鎖線で示している)が設けられている。この挿入口の内側にも、ゲーム装置1とメモリカード29とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード29は、画像処理プログラムやゲームプログラム等を記憶した記憶媒体であり、下側ハウジング11に設けられた挿入口に着脱自在に装着される。
下側ハウジング11と上側ハウジング21との連結部の左側部分には、3つのLED15A〜15Cが取り付けられる。ここで、ゲーム装置1は、他の機器との間で無線通信を行うことが可能であり、第1LED15Aは、無線通信が確立している場合に点灯する。第2LED15Bは、ゲーム装置1の充電中に点灯する。第3LED15Cは、ゲーム装置1の電源がオンである場合に点灯する。したがって、3つのLED15A〜15Cによって、ゲーム装置1の通信確立状況、充電状況、および、電源のオン/オフ状況をユーザに通知することができる。
一方、上側ハウジング21には、上側LCD22が設けられる。上側LCD22は横長形状であり、長辺方向が上側ハウジング21の長辺方向に一致するように配置される。なお、下側LCD12と同様、上側LCD22に代えて、他の任意の方式および任意の解像度の表示装置を利用してもよい。また、上側LCD22上を覆うように、タッチパネルを設けてもかまわない。
また、上側ハウジング21には、2つのカメラ(内側カメラ23および外側カメラ25)が設けられる。図1に示されるように、内側カメラ23は、上側ハウジング21の連結部付近の内側主面に取り付けられる。一方、外側カメラ25は、内側カメラ23が取り付けられる内側主面の反対側の面、すなわち、上側ハウジング21の外側主面(ゲーム装置1が閉状態となった場合に外側となる面であり、図1に示す上側ハウジング21の背面)に取り付けられる。なお、図1においては、外側カメラ25を破線で示している。これによって、内側カメラ23は、上側ハウジング21の内側主面が向く方向を撮像することが可能であり、外側カメラ25は、内側カメラ23の撮像方向の逆方向、すなわち、上側ハウジング21の外側主面が向く方向を撮像することが可能である。このように、本実施形態では、2つの内側カメラ23および外側カメラ25の撮像方向が互いに逆方向となるように設けられる。例えば、ユーザは、ゲーム装置1からユーザの方を見た景色を内側カメラ23で撮像することができるとともに、ゲーム装置1からユーザの反対側の方向を見た景色を外側カメラ25で撮像することができる。なお、下側LCD12および/または上側LCD22は、内側カメラ23または外側カメラ25で撮像されている画像をリアルタイムに表示するために用いられることもある。
なお、上記連結部付近の内側主面には、音声入力装置としてマイク(図2に示すマイク43)が収納されている。そして、上記連結部付近の内側主面には、マイク43がゲーム装置1外部の音を検知できるように、マイクロフォン用孔16が形成される。マイク43を収納する位置およびマイクロフォン用孔16の位置は必ずしも上記連結部である必要はなく、例えば下側ハウジング11にマイク43を収納し、マイク43の収納位置に対応させて下側ハウジング11にマイクロフォン用孔16を設けるようにしても良い。
また、上側ハウジング21の外側主面には、第4LED26(図1では、破線で示す)が取り付けられる。第4LED26は、内側カメラ23または外側カメラ25によって撮像が行われている間点灯する。また、内側カメラ23または外側カメラ25によって動画が撮像(撮像画像を動画として記憶)される間は点滅させても良い。なお、LEDが画面に映り込むことを防ぐために、シャッターが押された瞬間から、当該シャッターが押された瞬間の撮像画像の記憶が完了するまでの間は第4LED26を消灯させても良い。第4LED26によって、ゲーム装置1による撮像が行われていることを撮像対象者や周囲に通知することができる。
また、上側ハウジング21の内側主面中央付近に設けられる上側LCD22に対して、左右両側の当該主面に音抜き孔24がそれぞれ形成される。音抜き孔24の奥の上側ハウジング21内には、それぞれスピーカが収納されている。音抜き孔24は、スピーカからの音をゲーム装置1の外部に放出するための孔である。
以上に説明したように、上側ハウジング21には、画像を撮像するための構成である内側カメラ23および外側カメラ25と、各種画像を表示するための表示手段である上側LCD22とが設けられる。一方、下側ハウジング11には、ゲーム装置1に対する操作入力を行うための入力装置(タッチパネル13および各ボタン14A〜14K)と、各種画像を表示するための表示手段である下側LCD12とが設けられる。当該入力装置は、例えば、ゲーム装置1を使用する際には、下側LCD12や上側LCD22に撮像画像(カメラによって撮像された画像)を表示しながら、下側ハウジング11をユーザが把持して入力装置に対する入力を行うような用途に用いることができる。
次に、図2を参照して、ゲーム装置1の内部構成を説明する。なお、図2は、ゲーム装置1の内部構成の一例を示すブロック図である。
図2において、ゲーム装置1は、CPU31と、メインメモリ32と、メモリ制御回路33と、保存用データメモリ34と、プリセットデータ用メモリ35と、メモリカードインターフェース(メモリカードI/F)36および37と、無線通信モジュール38と、ローカル通信モジュール39と、リアルタイムクロック(RTC)40と、電源回路41と、インターフェース回路(I/F回路)42等との電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて、下側ハウジング11(または上側ハウジング21でもよい)内に収納される。
CPU31は、所定のプログラムを実行するための情報処理手段である。本実施形態では、所定のプログラムがゲーム装置1内のメモリ(例えば保存用データメモリ34)やメモリカード28および/または29に記憶されており、CPU31は、当該所定のプログラムを実行することによって、後述する画像処理を実行する。なお、CPU31によって実行されるプログラムは、ゲーム装置1内のメモリに予め記憶されていてもよいし、メモリカード28および/または29から取得されてもよいし、他の機器との通信によって他の機器から取得されてもよい。
CPU31には、メインメモリ32、メモリ制御回路33、およびプリセットデータ用メモリ35が接続される。また、メモリ制御回路33には、保存用データメモリ34が接続される。メインメモリ32は、CPU31のワーク領域やバッファ領域として用いられる記憶手段である。すなわち、メインメモリ32は、上記情報処理に用いられる各種データを記憶したり、外部(メモリカード28および29や他の機器等)から取得されるプログラムを記憶したりする。本実施形態では、メインメモリ32として、例えばPSRAM(Pseudo−SRAM)を用いる。保存用データメモリ34は、CPU31によって実行されるプログラムや内側カメラ23および外側カメラ25によって撮像された画像のデータ等を記憶するための記憶手段である。保存用データメモリ34は、不揮発性の記憶媒体によって構成されており、例えば本実施例ではNAND型フラッシュメモリで構成される。メモリ制御回路33は、CPU31の指示に従って、保存用データメモリ34に対するデータの読み出しおよび書き込みを制御する回路である。プリセットデータ用メモリ35は、ゲーム装置1において予め設定される各種パラメータ等のデータ(プリセットデータ)を記憶するための記憶手段である。プリセットデータ用メモリ35としては、SPI(Serial Peripheral Interface)バスによってCPU31と接続されるフラッシュメモリを用いることができる。
メモリカードI/F36および37は、それぞれCPU31に接続される。メモリカードI/F36は、コネクタに装着されたメモリカード28に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。また、メモリカードI/F37は、コネクタに装着されたメモリカード29に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。本実施形態では、内側カメラ23および外側カメラ25によって撮像された画像データや他の装置から受信された画像データがメモリカード28に書き込まれたり、メモリカード28に記憶された画像データがメモリカード28から読み出されて保存用データメモリ34に記憶されたりする。また、メモリカード29に記憶された各種プログラムが、CPU31によって読み出されて実行されたりする。
なお、本発明の画像処理プログラムは、メモリカード29等の外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されてもよい。また、画像処理プログラムは、コンピュータシステム内部の不揮発性記憶装置に予め記憶されていてもよい。なお、画像処理プログラムを記憶する情報記憶媒体としては、上記不揮発性記憶装置に限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でもよい。
無線通信モジュール38は、例えばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール39は、所定の通信方式により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール38およびローカル通信モジュール39は、CPU31に接続される。CPU31は、無線通信モジュール38を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール39を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
また、CPU31には、RTC40および電源回路41が接続される。RTC40は、時間をカウントしてCPU31に出力する。例えば、CPU31は、RTC40によって計時された時間に基づいて、現在時刻(日付)等を計算することもできる。電源回路41は、ゲーム装置1が有する電源(典型的には電池であり、下側ハウジング11に収納される)から供給される電力を制御し、ゲーム装置1の各部品に電力を供給する。
また、ゲーム装置1は、マイク43およびアンプ44を備えている。マイク43およびアンプ44は、それぞれI/F回路42に接続される。マイク43は、ゲーム装置1に向かって発声されたユーザの音声を検知して、当該音声を示す音声信号をI/F回路42に出力する。アンプ44は、I/F回路42から音声信号を増幅してスピーカ(図示せず)から出力させる。I/F回路42は、CPU31に接続される。
また、タッチパネル13は、I/F回路42に接続される。I/F回路42は、マイク43およびアンプ44(スピーカ)の制御を行う音声制御回路と、タッチパネル13の制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データを生成してCPU31に出力する。例えば、タッチ位置データは、タッチパネル13の入力面に対して入力が行われた位置の座標を示すデータである。なお、タッチパネル制御回路は、タッチパネル13からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。CPU31は、I/F回路42を介して、タッチ位置データを取得することにより、タッチパネル13に対して入力が行われた位置を知ることができる。
操作ボタン14は、上記各操作ボタン14A〜14Kから構成され、CPU31に接続される。操作ボタン14からCPU31へは、各操作ボタン14A〜14Kに対する入力状況(押下されたか否か)を示す操作データが出力される。CPU31は、操作ボタン14から操作データを取得することによって、操作ボタン14に対する入力に応じた処理を実行する。
内側カメラ23および外側カメラ25は、それぞれCPU31に接続される。内側カメラ23および外側カメラ25は、CPU31の指示に応じて画像を撮像し、撮像した画像データをCPU31に出力する。例えば、CPU31は、内側カメラ23および外側カメラ25のいずれか一方に対して撮像指示を行い、撮像指示を受けたカメラが画像を撮像して画像データをCPU31に送る。
また、下側LCD12および上側LCD22は、それぞれCPU31に接続される。下側LCD12および上側LCD22は、それぞれCPU31の指示に従って画像を表示する。一例として、CPU31は、内側カメラ23および外側カメラ25のいずれかから取得した画像を、下側LCD12および上側LCD22の一方に表示させ、所定の処理によって生成した操作説明画面を下側LCD12および上側LCD22の他方に表示させる。
次に、ゲーム装置1で実行される画像処理プログラムによる具体的な処理動作を説明する前に、図3〜図8を参照して当該処理動作によって下側LCD12に表示される表示形態例等について説明する。なお、図3は、下側LCD12に表示される手書き文字Ihwの一例を示す図である。図4は、ユーザが手書き文字Ihwを全消去する操作をした場合に下側LCD12で表現される演出例の第1段階を示す図である。図5は、ユーザが手書き文字Ihwを全消去する操作をした場合に下側LCD12で表現される演出例の第2段階を示す図である。図6は、ユーザが手書き文字Ihwを全消去する操作をした場合に下側LCD12で表現される演出例の第3段階を示す図である。図7は、下側LCD12に表示される手書きスタンプIstの一例を示す図である。図8は、ユーザが手書きスタンプIstを全消去する操作をした場合に下側LCD12で表現される演出例を示す図である。
図3において、下側LCD12には、ユーザがタッチペン27を用いてタッチパネル13をタッチ操作した軌跡に沿って、手書き文字や手書きスタンプ(標号)等を描くことができる。例えば、下側LCD12には手書き線描画ボタンBhw、部分消去ボタンBpe、手書きスタンプ描画ボタンBst、および全消去ボタンBae等が表示されている。そして、ユーザが所望するボタンがタッチ操作によって選択されることによって、当該選択されたボタンに応じて全消去やタッチ操作に対する描画や部分消去が行われる。
図3では、ユーザが手書き線描画ボタンBhwを選択しており、タッチ操作の軌跡に沿った自由線が下側LCD12に描画される。したがって、ユーザが所望する文字を描くようにタッチパネル13をタッチ操作することによって、当該タッチ操作に応じた文字を下側LCD12に描画することができる。例えば、図3の例では、ユーザがタッチペン27を用いてタッチパネル13をタッチ操作した軌跡に沿って描かれる手書き文字Ihwが表示されている。具体的には、ユーザがタッチパネル13をタッチ操作して文字「hello」を手書き入力している一例を示しており、最後の文字「o」まで描かれた手書き文字Ihwが下側LCD12に表示されている。
図4において、手書き文字Ihwが下側LCD12に描画された後、ユーザが全消去ボタンBaeをタッチ操作する。この操作によって、タッチパネル13を介して手書き入力された画像(図4の例では、手書き文字Ihw)が下側LCD12から全て消去される。このとき、本実施例では、全消去の対象となっている手書き画像(手書き文字Ihw)が下側LCD12から消去されるまでの間に、当該手書き画像が分解されて分解された画像毎に所定の演出が施される。
例えば、図4に示した一例では、手書き文字Ihwが5つの手書き文字Ihw1〜Ihw5に分解され、それぞれが異なる方向に移動したり、異なる速度で移動したりしている。図4の例では、手書き文字Ihwが1文字ずつ分解されている。具体的には、手書き文字Ihwは、1文字目の文字「h」を示す手書き文字Ihw1、2文字目の文字「e」を示す手書き文字Ihw2、3文字目の文字「l」を示す手書き文字Ihw3、4文字目の文字「l」を示す手書き文字Ihw4、および5文字目の文字「o」を示す手書き文字Ihw5にそれぞれ分解される。
分解された手書き文字Ihw1〜Ihw5は、やがて下側LCD12の下方に自由落下するようにそれぞれ移動する(図5)。そして、手書き文字Ihw1〜Ihw5は、それぞれ下側LCD12の表示領域外まで移動することによって下側LCD12から全て消去される(図6)。
図7では、ユーザが手書きスタンプ描画ボタンBstを選択しており、スタンプ群(標号群)がタッチ操作の軌跡に沿って下側LCD12に描画される。例えば、図7の例では、ユーザがタッチペン27を用いてタッチパネル13をタッチ操作した軌跡に沿って描かれる手書きスタンプIstが表示されている。具体的には、ユーザがタッチパネル13をタッチ操作して2つの葉型画像を一対としたスタンプを手書き入力している一例を示している。そして、ユーザがタッチ操作した軌跡に沿った所定時間間隔毎または所定距離間隔毎に、上記一対のスタンプが下側LCD12に順次追加されて描画され、結果的にタッチ操作した軌跡に沿ったスタンプ群が手書きスタンプIstとして下側LCD12に表示される。
図8において、手書きスタンプIstが下側LCD12に描画された後、ユーザが全消去ボタンBaeをタッチ操作する。この操作によって、タッチパネル13を介して手書き入力された画像(図8の例では、手書きスタンプIst)が下側LCD12から全て消去される。この場合も、本実施例では、全消去の対象となっている手書き画像(手書きスタンプIst)が下側LCD12から消去されるまでの間に、当該手書き画像が分解されて分解された画像毎に所定の演出が施される。
例えば、図8に示した一例では、手書きスタンプIstがn個の手書きスタンプIstnに分解され、それぞれが異なる方向に移動したり、異なる速度で移動したりしている。図8の例では、スタンプ群として描画されていた手書きスタンプIstが、2つの葉型画像を一対としたスタンプ毎に分解されると共に、一対のスタンプもさらに葉型画像毎に分解される。
分解された手書きスタンプIstnも、やがて下側LCD12の下方に自由落下するようにそれぞれ移動する。そして、手書きスタンプIstnは、それぞれ下側LCD12の表示領域外まで移動することによって下側LCD12から全て消去される。
なお、下側LCD12の背景画像には、内側カメラ23または外側カメラ25によって撮像されたリアルタイムの画像(撮像画像)を表示してもかまわない。この場合、上述した手書き画像(手書き文字Ihw、手書きスタンプIst)は、上記撮像画像の上に描画されることになる。つまり、ユーザは、内側カメラ23または外側カメラ25によって撮像された撮像画像に、ユーザが所望する手書き画像を加えるような操作(落書き)が可能となる。
次に、図9〜図16を参照して、ゲーム装置1で実行される画像処理プログラムによる具体的な処理動作について説明する。なお、図9は、画像処理プログラムを実行することに応じて、メインメモリ32に記憶される各種データの一例を示す図である。図10は、メインメモリ32に記憶されるブロックデータDbの一例を示す図である。図11は、当該画像処理プログラムを実行することによってゲーム装置1が画像処理を行うフローチャートである。図12は、図11のステップ56で行われる画像分解処理の詳細な動作を示すサブルーチンである。図13は、図12のステップ81等で行われる右側ブロック確認処理の詳細な動作を示すサブルーチンである。図14は、図12のステップ82等で行われる上側ブロック確認処理の詳細な動作を示すサブルーチンである。図15は、図12のステップ83等で行われる左側ブロック確認処理の詳細な動作を示すサブルーチンである。図16は、図12のステップ84等で行われる下側ブロック確認処理の詳細な動作を示すサブルーチンである。なお、これらの処理を実行するためのプログラムは、ゲーム装置1に内蔵されるメモリ(例えば、保存用データメモリ34)やメモリカード28またはメモリカード29に含まれており、ゲーム装置1の電源がオンになったときに、メモリカードI/F36を介してメモリカード28やメモリカード29から、または内蔵メモリからメインメモリ32に読み出されて、CPU31によって実行される。
図9において、メインメモリ32には、内蔵メモリ、メモリカード28、またはメモリカード29から読み出されたプログラムや画像処理において生成される一時的なデータが記憶される。図9において、メインメモリ32のデータ記憶領域には、操作データDa、ブロックデータDb、ブロック移動データDc、および画像データDd等が格納される。また、メインメモリ32のプログラム記憶領域には、画像処理プログラムを構成する各種プログラム群Paが記憶される。
操作データDaは、ユーザがゲーム装置1を操作しているデータが格納される。操作データDaは、タッチパネル13をユーザがタッチしている画面座標系のタッチ位置を示すタッチ座標のデータを含んでいる。例えば、タッチ座標は、ゲーム装置1がゲーム処理する時間単位(例えば、1/60秒)毎に取得され、当該取得に応じて操作データDaに格納されて更新される。
ブロックデータDbは、上述した手書き画像を表示する表示画面を複数の領域に区分したブロック毎のデータが格納される。図10に示すように、ブロックデータDbは、上記ブロック毎に、ブロック番号Bn、画像有無フラグ、グループ番号Gn、および接続フラグをそれぞれ示すデータが格納される。ブロック番号Bnは、上記ブロック毎にそれぞれ付番される番号である。画像有無フラグは、上記ブロック毎に手書き画像の少なくとも一部が含まれているか否かを示すデータである。グループ番号Gnは、手書き画像の分割処理によって区分されるグループ毎にそれぞれ付番される番号である。接続フラグは、処理対象となっているブロックを基準として、当該ブロックと隣接するブロックとが手書き画像によって接続されているか否かを示すデータである。例えば、接続フラグは、隣接する右側のブロックと接続されているか否かを示すフラグ、隣接する上側のブロックと接続されているか否かを示すフラグ、隣接する左側のブロックと接続されているか否かを示すフラグ、および隣接する下側のブロックと接続されているか否かを示すフラグを含んでいる。
図9に戻り、ブロック移動データDcは、上記ブロック毎に設定され、当該ブロックが仮想世界を移動するためのデータ(移動方向、移動速度等)が格納される。画像データDdは、上述した手書き画像や操作ボタン画像等をゲーム装置1に表示するための画像データが格納される。
次に、図11を参照して、ゲーム装置1の動作について説明する。まず、ゲーム装置1の電源(電源ボタン14F)がONされると、CPU31によってブートプログラム(図示せず)が実行され、これにより内蔵メモリまたはメモリカード28やメモリカード29に格納されている画像処理プログラムがメインメモリ32にロードされる。そして、当該ロードされた画像処理プログラムがCPU31で実行されることによって、図11に示すステップ(図11〜図16では「S」と略称する)が実行される。
図9において、CPU31は、画像処理の初期設定を行って(ステップ51)、処理を次のステップに進める。例えば、CPU31がステップ51で行う初期設定として、メインメモリ32に格納されている各パラメータを所定の数値に初期化する。例えば、ブロックデータDbに格納されている画像有無フラグおよび接続フラグを全てオフ(OFF)に設定し、グループ番号Gnを全て「0」に設定する。
次に、CPU31は、ユーザが操作ボタン14やタッチパネル13を操作することによって出力される操作データを取得して操作データDaを更新し(ステップ52)、処理を次のステップに進める。例えば、CPU31は、タッチパネル13をタッチしている画面座標系のタッチ位置を示すタッチ座標を取得して、操作データDaに記憶されたタッチ座標を更新する。
次に、CPU31は、上記ステップ52で取得した操作データが、ユーザによる手書き入力を示すデータか否か(ステップ53)、全消去を示すデータか否か(ステップ55)をそれぞれ判断する。例えば、CPU31は、上記操作データが、手書き線描画ボタンBhwや手書きスタンプ描画ボタンBst(図3等参照)を選択した後のタッチ操作を示すデータである場合、手書き入力を示すデータであると判断して(ステップ53でYes)、次のステップ54に処理を進める。また、CPU31は、上記操作データが、全消去ボタンBaeを選択するデータである場合、全消去を示すデータであると判断して(ステップ55でYes)、次のステップ56に処理を進める。一方、CPU31は、上記操作データが、手書き入力や全消去を示すデータでない場合(ステップ53およびステップ55が何れもNo)、次のステップ59に処理を進める。
ステップ54において、CPU31は、上記ステップ52で取得した操作データ(タッチ座標データ)に応じて、手書き画像を生成して下側LCD12に描画し、次のステップ60に処理を進める。
例えば、CPUコア31は、上記ステップ52で取得されたタッチ座標に応じた仮想世界における位置を算出する。ここで、上記位置は、タッチ座標を仮想世界に透視変換することによって得られる。一例として、上記位置は、タッチ座標と重なって下側LCD12に表示される仮想世界の2次元平面上の位置を算出することによって得られる。そして、CPU31は、手書き線描画ボタンBhwが選択され、かつ、前回の処理で上記位置が算出されている場合、前回の処理で算出された上記位置から今回の処理で算出された上記位置まで所定の太さの線で結ぶ線分を生成して下側LCD12に表示する。また、CPU31は、手書きスタンプ描画ボタンBstが選択され、かつ、前回の処理で上記位置が算出されている場合、下側LCD12に表示された最後のスタンプの位置から今回の処理で算出された上記位置までの仮想世界における距離が閾値に到達していれば、新たなスタンプ(例えば、2つの葉型画像を一対としたスタンプ)を今回の処理で算出された上記位置に表示する。なお、CPU31は、手書きスタンプ描画ボタンBstが選択され、かつ、前回の処理で上記位置が算出されている場合、最後のスタンプが下側LCD12に表示されてからの時間が閾値以上経過しているときに、新たなスタンプを今回の処理で算出された上記位置に表示してもかまわない。また、CPU31は、手書きスタンプ描画ボタンBstが選択され、かつ、前回の処理で上記位置が算出されている場合、下側LCD12に表示された最後のスタンプの位置から今回の処理で算出された上記位置までの仮想世界における変位量(すなわち、タッチ座標が変位した累計)の累計が閾値に到達していれば、新たなスタンプを今回の処理で算出された上記位置に表示してもかまわない。また、CPU31は、既に表示された自由線またはスタンプ上に新たな手書き入力が行われた場合、後からの入力に応じて生成された自由線またはスタンプを、既に表示された自由線またはスタンプに重畳して表示する。
一方、全消去操作が行われた場合(ステップ55でYes)、CPU31は、画像分解処理を行って(ステップ56)、次のステップに処理を進める。以下、図12を参照して、画像分解処理の詳細な動作について説明する。
図12において、CPU31は、下側LCD12に表示される表示画面DAを複数のブロックに分割して(ステップ71)、ブロック毎に手書き画像が含まれているか否かを選別し(ステップ72)、次のステップ73に処理を進める。
例えば、図17に示すように、表示画面DAは、横m個×縦n個のブロックで格子状に分割される。好ましくは、各ブロックの大きさは同じであり、例えばブロックがそれぞれ横8画素×縦8画素のサイズで設定される。そして、CPU31は、ブロック毎にブロック番号Bnを付与する。図17に示すブロック内の数値は、付与されたブロック番号Bnの一例を示しており、左上のブロックから右へブロック番号Bnが1、2、3…と順次付与され、右下の最終ブロックのブロック番号Bnがm×n(最大値Bnmax)となる。
そして、CPU31は、ブロック毎に手書き画像の少なくとも一部が描画されているか否かを判定し、手書き画像が描画されていると判定されたブロックに対応する画像有無フラグ(図10参照)をそれぞれオン(ON)に設定する。例えば、ブロックに対応する横8画素×縦8画素に、上記手書き画像またはスタンプに含まれる画素が、少なくとも1つ以上存在する場合に、当該ブロックに入力画像の少なくとも一部が描画されていると判定し、ブロックに対応する画像有無フラグをオンに設定する。
ステップ73において、CPU31は、処理対象とするブロック番号iを1および処理対象とするグループ番号jを1にそれぞれ設定し、次のステップに処理を進める。
次に、CPU31は、現在処理対象となっているブロック番号iのブロックに手書き画像が描画されているか否かを判断する(ステップ74)。例えば、CPU31は、現在処理対象となっているブロック番号iに対応するブロックデータDbの画像有無フラグを参照し、当該画像有無フラグがオン(ON)である場合に手書き画像が描画されていると判断する。そして、CPU31は、現在処理対象となっているブロック番号iのブロックに手書き画像が描画されている場合、次のステップ75に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックに手書き画像が描画されていない場合、次のステップ86に処理を進める。
ステップ75において、CPU31は、現在処理対象となっているブロック番号iのブロックが、何れかのグループに設定されているか否かを判断する。例えば、CPU31は、現在処理対象となっているブロック番号iに対応するブロックデータDbのグループ番号Gnを参照し、当該グループ番号に0以外の数値が設定されている場合にグループ設定済であると判断する。そして、CPU31は、現在処理対象となっているブロック番号iのブロックがグループに設定されていない場合、次のステップ76に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックが既に何れかのグループに設定されている場合、次のステップ86に処理を進める。
ステップ76において、CPU31は、現在処理対象となっているブロック番号iのブロックを、現在処理対象となっているグループ番号jのグループに属するブロックに設定して、次のステップに処理を進める。例えば、CPU31は、現在処理対象となっているブロック番号iに対応するブロックデータDbのグループ番号に、現在処理対象となっているグループ番号jを記述してブロックデータDbを更新する。
次に、CPU31は、現在処理対象となっているブロック番号iのブロックの右端列画素に手書き画像が含まれるか否か(ステップ77)、上端行画素に手書き画像が含まれるか否か(ステップ78)、左端列画素に手書き画像が含まれるか否か(ステップ79)、および下端行画素に手書き画像が含まれるか否か(ステップ80)を、それぞれ順次判断する。
例えば、図18に示すように、ブロックAが現在の処理対象ブロックであるとする。このとき、ブロックAには、右側のブロック、上側のブロック、左側のブロック、および下側のブロックがそれぞれ隣接している。そして、CPU31は、ブロックAが手書き画像によってこれらの隣接ブロックと接続されているか否かを判断する。例えば、手書き文字「h」の一部は、ブロックAおよびブロックAの下側ブロックに描画されており、ブロックAと下側ブロックとを手書き文字「h」によって接続されていると判断する。一方、ブロックAと左側ブロック、上側ブロック、および右側ブロックとは、何れも共通する手書き文字が存在しないため、ブロックAとこれらのブロックとは、未接続であると判断する。
このようなブロック間の接続関係を判断するために、本実施例では処理対象となっているブロック番号iのブロックの最端画素における手書き画像の有無を判断基準としている。例えば、図19に示すように、処理対象ブロックと右側ブロックとの接続関係を考える場合、処理対象ブロックにおける最も右端となる右端列RAに配置されている画素(例えば、ブロックが横8画素×縦8画素のサイズの場合、右端列の8画素)に、手書き画像が含まれるか否かを判断する。そして、右端列RAの少なくとも一部に手書き画像が含まれる場合、処理対象ブロックと右側ブロックとが接続されていると判断する(判断基準A)。
なお、ブロック間の接続関係を判断するために、他の画素を用いてもかまわない。例えば、右側ブロックとの接続関係を判断する際、図19に示すように右端列RAの画素に加えて右側ブロックの最も左端に配置されている左端列LAの画素も用いて、ブロック間の接続関係を判断してもかまわない。具体的には、処理対象ブロックと右側ブロックとの接続関係を考える場合、処理対象ブロックの右端列RAに配置されている画素および右側ブロックの左端列LAに配置されている画素に対して、両者共に手書き画像が含まれる場合に処理対象ブロックと右側ブロックとが接続されていると判断する(判断基準B)。さらに、処理対象ブロックの右端列RAのうちの手書き画像が含まれている画素と、右側ブロックの左端列LAのうちの手書き画像が含まれている画素とが隣接している場合にのみ、処理対象ブロックと右側ブロックとが接続されていると判断してもかまわない(判断基準C)。この場合、処理対象ブロックの右端列RAの画素および右側ブロックの左端列LAの画素の何れにも手書き画像が含まれていても、両者間で手書き画像の画素に隣接しているものがなければ、処理対象ブロックと右側ブロックとが未接続であると判断される。
上述した判断基準A〜Cによるブロック間の接続関係の判断結果をまとめると、図20のようになる。例えば、図20に示すように、処理対象ブロックの右端列RAおよび右側ブロックの左端列LAに注目して、例1〜例3を考える。図20に示す例1のように、処理対象ブロックの右端列RAにのみに手書き画像(図20では塗りつぶし画素で示す)が含まれる場合、判断基準Aではブロック間が接続されていると判断されるが、判断基準BおよびCではブロック間が未接続であると判断される。また、図20に示す例2のように、処理対象ブロックの右端列RAおよび右側ブロックの左端列LA共に手書き画像が含まれるが、手書き画像の画素に両者間で隣接しているものがない場合、判断基準AおよびBではブロック間が接続されていると判断されるが、判断基準Cではブロック間が未接続であると判断される。さらに、図20に示す例3のように、処理対象ブロックの右端列RAおよび右側ブロックの左端列LA共に手書き画像が含まれ、かつ、手書き画像の画素に両者間で隣接しているものを含む場合、全ての判断基準A〜Cでブロック間が接続されていると判断される。このように、判断基準の設定によって判断結果が変化するため、処理負荷や後述する分解精度に応じて適切な判断基準を選択すればよい。本実施例においては、判断基準Aでブロック間の接続関係を判断する例を用いて説明する。
図12に戻り、CPU31は、現在処理対象となっているブロック番号iのブロックの右端列画素に手書き画像が含まれるか否かを判断する(ステップ77)。そして、CPU31は、現在処理対象となっているブロック番号iのブロックの右端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと右側ブロックとが接続されていると判断した場合(ステップ77でYes)、当該ブロック番号iの接続フラグ(右)(図10参照)をオン(ON)に設定して右側ブロック確認処理を行い(ステップ81)、次のステップ78に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックの右端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと右側ブロックとが接続されていないと判断した場合(ステップ77でNo)、そのまま次のステップ78に処理を進める。なお、右側ブロック確認処理の詳細な動作については後述する。
ステップ78において、CPU31は、現在処理対象となっているブロック番号iのブロックの上端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、現在処理対象となっているブロック番号iのブロックの上端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと上側ブロックとが接続されていると判断した場合(ステップ78でYes)、当該ブロック番号iの接続フラグ(上)をオン(ON)に設定して上側ブロック確認処理を行い(ステップ82)、次のステップ79に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックの上端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと上側ブロックとが接続されていないと判断した場合(ステップ78でNo)、そのまま次のステップ79に処理を進める。なお、上側ブロック確認処理の詳細な動作については後述する。
ステップ79において、CPU31は、現在処理対象となっているブロック番号iのブロックの左端列画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、現在処理対象となっているブロック番号iのブロックの左端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと左側ブロックとが接続されていると判断した場合(ステップ79でYes)、当該ブロック番号iの接続フラグ(左)をオン(ON)に設定して左側ブロック確認処理を行い(ステップ83)、次のステップ80に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックの左端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと左側ブロックとが接続されていないと判断した場合(ステップ79でNo)、そのまま次のステップ80に処理を進める。なお、左側ブロック確認処理の詳細な動作については後述する。
ステップ80において、CPU31は、現在処理対象となっているブロック番号iのブロックの下端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、現在処理対象となっているブロック番号iのブロックの下端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと下側ブロックとが接続されていると判断した場合(ステップ80でYes)、当該ブロック番号iの接続フラグ(下)をオン(ON)に設定して下側ブロック確認処理を行い(ステップ84)、次のステップ85に処理を進める。一方、CPU31は、現在処理対象となっているブロック番号iのブロックの下端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと下側ブロックとが接続されていないと判断した場合(ステップ80でNo)、そのまま次のステップ85に処理を進める。なお、下側ブロック確認処理の詳細な動作については後述する。
ステップ85において、CPU31は、現在処理対象としているグループ番号jに1を加算して、新たに処理対象のグループ番号jを設定し、次のステップ86に処理を進める。
ステップ86において、CPU31は、現在処理対象としているブロック番号iに1を加算して、新たに処理対象のブロック番号iを設定し、次のステップに処理を進める。
次に、CPU31は、現在処理対象としているブロック番号iがブロック番号の最大値Bnmaxより大きいか否かを判断する(ステップ87)。ここで、最大値Bnmaxは、上記ステップ71で表示画面DAをブロックに分割してブロック番号を付与した際の、ブロック番号最大値である。そして、CPU31は、現在処理対象としているブロック番号iがブロック番号の最大値Bnmax以下の場合、上記ステップ74に戻って処理を繰り返す。一方、CPU31は、現在処理対象としているブロック番号iがブロック番号の最大値Bnmaxより大きい場合、当該サブルーチンによる処理を終了して、ステップ57(図11)に処理を進める。
以下、図13を参照して、上記ステップ81や後述するステップ98、ステップ118、およびステップ158で行う右側ブロック確認処理について説明する。
図13において、CPU31は、現在処理対象となっているブロック(処理対象ブロック)の右側に隣接している右側ブロックを、新たな処理対象ブロックに設定し(ステップ91)、次のステップに処理を進める。例えば、図17に示すブロック番号m+2のブロックが処理対象ブロックとなっている場合、当該ブロックの右側に隣接しているブロック番号m+3のブロックが新たな処理対象ブロックに設定される。
次に、CPU31は、処理対象ブロックに手書き画像が描画されているか否かを判断する(ステップ92)。例えば、CPU31は、現在の処理対象ブロックに対応するブロックデータDbの画像有無フラグを参照し、当該画像有無フラグがオン(ON)である場合に手書き画像が描画されていると判断する。そして、CPU31は、処理対象ブロックに手書き画像が描画されている場合、次のステップ93に処理を進める。一方、CPU31は、処理対象ブロックに手書き画像が描画されていない場合、次のステップ101に処理を進める。
ステップ93において、CPU31は、処理対象ブロックが、何れかのグループに設定されているか否かを判断する。例えば、CPU31は、処理対象ブロックに対応するブロックデータDbのグループ番号Gnを参照し、当該グループ番号に0以外の数値が設定されている場合にグループ設定済であると判断する。そして、CPU31は、処理対象ブロックがグループに設定されていない場合、次のステップ94に処理を進める。一方、CPU31は、処理対象ブロックが既に何れかのグループに設定されている場合、次のステップ101に処理を進める。
ステップ94において、CPU31は、処理対象ブロックを、現在処理対象となっているグループ番号jのグループに属するブロックに設定して、次のステップに処理を進める。例えば、CPU31は、処理対象ブロックに対応するブロックデータDbのグループ番号に、現在処理対象となっているグループ番号jを記述してブロックデータDbを更新する。つまり、上記ステップ94の処理によって、処理対象ブロックは、当該右側ブロック確認処理を行う前に処理対象に設定されていたブロック(すなわち、処理対象ブロックから見て左側のブロック)と同じグループ番号のグループに属することになる。
次に、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれるか否かを判断する(ステップ95)。そして、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと右側ブロックとが接続されていると判断した場合(ステップ95でYes)、当該処理対象ブロックの接続フラグ(右)をオン(ON)に設定して上記ステップ91から右側ブロック確認処理を新たに開始し(ステップ98)、当該右側ブロック確認処理が終わった後にステップ96に処理を進める。一方、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと右側ブロックとが接続されていないと判断した場合(ステップ95でNo)、そのまま次のステップ96に処理を進める。
ステップ96において、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと上側ブロックとが接続されていると判断した場合(ステップ96でYes)、当該処理対象ブロックの接続フラグ(上)をオン(ON)に設定して上側ブロック確認処理を行い(ステップ99)、次のステップ97に処理を進める。一方、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと上側ブロックとが接続されていないと判断した場合(ステップ96でNo)、そのまま次のステップ97に処理を進める。
ステップ97において、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと下側ブロックとが接続されていると判断した場合(ステップ97でYes)、当該処理対象ブロックの接続フラグ(下)をオン(ON)に設定して下側ブロック確認処理を行い(ステップ100)、次のステップ101に処理を進める。一方、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと下側ブロックとが接続されていないと判断した場合(ステップ97でNo)、そのまま次のステップ101に処理を進める。
ステップ101において、CPU31は、処理対象ブロックの左側に隣接している左側ブロックを、新たな処理対象ブロックに設定し、当該サブルーチンによる処理を終了する。例えば、図17に示すブロック番号m+3のブロックが処理対象ブロックとなっている場合、当該ブロックの左側に隣接しているブロック番号m+2のブロックが新たな処理対象ブロックに設定される。
以下、図14を参照して、上記ステップ82および上記ステップ99や後述するステップ119およびステップ138で行う上側ブロック確認処理について説明する。
図14において、CPU31は、現在処理対象に設定されている処理対象ブロックの上側に隣接している上側ブロックを、新たな処理対象ブロックに設定し(ステップ111)、次のステップに処理を進める。例えば、図17に示すブロック番号m+2のブロックが処理対象ブロックとなっている場合、当該ブロックの上側に隣接しているブロック番号2のブロックが新たな処理対象ブロックに設定される。
次に、CPU31は、処理対象ブロックに手書き画像が描画されているか否かを判断する(ステップ112)。なお、ステップ112の動作例は、上記ステップ92と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックに手書き画像が描画されている場合、次のステップ113に処理を進める。一方、CPU31は、処理対象ブロックに手書き画像が描画されていない場合、次のステップ121に処理を進める。
ステップ113において、CPU31は、処理対象ブロックが、何れかのグループに設定されているか否かを判断する。なお、ステップ113の動作例は、上記ステップ93と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックがグループに設定されていない場合、次のステップ114に処理を進める。一方、CPU31は、処理対象ブロックが既に何れかのグループに設定されている場合、次のステップ121に処理を進める。
ステップ114において、CPU31は、処理対象ブロックを、現在処理対象となっているグループ番号jのグループに属するブロックに設定して、次のステップに処理を進める。なお、ステップ114の動作例は、上記ステップ94と同様であるため、詳細な説明を省略する。上記ステップ114の処理によって、処理対象ブロックは、当該上側ブロック確認処理を行う前に処理対象に設定されていたブロック(すなわち、処理対象ブロックから見て下側のブロック)と同じグループ番号のグループに属することになる。
次に、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれるか否かを判断する(ステップ115)。そして、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと右側ブロックとが接続されていると判断した場合(ステップ115でYes)、当該処理対象ブロックの接続フラグ(右)をオン(ON)に設定して上述した右側ブロック確認処理を行い(ステップ118)、次のステップ116に処理を進める。一方、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと右側ブロックとが接続されていないと判断した場合(ステップ115でNo)、そのまま次のステップ116に処理を進める。
ステップ116において、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと上側ブロックとが接続されていると判断した場合(ステップ116でYes)、当該処理対象ブロックの接続フラグ(上)をオン(ON)に設定して上記ステップ111から上側ブロック確認処理を新たに開始し(ステップ119)、当該上側ブロック確認処理が終わった後にステップ117に処理を進める。一方、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと上側ブロックとが接続されていないと判断した場合(ステップ116でNo)、そのまま次のステップ117に処理を進める。
ステップ117において、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと下側ブロックとが接続されていると判断した場合(ステップ117でYes)、当該処理対象ブロックの接続フラグ(下)をオン(ON)に設定して下側ブロック確認処理を行い(ステップ120)、次のステップ121に処理を進める。一方、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと下側ブロックとが接続されていないと判断した場合(ステップ117でNo)、そのまま次のステップ121に処理を進める。
ステップ121において、CPU31は、処理対象ブロックの下側に隣接している下側ブロックを、新たな処理対象ブロックに設定し、当該サブルーチンによる処理を終了する。例えば、図17に示すブロック番号2のブロックが処理対象ブロックとなっている場合、当該ブロックの下側に隣接しているブロック番号m+2のブロックが新たな処理対象ブロックに設定される。
以下、図15を参照して、上記ステップ83および上記ステップ120や後述するステップ139およびステップ159で行う左側ブロック確認処理について説明する。
図15において、CPU31は、現在処理対象に設定されている処理対象ブロックの左側に隣接している左側ブロックを、新たな処理対象ブロックに設定し(ステップ131)、次のステップに処理を進める。例えば、図17に示すブロック番号m+2のブロックが処理対象ブロックとなっている場合、当該ブロックの左側に隣接しているブロック番号m+1のブロックが新たな処理対象ブロックに設定される。
次に、CPU31は、処理対象ブロックに手書き画像が描画されているか否かを判断する(ステップ132)。なお、ステップ132の動作例は、上記ステップ92と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックに手書き画像が描画されている場合、次のステップ133に処理を進める。一方、CPU31は、処理対象ブロックに手書き画像が描画されていない場合、次のステップ141に処理を進める。
ステップ133において、CPU31は、処理対象ブロックが、何れかのグループに設定されているか否かを判断する。なお、ステップ133の動作例は、上記ステップ93と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックがグループに設定されていない場合、次のステップ134に処理を進める。一方、CPU31は、処理対象ブロックが既に何れかのグループに設定されている場合、次のステップ141に処理を進める。
ステップ134において、CPU31は、処理対象ブロックを、現在処理対象となっているグループ番号jのグループに属するブロックに設定して、次のステップに処理を進める。なお、ステップ134の動作例は、上記ステップ94と同様であるため、詳細な説明を省略する。上記ステップ134の処理によって、処理対象ブロックは、当該左側ブロック確認処理を行う前に処理対象に設定されていたブロック(すなわち、処理対象ブロックから見て右側のブロック)と同じグループ番号のグループに属することになる。
次に、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれるか否かを判断する(ステップ135)。そして、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと上側ブロックとが接続されていると判断した場合(ステップ135でYes)、当該処理対象ブロックの接続フラグ(上)をオン(ON)に設定して上述した上側ブロック確認処理を行い(ステップ138)、次のステップ136に処理を進める。一方、CPU31は、処理対象ブロックの上端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと上側ブロックとが接続されていないと判断した場合(ステップ135でNo)、そのまま次のステップ136に処理を進める。
ステップ136において、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと左側ブロックとが接続されていると判断した場合(ステップ136でYes)、当該処理対象ブロックの接続フラグ(左)をオン(ON)に設定して上記ステップ131から左側ブロック確認処理を新たに開始し(ステップ139)、当該左側ブロック確認処理が終わった後にステップ137に処理を進める。一方、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと左側ブロックとが接続されていないと判断した場合(ステップ136でNo)、そのまま次のステップ137に処理を進める。
ステップ137において、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと下側ブロックとが接続されていると判断した場合(ステップ137でYes)、当該処理対象ブロックの接続フラグ(下)をオン(ON)に設定して下側ブロック確認処理を行い(ステップ140)、次のステップ141に処理を進める。一方、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと下側ブロックとが接続されていないと判断した場合(ステップ137でNo)、そのまま次のステップ141に処理を進める。
ステップ141において、CPU31は、処理対象ブロックの右側に隣接している右側ブロックを、新たな処理対象ブロックに設定し、当該サブルーチンによる処理を終了する。例えば、図17に示すブロック番号m+1のブロックが処理対象ブロックとなっている場合、当該ブロックの右側に隣接しているブロック番号m+2のブロックが新たな処理対象ブロックに設定される。
以下、図16を参照して、上記ステップ84、上記ステップ100、および上記ステップ140や後述するステップ160で行う下側ブロック確認処理について説明する。
図16において、CPU31は、現在処理対象に設定されている処理対象ブロックの下側に隣接している下側ブロックを、新たな処理対象ブロックに設定し(ステップ151)、次のステップに処理を進める。例えば、図17に示すブロック番号m+2のブロックが処理対象ブロックとなっている場合、当該ブロックの下側に隣接しているブロック番号2m+2のブロックが新たな処理対象ブロックに設定される。
次に、CPU31は、処理対象ブロックに手書き画像が描画されているか否かを判断する(ステップ152)。なお、ステップ152の動作例は、上記ステップ92と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックに手書き画像が描画されている場合、次のステップ153に処理を進める。一方、CPU31は、処理対象ブロックに手書き画像が描画されていない場合、次のステップ161に処理を進める。
ステップ153において、CPU31は、処理対象ブロックが、何れかのグループに設定されているか否かを判断する。なお、ステップ153の動作例は、上記ステップ93と同様であるため、詳細な説明を省略する。そして、CPU31は、処理対象ブロックがグループに設定されていない場合、次のステップ154に処理を進める。一方、CPU31は、処理対象ブロックが既に何れかのグループに設定されている場合、次のステップ161に処理を進める。
ステップ154において、CPU31は、処理対象ブロックを、現在処理対象となっているグループ番号jのグループに属するブロックに設定して、次のステップに処理を進める。なお、ステップ154の動作例は、上記ステップ94と同様であるため、詳細な説明を省略する。上記ステップ154の処理によって、処理対象ブロックは、当該下側ブロック確認処理を行う前に処理対象に設定されていたブロック(すなわち、処理対象ブロックから見て上側のブロック)と同じグループ番号のグループに属することになる。
次に、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれるか否かを判断する(ステップ155)。そして、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと右側ブロックとが接続されていると判断した場合(ステップ155でYes)、当該処理対象ブロックの接続フラグ(右)をオン(ON)に設定して上述した右側ブロック確認処理を行い(ステップ158)、次のステップ156に処理を進める。一方、CPU31は、処理対象ブロックの右端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと右側ブロックとが接続されていないと判断した場合(ステップ155でNo)、そのまま次のステップ156に処理を進める。
ステップ156において、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれる場合、すなわち処理対象ブロックと左側ブロックとが接続されていると判断した場合(ステップ156でYes)、当該処理対象ブロックの接続フラグ(左)をオン(ON)に設定して上述した左側ブロック確認処理を行い(ステップ159)、次のステップ157に処理を進める。一方、CPU31は、処理対象ブロックの左端列画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと左側ブロックとが接続されていないと判断した場合(ステップ156でNo)、そのまま次のステップ157に処理を進める。
ステップ157において、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれるか否かを判断する。そして、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれる場合、すなわち処理対象ブロックと下側ブロックとが接続されていると判断した場合(ステップ157でYes)、当該処理対象ブロックの接続フラグ(下)をオン(ON)に設定して上記ステップ151から下側ブロック確認処理を新たに開始し(ステップ160)、当該下側ブロック確認処理が終わった後にステップ161に処理を進める。一方、CPU31は、処理対象ブロックの下端行画素に手書き画像が含まれていない場合、すなわち処理対象ブロックと下側ブロックとが接続されていないと判断した場合(ステップ157でNo)、そのまま次のステップ161に処理を進める。
ステップ161において、CPU31は、処理対象ブロックの上側に隣接している上側ブロックを、新たな処理対象ブロックに設定し、当該サブルーチンによる処理を終了する。例えば、図17に示すブロック番号2m+2のブロックが処理対象ブロックとなっている場合、当該ブロックの上側に隣接しているブロック番号m+2のブロックが新たな処理対象ブロックに設定される。
図21を用いて、上述した画像分解処理によって手書き画像が分解される例を説明する。なお、図21において、A〜Cはブロック番号を示し、矢印内の数値はブロック間の接続関係を判断した順番を示し、矢印内の記号はその判断結果を示している。
図21において、ブロック番号Aのブロック(以下、ブロックAと記載する)が処理対象となって、上記ステップ74〜ステップ87(図12参照)の処理が行われる場合を考える。ブロックAは、手書き文字「h」の一部を含んでいるため、何れかのグループ(例えば、グループ番号1のグループ;以下グループ1と記載する)に設定される(ステップ74〜ステップ76)。
ブロックAに隣接する左右および上側ブロックに注目すると、これらのブロックとブロックAとは共通する手書き画像を含んでいないため、ブロックAと左右および上側ブロックとの間は未接続(×1〜×3)であると判断される(ステップ77〜ステップ79)。一方、ブロックAに隣接する下側ブロック(ブロックB)に注目すると、ブロックBはブロックAと同じ手書き文字「h」の一部を含んでいるため、ブロックAとブロックBとの間は接続(○4)されていると判断される(ステップ80)。そして、ブロックBを処理対象ブロックとした確認処理(下側ブロック確認処理;ステップ84)が実行される。当該確認処理によって、ブロックBは、手書き文字「h」の一部を含んでいるため、ブロックAと同じグループ1に設定される(ステップ151〜ステップ154)。
次に、ブロックBに隣接する右側ブロック(ブロックC)に注目すると、ブロックCもブロックAおよびBと同じ手書き文字「h」の一部を含んでいるため、ブロックBとブロックCとの間は接続(○5)されていると判断される(ステップ155)。そして、ブロックCを処理対象ブロックとした確認処理(右側ブロック確認処理;ステップ158)が実行される。当該確認処理によって、ブロックCは、手書き文字「h」の一部を含んでいるため、ブロックAおよびBと同じグループ1に設定される(ステップ91〜ステップ94)。
次に、ブロックCに隣接する右および上下側ブロックに注目すると、これらのブロックとブロックCとは共通する手書き画像を含んでいないため、ブロックCと右および上下側ブロックとの間は未接続(×6〜×8)であると判断される(ステップ95〜ステップ97)。そして、ブロックCを処理対象ブロックとした確認処理(右側ブロック確認処理;ステップ158)が終了し、ブロックBを処理対象ブロックとした確認処理(ステップ156)に戻る。
次に、ブロックBに隣接する左および下側ブロックに注目すると、これらのブロックとブロックBとは共通する手書き画像を含んでいないため、ブロックBと左および下側ブロックとの間は未接続(×9および×10)であると判断される(ステップ156およびステップ157)。そして、ブロックBを処理対象ブロックとした確認処理(下側ブロック確認処理;ステップ84)が終了し、ブロックAを処理対象ブロックとした確認処理(ステップ85)に戻る。
このように、上述した画像分解処理では、ブロックの接続判定処理をブロック各辺に対して行い、接続判定された他のブロックにおいても同様の接続判定処理を再帰的に行うことによって、手書き画像が連続している範囲を判定している。例えば、図21に示すように、このような接続判定処理によって、手書き文字「h」が連続している範囲がブロックA〜ブロックBであることが判定され、当該ブロックA〜ブロックCが同じグループに設定される。そして、同様の画像分解処理を繰り返すことによって、手書き文字は、連続している部分毎で異なるグループに設定されていく。これは、手書き文字に限らず、手書きスタンプや自由線等でも同様であり、手書き画像が連続している部分毎に異なるグループに設定されていくことになる。
図11に戻り、上記ステップ56の画像分解処理の後、CPU31は、演出表示処理を行い(ステップ57)、次のステップに処理を進める。以下、図22を参照して、上記ステップ57で行う演出表示処理について説明する。
図22において、下側LCD12に表示される画面は、複数のレイヤーによって構成されている。具体的には、上記画面は、内側カメラ23または外側カメラ25によって撮像されたリアルタイムの画像(撮像画像)やゲーム装置1やメモリカード28に画像データとして記憶された画像(撮影画像)等を載せて表示するライブレイヤーLlive、上述した手書き画像を載せて表示するペイントレイヤーLpaint、および画面上を移動するオブジェクト等を載せて表示する3DテクスチャーレイヤーL3D等によって構成されている。
タッチパネル13を介して、ユーザが手書き文字や手書きスタンプ等を入力した場合、当該入力に応じた手書き画像がペイントレイヤーLpaintに載せられる(図22上段図)。その後、ユーザが全消去操作を行った場合、ペイントレイヤーLpaint上の表示画像のうち、上記画像分解処理によって分類されたグループに属するブロック(具体的には、1以上のグループ番号Gnが設定されたブロック)のみが3DテクスチャーレイヤーL3D上にコピーされて、ペイントレイヤーLpaintに載せられた手書き画像が全て消去される(図22下段図)。
上記演出表示処理においては、3DテクスチャーレイヤーL3Dに載せられた各ブロックに対してそれぞれ所定の初速度が与えられ、ブロック移動データDcに記述される。このとき、各グループに与えられる移動速度および移動方向がランダムに決められ、同じグループ番号Gnのグループに属するブロックについては、同じ移動速度および同じ移動方向の初速度がそれぞれ与えられる。
例えば、図23Aの左図に示すように、ブロックA〜Cが同じグループに属する場合、ブロックA〜Cそれぞれの中心位置Pba〜Pbcに対して同じ移動ベクトルVba〜Vbcがそれぞれ与えられるため、ブロックA〜Cに対して同じ移動速度および同じ移動方向の初速度がそれぞれ与えられることになる。そして、CPU31は、ブロック移動データDcに記述された各ブロックの移動データ(移動速度、移動方向)に応じて、3DテクスチャーレイヤーL3D上で各ブロックをそれぞれに記述された手書き画像と共に移動させる。その後、各ブロックが所定方向(例えば、下側LCD12の下方向)に自由落下するように、処理単位時間毎に各ブロックに対して加速度が与えられて、ブロック移動データDcが更新されていく。
このように、各ブロックに対して移動速度を与えることによって、各ブロックに記述された手書き画像を移動させて下側LCD12に表示することができる。ここで、同じグループに属するブロックについては、同じ移動速度および同じ移動方向が常に与えられ、異なるグループ間では異なる移動速度や異なる移動方向が与えられるため、ブロックがグループ毎に一体となって移動することになり、あたかもグループ単位に分割された手書き画像(手書き文字Ihw1)がその分割単位で移動するように表現される(図23Aの右図参照)。そして、各ブロックには所定方向の加速度が作用しているため、各ブロックは、やがて下側LCD12の表示範囲外まで移動し、各ブロックに記述された手書き画像が下側LCD12から消去されることになる(図3〜図6参照)。
なお、上述した説明では、各ブロックが所定方向に自由落下するように、各ブロックに対して加速度が与えられる例を用いたが、当該加速度が与えられなくてもかまわない。この場合、各ブロックに与えられた初速度によって各ブロックが移動することになるため、グループ単位に分割された手書き画像が四方八方に飛び散って移動するように表現される。
図11に戻り、上記ステップ57の演出表示処理の後、CPU31は、当該演出表示処理が終了したか否かを判断する(ステップ58)。そして、CPU31は、上記演出表示処理が終了していない場合、上記ステップ57の処理を継続する。一方、CPU31は、上記演出表示処理が終了した場合、次のステップ60に処理を進める。
一方、上記ステップ52で取得した操作データが、手書き入力や全消去を示すデータでない場合(ステップ53およびステップ55が何れもNo)、CPU31は、当該操作データに応じたその他の処理を行い(ステップ59)、次のステップ60に処理を進める。
ステップ60において、CPU31は、画像処理を終了するか否かを判断する。画像処理を終了する条件としては、例えば、画像処理が終了する条件が満たされたことや、ユーザが画像処理を終了する操作を行ったこと等がある。CPU31は、画像処理を終了しない場合に上記ステップ52に戻って処理を繰り返し、画像処理を終了する場合に当該フローチャートによる処理を終了する。
このように、本実施形態に係るゲーム装置1は、ユーザ操作による手書き入力によって表示された手書き画像を、ユーザ操作によって全消去する際、手書き画像が分解され、当該分解されたグループ毎に異なる移動をする。したがって、ユーザが手書き入力によって落書きしてその落書きを消すような全消去操作に対して、新たな演出効果が加えられるため、ユーザにとって面白みを感じる操作となる。
なお、上述した手書き画像の分解処理は、ユーザが手書き入力した画像に対して連続している部分毎にグループに分解しているが、他の態様で画像を分解してもかまわない。例えば、全消去の対象となる画像の色毎に分解したり、全消去の対象となる画像を入力したユーザの入力ストローク(例えば、タッチパネル13がタッチオンされてからタッチオフされるまでの間に入力された自由線)毎に分解したり、全消去の対象となる画像のエッジを抽出して当該エッジで分解したり、表示画面を予め設定された形状(例えば、所定形状の網の目状)に分割して全消去の対象となる画像を当該形状で分解したりしてもかまわない。ユーザの入力ストローク毎に分解する場合、ユーザが手書き入力した履歴(例えば、タッチパネル13に入力したタッチ位置の履歴)を記憶しておけば、手書き画像を入力ストローク毎に分解することが可能となる。
また、上述した手書き画像の分解処理は、当該手書き画像を所定の分割領域(ブロック)に分割し、当該分割領域を当該手書き画像に基づいてグループ化しているため、分解処理の処理負荷が軽減される効果がある。しかしながら、このような効果を期待しない場合、他の方式で手書き画像を分解してもかまわない。例えば、手書き画像を示す画素群に対して、互いに隣接している画素を同じグループに設定するようにそれぞれの画素をグループ化してもかまわない。
また、上述した実施形態では、ユーザ操作による手書き入力によって表示された手書き文字、手書き線、手書きスタンプ等の手書き画像を全消去操作の対象としたが、他の画像を本発明の全消去操作の対象としてもかまわない。例えば、ユーザが内側カメラ23または外側カメラ25によって取り込んだ画像データに基づいた撮像画像や、撮像画像を所定の記憶媒体に一旦記憶した画像データに基づいた撮影画像等、ゲーム装置1の下側LCD12および/または上側LCD22に表示可能な画像を上記全消去対象としてもかまわない。具体的には、ユーザは、ゲーム装置1の操作ボタン14Gまたは操作ボタン14Hを押下することによって、内側カメラ23または外側カメラ25を用いた撮影指示を行うことができる。そして、上記撮影処理によって、内側カメラ23または外側カメラ25で撮像されている画像を、保存用データメモリ34やメモリカード28に記憶(保存)することができる。このような撮影処理によって得られた画像やリアルタイムに撮像されている画像を、CPU31が上記分解処理の対象画像として用いればよい。この場合、上述した色毎に対象画像を分解したり、エッジ抽出によって対象画像をエッジで分解したり、予め設定された形状で対称画像を分解したりすることによって、上記手書き画像と同様の全消去処理時の演出が可能となる。
また、上述した演出表示処理では、分解された手書き画像を異なる方向へそれぞれ移動させて消去する演出例を用いたが、分解された画像単位で当該画像が移動したり表示角度が変化したり変形したりする他のアニメーション演出処理を行ってもかまわない。例えば、分解された手書き画像を、それぞれ回転移動させて消去したり、それぞれ縮小して消去したり、それぞれ拡大させながら透明度を変化させて消去したりしてもかまわない。
ここで、上述した演出表示処理では、図23Aに示したように同じグループに属するブロックそれぞれに対して同じ移動ベクトルを与えることによって、当該グループを一体的に移動している。しかしながら、上述したように当該グループを回転させる場合は、当該グループに属するブロックそれぞれに異なる移動ベクトルを与えることになる。
例えば、図23Bに示すように、ブロックA〜Cが同じグループに属し、ブロックA〜Cを一体的に回転させる場合を想定する。この場合、ブロックA〜Cの重心Pg1からブロックA〜Cそれぞれの中心位置Pba〜Pbcまでの距離に応じて、重心Pg1を中心にそれぞれのブロックA〜Cを同じ回転方向へ移動させる移動ベクトルVra〜Vrcを算出する。そして、重心Pg1を中心にブロックA〜Cがそれぞれ移動した移動角度θだけ、中心位置Pba〜Pbcを中心にブロックA〜Cを角度θ回転させる。これによって、グループ単位に分割された手書き画像(手書き文字Ihw1)がその分割単位で回転するように表現される(図23Bの右図参照)。このような回転のための移動ベクトルVra〜Vrcに、上述した移動のための移動ベクトルVba〜Vbcを加えることによって、表示画面内を分割された手書き画像が回転しながら移動するような演出表示も可能となることは言うまでもない。
また、上述した画像処理では、ユーザが全消去操作を行った場合に分割された手書き画像がそれぞれ演出表示される例を用いたが、ユーザが部分消去操作を行った場合にも同様の演出表示を行ってもかまわない。例えば、ユーザが消去する範囲を指定する操作を行った場合、当該範囲内に含まれるブロックにのみ上述した画像分解処理を行って演出表示処理を行い、当該範囲外のブロックに記述された手書き画像をペイントレイヤーLpaint(図22参照)に載せたままに保持すれば、部分消去であっても本発明を適用することが可能となる。
また、上述した演出表示処理では、ユーザが行う全消去操作に応じて、分割された手書き画像がそれぞれ下側LCD12の表示範囲外まで移動し、各手書き画像が下側LCD12から消去される例を示したが、本発明は各手書き画像の表示位置または表示態様がそれぞれ変更されれば表示画面から消去されなくても適用可能である。ここで、分解された手書き画像の表示態様を変更するとは、分解された手書き画像毎に形状(拡大、縮小等)を変化させる、分解された手書き画像毎に表示方向を変化(回転)させる、分解された手書き画像毎に色を変化させる、分解された手書き画像毎に点滅させる、分解された手書き画像毎に透明度を変化させる等の処理を含んでいる。例えば、ユーザが行う全消去操作に応じて、分割された手書き画像がそれぞれ下側LCD12の所定位置で重なり合って集合するように各手書き画像が移動するようにしてもかまわない。また、ユーザが行う所定操作(この場合、全消去操作でなくてもよい)に応じて、分割された手書き画像がそれぞれ下側LCD12内を浮遊して移動するように各手書き画像が移動するようにしてもかまわない。さらに、ユーザが行う所定操作(この場合、全消去操作でなくてもよい)に応じて、分割された手書き画像をそれぞれ異なる色に変化させたり、それぞれ異なるタイミングで点滅させたりして、下側LCD12に表示してもかまわない。
また、図22を用いて説明したように、ユーザが手書き文字や手書きスタンプ等を入力した場合、当該入力に応じた手書き画像がペイントレイヤーLpaintに載せられる例を用いたが、手書き画像を他のレイヤーに載せて表示してもかまわない。例えば、ユーザが手書き文字や手書きスタンプ等を入力した場合、当該入力に応じた手書き画像を3DテクスチャーレイヤーL3Dに載せて当該手書き画像を表示してもかまわない。
また、上述した実施形態では、2画面分の液晶表示部の一例として、物理的に分離された下側LCD12および上側LCD22を互いに上下に配置した場合(上下2画面の場合)を説明した。しかしながら、2画面分の表示画面の構成は、他の構成でもかまわない。例えば、下側ハウジング11の一方主面に下側LCD12および上側LCD22を左右に配置してもかまわない。また、下側LCD12と横幅が同じで縦の長さが2倍のサイズからなる縦長サイズのLCD(すなわち、物理的には1つで、表示サイズが縦に2画面分あるLCD)を下側ハウジング11の一方主面に配設して、2つの画像(例えば、撮像画像と操作説明画面を示す画像等)を上下に表示(すなわち上下の境界部分無しに隣接して表示)するように構成してもよい。また、下側LCD12と縦幅が同じで横の長さが2倍のサイズからなる横長サイズのLCDを下側ハウジング11の一方主面に配設して、横方向に2つの画像を左右に表示(すなわち左右の境界部分無しに隣接して表示)するように構成してもよい。すなわち、物理的に1つの画面を2つに分割して使用することにより2つの画像を表示してもかまわない。いずれの画像の形態に対しても、上述した下側LCD12に表示していたまた、物理的に1つの画面を2つに分割して使用することにより上記2つの画像を表示する場合、当該画面全面にタッチパネル13を配設してもかまわない。
また、上述した実施例では、ゲーム装置1にタッチパネル13が一体的に設けられているが、ゲーム装置とタッチパネルとを別体にして構成しても、本発明を実現できることは言うまでもない。また、上側LCD22の上面にタッチパネル13を設けて上側LCD22に上述した下側LCD12に表示していた表示画像を表示しても良い。さらに、上記実施例では表示画面を2つ(下側LCD12、上側LCD22)を設けたが、表示画面は1つであってもかまわない。すなわち、上記実施例において、上側LCD22を設けず単に下側LCD12のみを表示画面としてタッチパネル13を設けるように構成してもよい。また、上記実施例において、下側LCD12を設けずに上側LCD22の上面にタッチパネル13を設けて、上述した下側LCD12に表示していた表示画像を上側LCD22に表示しても良い。
また、上記実施例では、座標入力を実現するゲーム装置1の入力手段としてタッチパネル13を用いたが、他のポインティングデバイスを用いてもかまわない。ここで、ポインティングデバイスは、画面上での入力位置や座標を指定する入力装置であり、例えば、マウス、トラックパッド、トラックボール、ペンタブレット、ジョイスティック等を入力手段として使用し、入力手段から出力される出力値から計算された画面座標系の位置情報を用いれば、本発明を同様に実現することができる。
また、ゲームコントローラをプレイヤが把持してゲームを楽しむ据置型のゲーム装置の場合、他の態様のポインティングデバイスも考えられる。例えば、ゲームコントローラのハウジングに固設されたカメラを、上記ポインティングデバイスとして利用することも可能である。この場合、ゲームコントローラのハウジングで指し示した位置の変化に応じてカメラが撮像する撮像画像が変化する。したがって、この撮像画像を解析することにより、表示画面に対して上記ハウジングで指し示した座標を算出することができる。
この場合、上記ハウジングで指し示した位置を示す座標を、上述した処理におけるタッチ座標として取り扱えば本発明を実現することが可能である。ただし、タッチパネル入力におけるタッチオンまたはタッチオフ等の入力有無判定については、上記座標入力とは異なった上記ゲームコントローラからの他の入力の有無や変化によって代用する。第1の例として、上記ゲームコントローラに設けられた操作ボタンの押下(例えば、Aボタンを押下しているときタッチオン)しているか否かによって、上記タッチオンまたはタッチオフの判定を代用する。第2の例では、上記ゲームコントローラが2つのハウジングで構成されている。そして、これら2つのハウジングは、上記カメラが搭載されている一方ハウジングと、他方のハウジングの動きに応じた信号を出力する加速度センサ等の検出部が固設された当該他方のハウジングとで構成される。この場合、他方のハウジングの動き(例えば、ハウジングを所定方向に傾けているときにタッチオン)に応じて、上記タッチオンまたはタッチオフの判定を代用する。第3の例では、上記ゲームコントローラのハウジングにマイク等の音声入力手段が設けられている。この場合、プレイヤが所定の音声を発したときにタッチオンおよびタッチオフが切り替わる判定で代用する。
また、上記実施例では、携帯型のゲーム装置1や据置型のゲーム装置を用いて説明したが、一般的なパーソナルコンピュータ等の情報処理装置で本発明の画像処理プログラムを実行して、本発明を実現してもかまわない。
また、上述したゲーム装置1の形状や、それに設けられている各種操作ボタン14やタッチパネル13の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した画像処理で用いられる処理順序等は、単なる一例に過ぎず他の順序であっても、本発明を実現できることは言うまでもない。例えば、上述した処理順序では、ブロック間の接続関係を判定する順序が右側ブロック、上側ブロック、左側ブロック、下側ブロックの順になっているが、他の順序でブロック間の接続関係を判定してもかまわない。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。