以下に、図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。ただし、この実施の形態に記載されている構成要素の相対配置、表示画面等は、特に特定的な記載がない限りは、この発明の範囲をそれらのみに限定する趣旨のものではない。
図1は、本実施形態の画像処理装置を示すブロック図である。100は、画像処理装置の一例であるMFP(多機能周辺機器)である。MFP100は、スキャニング機能、プリンティング機能、及びカードダイレクト機能を有する。
CPU101は、MFP100のシステム制御部であり、MFP100の全体を制御する。ROM102は、MFPのシステム制御プログラムを格納するものである。DRAM103は、画像データや制御プログラムが一時的に格納されるメモリである。CPU101は、ROM102に格納されている制御プログラムをDRAM103上で実行することにより、MFP100に関する各種の動作を制御する。このようなCPU101の制御プログラムは、ROM102に格納されているものに限らず、CD−ROM等による外部の記憶媒体に記憶されているものでもよい。
プリンタエンジン104は、入力された画像を記録紙に印刷する印刷部である。PC I/F107は、MFP100とパーソナルコンピュータ108とを接続するインターフェースである。パーソナルコンピュータ108は、PC I/F107を介してMFP100の各種設定データ変更や各種動作の起動要求を行うことのできるホストコンピュータである。イメージセンサ110は原稿の読取部であり、不図示の原稿台に載置された原稿を読取るための読取りセンサである。イメージセンサ110により原稿の読取画像が入力される。イメージプロセッサ109は、イメージセンサ110によって入力された読取画像に各種画像処理を施すものである。
操作パネル111は、不図示であるパワースイッチや各種のハードキー112を有し、装置の操作状況や状態等を表示するための表示装置113と表示装置113上に配置されたタッチパネル115を有している。そして、操作者が自身の指あるいはタッチペン等の器具を用いてタッチパネル115に触れると、指や器具が触れた位置座標(位置座標の取り方については後述する)がタッチパネルコントローラ114によって検出される。そして、タッチパネルコントローラ114により検出されたタッチ位置座標が、タッチイベントとしてCPU101に入力される。CPU101はタッチイベントが入力されると、タッチ位置座標と表示装置113に表示されている表示内容とに応じた処理を行うことができる。
またタッチパネルコントローラ114は、一定周期毎にタッチ位置を検出する。そのため、ユーザが同じタッチ位置をタッチしている時間を判断することができる。またユーザがドラッグ操作を行うと、ドラッグ操作の軌跡上のタッチ位置が連続的に検出されるため、ドラッグ操作の方向や距離、速度を判断することができる。さらに、同じタッチ位置が繰り返し検出された場合には、ユーザが同じタッチ位置を継続してタッチしているものとして判断することができる。またユーザのタッチ位置が検出された後、タッチ位置が検出されなくなった場合には、ユーザの指やタッチペンがタッチパネルから離れた状態(リリース)であると判断することができる。
このようなユーザにタッチに関する情報がタッチパネルコントローラ114からCPU101に入力される。CPU101は、入力した情報に応じた制御を行う。なお、ユーザのタッチの内容(ドラッグ操作の方向、距離、速さや、タッチしている時間、タッチパネルからのリリース等)をCPU101が判断してもよい。つまり、タッチパネルコントローラ114が一定周期で検出したタッチ位置がCPU101に入力され、CPU101がそのタッチ位置に基づいて、ユーザのタッチの内容を判定してもよい。
表示装置113は、例えば後述するメモリーカード106に記憶されている写真画像や、各種の案内を表示する表示部である。CPU101は、写真画像や案内表示の画像をDRAM103上に展開して、展開された画像を表示装置113に出力することにより表示を行う。
またCPU101は、タッチパネルコントローラ114により検出されたタッチパネル上のタッチ位置座標を入力すると、そのタッチ位置に対応する表示内容に応じた処理を行うことができる。よってユーザは、表示装置113の表示内容を見ながら、所望の表示内容の領域をタッチパネル115上で指示することによって、MFP100に対して、その表示内容に対応する処理を指示することができる。
ハードキー112は、ユーザが押下するためのキーである。ハードキー121が押下されると、CPU101は、押下されたキーに応じた処理を実行する。
カードスロット105は、メモリーカード106を接続するためのインターフェースである。メモリーカード106が接続された状態で、CPU101は、ユーザによるタッチパネル115やハードキー121に対する操作に応じて、メモリーカード106に記憶されている画像から表示対象を選択する。そして、選択された画像を表示装置113に表示させる表示制御を行う。
またCPU101は、ユーザの指示に応じて、メモリーカード106に記憶されている画像を印刷対象として選択する。印刷対象の画像が選択されると、CPU101はその画像をメモリーカード106から読み出して、DRAM103上に展開する。そしてCPU101は、DRAM103に展開された画像に各種印刷設定を行って、プリンタエンジン104に出力することにより、当該画像を印刷させる。
また、メモリーカード106に記憶されているすべての画像をDRAM103に取り込み、それらの画像を表示装置113に表示させることも可能である。そして、表示装置113に表示された画像からユーザにより選択された画像をプリンタエンジン104に印刷させることができる。なお、本実施形態では画像ファイルの1つであるJPEGファイルの画像を展開し、表示や印刷することが可能となっている。またJPEGファイルは、同様の内容であるが画素数の異なる2つの画像を格納することが可能である。そこで、画素数の少ない画像(サムネイル画像)を表示のために使用し、画素数の多い画像を印刷のために使用してもよい。
次に、ユーザがタッチパネル115を操作して、メモリーカード106に保存されている画像から任意の画像を選択/閲覧する操作方法について詳細に説明する。図2は、表示装置113、タッチパネル115を示す図である。図2(a)は、本実施形態における操作パネル111の外観構成の一例を示す図である。同図において、先に述べた様に表示装置113上にはタッチパネル115が重ねて設けられている。CPU101は、表示装置113に、システムの状態に応じて適したアイコンやソフトキーを含む操作画面を表示させる。タッチパネルコントローラ114は、タッチパネル115がタッチされたことを検出すると、そのタッチの内容を示す情報(タッチ位置等)をCPU101に伝える。
図2(b)はタッチパネル115における座標を示す図である。タッチパネル115において、タッチパネル115の左上を原点とした二次元のXY座標面が定義される。そして、ユーザがタッチパネル115にタッチしたタッチ位置は、上記の座標面上における座標として検出される。
本実施形態では表示装置113はX方向に640ピクセル、Y方向に480ピクセルで構成されており、タッチパネル115はこれと一致させるためにX方向に640の分解能、Y方向に480の分解能を持っている。以下では、説明上、タッチパネル115上で接触を検出した位置座標が表示装置113上に表示されたソフトキーの表示位置と一致したと判断した場合を、「ソフトキーがタッチされた」と表現する。
201〜203はそれぞれ、ハードキー112として構成されるもので、具体的なそれぞれの機能は次のとおりである。ホームキー201はすべての機能の起点であるホーム画面へ遷移するために用いる。ホーム画面には各種機能がいくつかのカテゴリに分類され、それぞれが不図示であるアイコンで表示されており、ユーザはその中の一つをタッチすることにより機能を選択するよう構成されている。戻るキー202は一つ前の画面へ遷移するためのキーである。ホーム画面より始まる画面の遷移は履歴に保存され、戻るキー202を押下することにより、履歴をたどって一つ前の画面に遷移する事ができる。従ってすべての起点であるホーム画面においては戻るキーは無効である。スタートキー203はイメージセンサ110による原稿画像の読取り動作や、プリンタエンジン104によるプリント動作などを開始する時に用いる。
本実施形態では、CPU101は、カードスロット105にメモリーカード106が接続されたことを検知すると、メモリーカード106内に保存されているデジタルデータを解析する。そして、そのデジタルデータのうち、拡張子が”.jpg”(大文字/小文字の区別はしない)であるJPEGファイルを特定する。そして、JPEGファイルのそれぞれに対応する番号と、メモリーカード106内の各JPEGファイルにアクセスするためパス情報を含む画像リストを生成する。この画像リストは、各画像の属性に応じた順序に従って生成される。例えば、JPEGファイルに記憶されている画像の撮影時間を取得し、画像リストにおいて画像が撮影時間順に含まれるように、画像リストを生成する。CPU101は、画像リストの生成が終了すると本リストの先頭の画像を表示装置113に自動的に表示する。
図3は表示装置113における画像表示の一例である。このとき、画像リストの先頭画像が表示されている状態であるものとする。図3に示す表示においてユーザは、メモリーカード106内に保存されている画像を閲覧しながら、所望の画像それぞれに印刷部数を設定することができる。
ユーザは、表示中の画像の左右に配置されているソフトキー303又は304をタッチすることで、表示装置113への表示対象の画像を変更することができる。なお、この表示対象の変更では、上記の画像リストに応じた順序に従って表示対象が変更される。
例えば画像リストにおいて、画像の右横に配置されている順送りキー304がタッチされると、CPU101は、画像リストにおいて表示中の画像よりも番号が1つ大きな画像を表示させる。同様に、画像の左横に配置されている逆送りのソフトキー303がタッチされると、CPU101は、画像リストにおいて表示中の画像より番号が1つ小さな画像を表示させる。そして部数入力用のソフトキー302がタッチされると、CPU101は当該表示対象となっている画像を、印刷対象として特定して、表示装置113に不図示である部数設定画面を表示させる。
ソフトキー306がタッチされると、次の画面へ遷移する。ここでいう次の画面とは、例えば出力方法(印刷、拡大表示、各種メモリへの記憶、外部装置への送信等)を選択する画面である。また出力方法が例えば印刷に決まっている場合には、印刷設定をユーザが指定するための印刷設定画面を表示させてもよい。
また本実施形態では、表示装置113の画面上に表示されているソフトキー305がタッチされると、CPU101はトリミングモードに遷移して、表示中の画像におけるトリミング対象の領域を示すトリミング枠を表示させる表示制御を行う。
図4は、本実施形態におけるトリミング枠を説明するための図である。図4に示すように、トリミングモードにおいてはトリミング枠が表示される。なお、「トリミング」とは画像の一部を、表示や印刷、送信といった各種の出力処理の対象として特定する処理をいう。そして、本実施形態では画像上のトリミング枠の内部が出力処理の対象の候補であり、ユーザがタッチパネル115上でタッチ操作をすることにより、トリミング枠の移動や、当該トリミング枠のトリミングを指示することができる。
図4に示すトリミング枠表示では、トリミング枠の大きさと位置が表示中の画像に対して指定されていれば、そのトリミング枠の大きさ/位置が記憶されており、その指定されている大きさのトリミング枠を、指定されている位置に表示させる。一方、表示中の画像に対してまだトリミング枠が指定されていなければ、予め定められた大きさ/位置に従ってトリミング枠を表示させる。
またトリミングされた画像が印刷される場合、トリミング枠の形状を、画像が印刷される印刷媒体の形状に合わせて設定してもよい。例えば矩形の印刷用紙のアスペクト比に合わせて、トリミング枠のアスペクト比を設定する。ユーザにより印刷用紙が指定されたときに、その印刷用紙のアスペクト比に合わせてトリミング枠を設定することにより、印刷用紙の形状にあった画像をトリミングすることができる。特に、印刷用紙に余白ができないように画像が印刷される(フチなし印刷)場合、トリミング枠の縦横比と印刷用紙の縦横比は略一致している必要があるため、適切にフチなし印刷を実行することができる。また、印刷媒体の形状は矩形に限らず、例えば円形であってもよい。例えばユーザがCD等のディスクメディアへの印刷を希望した場合に、円形のトリミング枠を表示させ、円形の領域をトリミングする。これにより、ディスクメディアの形状に応じたトリミングを行うことができる。
このように、本実施形態では画像に対する処理として、トリミングを例に説明する。そして、トリミングが実行される領域を示すオブジェクトの例として、矩形のトリミング枠を例に説明する。なお、本実施形態で説明する処理は上記の例に限定されるものではなく、画像処理は色補正や明るさの変更などの各種の処理でよい。またトリミング枠も矩形ではなく円形や楕円形等の種々の形状でよく、また枠に限らず、領域を示す種々のオブジェクトを表示させる場合であってもよい。
本実施形態ではトリミング枠が表示されるとそのトリミング枠の内部、辺、角のいずれかをタッチし、ドラッグ操作することによってトリミング枠の大きさや位置を変更することができる様に構成されている。具体的には、トリミング枠で示される領域の内部又は辺をドラッグした場合にはトリミング枠の移動、四つの角のいずれかをドラッグした場合にはトリミング枠のサイズ変更を行う事が可能である。
さらに本実施形態では、ユーザが表示画面に表示されている画像上で且つトリミング枠の外の領域をタッチすると、その位置にトリミング枠を移動させる。これにより、ユーザはドラッグ操作を行わなくても、トリミング枠を所望の位置に素早く移動させることができるため、容易にトリミング領域を決定することができる。
なお、本実施形態においては、トリミング枠は画像領域301の内部に位置するように制御する。画像領域301とは、タッチパネル115の座標系において、表示装置113に表示された画像に対応する領域である。本実施形態では、トリミングモードにおける画像領域301は、図4(b)に示すように左上を(120,50)、右下を(520,350)とする矩形の領域である。なお、XY座標系における矩形領域を定義するにはその4点を明確にする必要があるが、実質的には左上、右下の2点の座標を決定すれば残る2点の座標が確定することができる。
以下では、トリミング対象の領域を設定する処理について説明する。図3に示す画面においてソフトキー305が押下されて、トリミングが指示されると、トリミングモードに遷移する。そして、図4(a)に示すように、トリミングモードにおいては、画像領域301の中にトリミング枠401が重ねて表示される。トリミング枠401は、既にトリミング枠の左上/右下の座標が指定されていれば、その座標の値に応じた大きさ/位置に従って表示される。トリミング枠の左上/右下の座標が指定されていなければ、所定の大きさのトリミング枠を、所定の位置に表示させる。図4(b)では(a,b)、(c,d)が左上/右下の座標である。また、図4(b)に示す画面には、その他にトリミング枠を回転させるためのソフトキー402と、トリミングモードを終了し、図3に示した元の画面へ戻るためのソフトキー403とが表示される。
次に図5のフローチャートを参照して、トリミング領域の設定処理について説明する。図5に示す処理は、トリミングモードに遷移して図4(a)の画面が表示されたときに開始される。また、図5に示すフローチャートに対応する制御プログラムがROM102に記憶されており、CPU101がDRAM103上でこの制御プログラムを実行することにより、図5に示す処理を実現することができる。
ユーザがタッチパネル115へタッチすることによって発生するタッチイベントの待機状態となる(S501)。タッチパネルコントローラ114によりタッチが検出されると、タッチイベントが発生する。タッチイベントが発生するとS502に進み、CPU101は、タッチパネルコントローラ114により検出されたタッチ位置座標を取得する。次にS503においてこのタッチ位置座標が画像領域の中で有るか否かが判断される。
画像領域の中であった場合(S503でYES)、次にS504にてトリミング枠の角がタッチされたかどうかの判断を行う。このトリミング枠の角の点は論理的には1ピクセルしかなく、指でタッチ操作をすることを前提としたシステムの場合、その一点を正確にタッチする事は大変困難である。従って角についてはある程度の許容値を持たせることが望ましい。例えばトリミング枠の左上の座標が(a,b)であるときに矩形の内側に5ピクセルの許容値を持たせ、左上(a,b)と右下(a+5,b+5)の矩形で示される領域内のタッチであった場合には「角をタッチした」と見なすようにする。またタッチパネルコントローラ114が、ユーザによりタッチされた座標の領域を検出できる場合、トリミング枠の角がその領域に含まれるか否かを判定してもよい。例えば、ユーザによりタッチされた領域が矩形領域として検出される場合、その矩形領域に角が含まれるか判定する。
S504において、トリミング枠の角がタッチされたと判断された場合(S504でYES)、S505に進み、トリミング枠の拡大/縮小の処理を行う。一方、トリミング枠の角ではないと判断された場合(S504でNO)はS506に進み、ユーザによるタッチ位置がトリミング枠の中か否かを判断する。ここでは、トリミング枠そのものはトリミング枠の中であるものとする。
S506において、ユーザのタッチ位置がトリミング枠の中と判断された場合(S506でYES)にはS508へ進み、ユーザによるドラッグ指示に応じたトリミング枠の移動制御処理を行う。またトリミング枠の外と判断された場合(S506でNO)はS507へ進みトリミング枠移動の処理を行う。その後リリースイベントが発生しない場合にはS508へ進みトリミング枠ドラッグの処理を継続して行う事ができる。S508において、ユーザによるタッチパネルからのリリースが検出されると、S501に戻る。
S507、S508における処理により、CPU101は、ユーザがトリミング枠内をタッチした場合にはトリミング枠の移動のためのドラッグ操作を行うことができる。またCPU101は、トリミング枠外がタッチされた場合には、その位置にトリミング枠を移動させる移動制御を行う。またS507においてトリミング枠が移動されると、その移動と継続して、ドラッグ操作による移動を行うことができる。S507S508の処理の詳細については後述する。
上述のS503において、S502において取得された位置座標が画像領域外と判断されると、S509へ進み「枠回転」のソフトキーがタッチされたかどうかを判断する。そして「枠回転」のソフトキーがタッチされたと判断した場合(S509でYES)はトリミング枠の回転処理を行う。一方、「枠回転」のソフトキーへのタッチでは無いと判断された場合(S509でNO)はS511において「OK」のソフトキーへのタッチか否かを判断する。「OK」ボタンへのタッチでは無いと判断された場合(S511でNO)は本画面では有効なタッチ操作と見なされないため、そのまま元のタッチイベント待機状態へ戻る。「OK」ボタンへのタッチと判断された場合にはS512にて、ユーザがタッチパネルからリリースしてリリースイベントが発生したか判定される。リリースイベントが発生すると、S513に進む。S513では、表示中の画像における当該トリミング枠に対応する領域を、トリミング対象の領域として設定して、トリミングモードを終了する。このとき、図3に示す元の画面へ戻る。なお、図3の画面に戻ったときに、表示中の画像のうちの、S513で設定されたトリミング領域を表示させるようにしてもよい。
次に、図5のS508におけるトリミング枠ドラッグ処理について図6及び図7を用いて説明する。
図6は、ドラッグ操作によるトリミング枠の移動を説明するための図である。具体的には、トリミング枠401の内部をタッチした後、そのままドラッグ操作を行った様子を表したものである。破線矢印603はドラッグ操作の軌跡を示しており、ユーザが座標(p,q)から座標(p´,q´)までタッチ状態を維持したまま指を動かした様子を表している。そして破線の矩形601は移動開始時のトリミング枠、実線の矩形602はドラッグ操作に追従して移動した後のトリミング枠の状態を示している。この移動に伴い、移動前のトリミング枠の左上の座標(a,b)及び右下の座標(c,d)がそれぞれ(a´,b´)、(c´,d´)へ移動する。
図7はS508における、ドラッグ操作によるトリミング枠の移動処理を示すフローチャートである。
まずS701において、CPU101は、タッチパネルコントローラ114から取得したタッチ位置座標の情報により、ユーザによるドラッグ指示を入力したか判定する。ドラッグ指示が入力されたと判定された場合、S702に進む。一方、ドラッグ指示が入力されていないと判定された場合、S706に進む。なお、このS701における判定は、タッチパネルコントローラ114により定期的に検出されるユーザのタッチ位置の変化により判定することができる。例えば、連続する複数回の検出により特定された複数のタッチ位置が、タッチパネル上の所定の距離以上に対応するものであれば、ドラッグ操作がおこなわれたと判断することができる。また上記の複数のタッチ位置によりユーザのドラッグ操作の方向も特定することができる。
S702において最新のトリミング枠の4点の座標を算出する。これは以下の式を満たすa´,b´,c´,d´を求めることによって算出できる。まず移動処理開始時のトリミング枠の左上の座標を(a,b)、右下の座標を(c,d)、ドラッグ指示が入力されたときの最新のタッチ位置を(p,q)とする。次に最新のタッチ位置座標を(p´,q´)、最新のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)とした時に以下の式を満たすa´,b´,c´,d´を求めれば良い。
a´−p´=a−p
b´−q´=b−q
c´−p´=c−p
d´−q´=d−q
次にS703において上記4点の座標が画像領域からはみ出していないかを判断する。本実施形態では画像領域を左上(120,50)、右下(520,350)としているので、具体的には以下のいずれかとなっているかどうかを判断する。
a´<120
b´<50
c´>520
d´>350
画像領域からはみ出した場合(S703でYES)にはS704においてトリミング枠の位置を補正する。トリミング枠の補正手順については複数の手法が実現可能であり、詳細については後述する。一方、トリミング枠が画像領域内にある場合(S703でNO)にはそのままS705においてトリミング枠を再描画する。
そしてS706でリリースイベントが有ったかどうかを判断し、なければ再びS701に戻るが、ここでリリースイベントが検出されると(S706でYES)S707において現在のトリミング枠の座標を保存し、本処理を終了する。
このように、図6、図7により説明した処理によれば、ユーザはトリミング枠内をタッチして、そのままドラッグ操作を行うことにより、トリミング枠を移動させる移動制御を行う。
次にS505のトリミング枠拡大/縮小処理について図8及び図9を用いて説明する。
図8はトリミング枠401の右下の角をタッチした後、そのままドラッグ操作を行った様子を表している。破線矢印803はドラッグ操作を示しており、座標(p,q)から座標(p´,q´)へ移動した様子を表している。そして破線の矩形801は拡大/縮小処理開始時のトリミング枠、実線の矩形802はドラッグ操作に追従して拡大/縮小した後のトリミング枠の状態を示しており、処理前の右下の座標(c,d)が(c´,d´)へ移動する。
なお、このトリミング枠の変倍処理を行ったときでも、トリミング枠のアスペクト比は維持するようにする。本実施形態では、トリミング枠のアスペクト比は、トリミングされた画像が印刷される印刷用紙のアスペクト比と一致するように設定される。そのため、変倍(拡大/縮小)処理を行ったときも、トリミング枠のアスペクト比は維持される。よって、ユーザは、印刷用紙にあった領域をトリミング対象として容易に設定することができる。なお、印刷用紙については、トリミングモードに遷移する前やトリミング枠が表示されているときに、ユーザにより設定されてもよい。この場合、ユーザは所望の用紙サイズを指定して、トリミングモードに遷移させることにより、所望の用紙サイズにあった領域を特定することができる。
図9はS505におけるトリミング枠拡大/縮小の処理を示すフローチャートである。
S901において、CPU101は、タッチパネルコントローラ114から、最新のタッチ位置座標を取得する。次にS902において最新のトリミング枠の4点の座標を算出する。これは以下の式を満たすa´,b´,c´,d´を求めることによって算出できる。まず拡大/縮小処理開始時のトリミング枠の左上の座標を(a,b)、右下の座標を(c,d)、タッチ位置を(p,q)とする。次に最新のタッチ位置座標を(p´,q´)、最新のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)とした時に以下の式を満たすa´,b´,c´,d´を求めれば良い。今回は右下の角をタッチしているため、左上の座標は不動であるものとする。また、前述の様にトリミング枠は印刷用紙のアスペクト比と一致させる必要があるため、(p´,q´)が(a,b)と(c,d)を結んだ対角線上にない場合、(p´,q´)は必ずしも右下の角とはならない。つまり座標(p´,q´)がこの対角線より右上側に有るか、左下側にあるかによってその算出方法を変更し、右上側に有る場合には(p´,q´)と右辺が重なる様に、左下側に有る場合には下辺と重なる様にする。すると、a´,b´,c´,d´を求める式は以下となる。
・(a−c)/(b−d)<=(a−p´)/(b−q´)のとき
a´=a
b´=b
c´=p´
(a−c)/(b−d)=(a´−c´)/(b´−d´)
・(a−c)/(b−d)>(a−p´)/(b−q´)のとき
a´=a
b´=b
d´=q´
(a−c)/(b−d)=(a´−c´)/(b´−d´)
なお、上記はトリミング枠の右下の角をドラッグした場合の拡大/縮小処理として対角側にある左上を不動の点としたが、例えば右上の角をドラッグした場合には対角で有る左下が不動で有る様に、以下の様にa´,b´,c´,d´を算出する。
・(a−c)/(d−b)<=(a−p´)/(d−q´)のとき
a´=a
d´=d
b´=q´
(a−c)/(b−d)=(a´−c´)/(b´−d´)
・(a−c)/(d−b)>(a−p´)/(d−q´)のとき
a´=a
d´=d
c´=p´
(a-c)/(b-d)=(a´-c´)/(b´-d´)
同様に左上の隅をドラッグした場合には右下が不動で有る様に、左下の角をドラッグした場合には右上が不動で有る様に、各々の変数を適宜変換して求めればよい。また、ここではドラッグした対角の角が不動で有る様に各座標を算出したが、例えば対角線の交点、即ち矩形の重心が不動で有る様に各座標を求める様にしても良い。また、ドラッグした座標が画像領域より外側になった場合にはその位置を不動点として、対角側の座標が変化し、トリミング枠が大きくなるように座標を算出する場合であってもよい。この場合にはタッチ座標が画像領域より外側にある間、トリミング枠においてユーザにより指定された角の対角側が、実際にドラッグされた方向の反対方向にドラッグ操作されたものとしてトリミング枠の座標を算出する。
なお、本実施形態においては四つの角のいずれをドラッグした場合にも拡大/縮小処理を行う構成としたが、例えば右下の角のみ拡大/縮小処理を行う等、四つの角の内の一つ乃至は所定の複数の角のみ拡大/縮小処理を行う構成としても良い。
以上のようにS902でトリミング枠の4点の座標が算出されると、次にS903において、そのトリミング枠が最小トリミング枠より小さいか否かが判断される。予め定められた最小トリミング枠より小さい場合(S903でYES)にはトリミング枠の再描画を行うS904に進まずに、S901へ戻る。一方、最小トリミング枠より大きい場合には新たな座標でトリミング枠を再描画する。そしてS905でリリースイベントが有ったかどうかを判断し、リリースされていなければ再びS901に戻る。S905でリリースされたと判断されると(S905でYES)、S906において現在のトリミング枠の座標を例えばDRAM103に保存し、本処理を終了する。
次にS510のトリミング枠回転処理について図10及び図11のフローチャートを参照しながら説明する。
図10はソフトキー309をタッチした後、トリミング枠の縦横を入れ替えた様子を表している。
図11は図5のS510におけるトリミング枠回転の処理を示すフローチャートである。
S1101において、回転後のトリミング枠の4点の座標を算出する。これは回転前後で縦横の長さを入れ替え、双方の重心座標が同一となる様に算出することで求められる。
次にS1102において上記4点の座標が画像領域からはみ出していないかを判断する。これはトリミング枠移動の処理における図7のS703で説明した処理と同様である。画像領域からはみ出した場合(S1102でYES)にはS1103においてトリミング枠の位置を補正する。トリミング枠の補正手順の詳細については後述する。
一方、トリミング枠が画像領域内にある場合(S1102でNO)にはそのままS1104においてトリミング枠を再描画する。そしてS1105においてトリミング枠の向きを保存し、更にS1106において新たなトリミング枠の座標を保存し、本処理を終了する。
次にS507のトリミング枠移動処理について図12〜図15を用いて説明する。図12〜図15に示す処理により、タッチパネル上でユーザがタッチした位置にトリミング枠を移動させることができる。そのため、ユーザは容易にトリミング領域を指定することができる。
図12はトリミング枠401の外側を8つの領域に分割した状態を示す模式図である。これらの領域は具体的にはトリミング枠の左上の座標を(a,b)、右下の座標を(c,d)としたときに、
(x<=a)且つ(y<=b)を満たす(x,y)領域 ⇒領域(A)
(c>x>a)且つ(y<=b)を満たす(x,y)領域 ⇒領域(B)
(x>=c)且つ(y<=b)を満たす(x,y)領域 ⇒領域(C)
(x>=c)且つ(d>y<b)を満たす(x,y)領域 ⇒領域(D)
(x>=c)且つ(y>=d)を満たす(x,y)領域 ⇒領域(E)
(c>x>a)且つ(y>=d)を満たす(x,y)領域 ⇒領域(F)
(x<=a)且つ(y>=d)を満たす(x,y)領域 ⇒領域(G)
(x<=a)且つ(d>y<b)を満たす(x,y)領域 ⇒領域(H)
と定義している。
次にこれら8つの領域のどの位置をタッチしたかにより、トリミング枠移動の処理がどの様に行われるかを説明する。
図15はS507におけるトリミング枠移動の処理を示すフローチャートである。
まずS1501においてタッチした位置座標を取得する。なお、S1501において取得される位置座標は、上述のS503、S506の判定処理により、トリミング領域の外側であって、画像領域の内側である。次にS1502においてその座標が(A)〜(H)のどの領域に属するかを判定する。次にS1503において新たなトリミング枠の4点の座標を算出する。このとき、表示画面上に表示されていたトリミング枠の形状や大きさが維持されるように、新たなトリミング枠の4点の座標を算出する。
その新たな座標は以下となるように算出される。
(A)の領域と判断された場合:左上角がタッチ位置と一致するように移動する
(B)の領域と判断された場合:上辺がタッチ位置と一致するように垂直に移動する
(C)の領域と判断された場合:右上角がタッチ位置と一致するように移動する
(D)の領域と判断された場合:右辺がタッチ位置と一致するように水平に移動する
(E)の領域と判断された場合:右下角がタッチ位置と一致するように移動する
(F)の領域と判断された場合:下辺がタッチ位置と一致するように垂直に移動する
(G)の領域と判断された場合:左下角がタッチ位置と一致するように移動する
(H)の領域と判断された場合:左辺がタッチ位置と一致するように水平に移動する
その後、S1504において新たなトリミング枠を再描画する。そしてS1505において新たなトリミング枠の座標を例えばDRAM103に保存し、本処理を終了する。
より具体的な例を図13及び図14に示す。
図13(a)はタッチ位置1301が(D)の領域に属することを示している。この時図13(b)で示すようにトリミング枠401は水平にタッチ位置1301に移動する。これは以下の式を満たすa´,b´,c´,d´を求め、トリミング枠を再描画することにより実現出来る。まず移動前のトリミング枠の左上の座標を(a,b)、右下の座標を(c,d)、タッチ位置1301の座標を(p,q)とする。次に移動後のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)とした時に以下の式を満たすa´,b´,c´,d´を求めれば良い。
a´=a+(p−c)
b´=b
c´=p
d´=d
ここではトリミング枠の右辺が水平に移動する場合の具体的な例を示したが、左辺が移動する場合も適宜変数を入れ替えることにより、移動後の座標を求めることが出来るのでここでは省略する。また、垂直に移動する場合もXY座標を入れ替えて同様に算出することができる。
図14(a)はタッチ位置1401が(E)の領域に属する事を示しており、この時は図14(b)で示すようにトリミング枠401は右下の角がタッチ位置1401に移動する。先と同じく移動前の各座標を(a,b)、(c,d)、(p,q)としたとき、以下の式を満たすa´,b´,c´,d´を求め、移動後のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)を決定する。
a´=a+(p−c)
b´=b+(q−d)
c´=p
d´=q
ここではトリミング枠の右下角が移動する場合の具体的な例を示したが、その他の角が移動する場合も適宜変数を入れ替えることにより、移動後の座標を求めることが出来るのでここでは省略する。
以上のように、図12〜図15に示した移動処理によれば、ユーザがトリミング領域外で指定した位置に、トリミング枠が移動する。そのためユーザはドラッグ操作を行わなくても、所望の位置にトリミング枠を移動させることができる。また、この移動処理では、タッチパネル上の画像領域において、ユーザがタッチした位置よりも内側にトリミング枠が配置される。また、この移動処理では、ユーザは画像領域内をタッチ可能としているため、トリミング枠が画像領域からはみ出すことが無い。従ってユーザは、所望のトリミング領域を容易に指定することができる。
また表示画面上に表示されていたトリミング枠が、その形状や大きさを維持したまま移動する。そのため、例えばユーザが所望の大きさやアスペクト比のトリミング枠を表示させた後に、そのトリミング枠外を指定することにより、その所望の大きさやアスペクト比を維持したまま、所望の位置に素早く移動させることができる。
次に、S507のトリミング枠の移動処理の別の例について、図16及び図17を用いて説明する。図17はS507における第2のトリミング枠移動の処理を示すフローチャートである。この図17に示す移動処理では、ユーザが(B)(H)(F)(D)のいずれかをタッチした場合、トリミング枠におけるタッチ位置に最も近い辺の中点が、タッチ位置と一致するように、トリミング枠を移動させる。例えば図16に示すように領域(D)がタッチされたときには、トリミング枠の右辺の中点が、タッチ位置に一致するように移動が行われる。
まずS1701においてタッチした位置座標を取得する。次にS1702においてその座標が図12で示した(A)〜(H)のどの領域に属するかを判定する。次にS1703において、S1702で判定された領域が(A)(C)(E)(G)のいずれかであるか判断する。ここで4領域のいずれかであった場合には(S1703でYES)、図15に示した処理と同様にS1704において最も近い角がタッチ位置と一致するように、新たなトリミング枠の4点の座標を算出する。
一方、S1702で判定された領域が上記の4領域のいずれでも無い場合(S1703でNO)、次にS1705においてタッチ位置が(B)(F)のいずれかであるかを判断する。そしてS1706において(B)に属する場合は上辺の中点がタッチ位置と一致するように、また、(F)に属する場合は下辺の中点がタッチ位置と一致するようにトリミング枠の4点の座標を算出する。更に、タッチ位置が(B)(F)のいずれでも無い場合(S1705でNO)、(D)(H)のいずれかがタッチされたことになる。この場合S1707において(D)に属する場合には右辺の中点がタッチ位置と一致するように、また、(H)に属する場合は左辺の中点がタッチ位置と一致するようにトリミング枠の4点の座標を算出する。
次にS1708において上記4点の座標が画像領域からはみ出していないかを判断する。これもトリミング枠移動の処理で説明した場合と同様に判断できる。画像領域からはみ出した場合(S1708でYES)にはS1709においてトリミング枠の位置を補正する。トリミング枠の補正手順の詳細については後述する。
一方、トリミング枠が画像領域内にある場合(S1708でNO)にはそのままS1710においてトリミング枠を再描画する。そしてS1711において新たなトリミング枠の座標を例えばDRAM103に保存し、本処理を終了する。
図16(a)はタッチ位置1602がトリミング枠401の外側に位置し、更に(D)の領域に属することを示している。この時図16(b)で示すようにトリミング枠401の右辺の中点1601がタッチ位置1602に移動する。これも先と同じく移動前の各座標を(a,b)、(c,d)、(p,q)としたとき、以下の式を満たすa´,b´,c´,d´を求め、移動後のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)を決定する。
a´=a+(p−c)
b´=b+q−(b+d)/2
c´=p
d´=d+q−(b+d)/2
ここではトリミング枠の右辺の中点が移動する場合の具体的な例を示したが、その他の辺の中点が移動する場合も適宜変数を入れ替えることにより、移動後の座標を求めることが出来るのでここでは説明を省略する。なお、本実施形態では8つに分割した領域の内、(A)(C)(E)(G)位置と判定された時には最も近い角が移動するように構成した。しかしこれに限らず、(A)(C)位置の場合には(B)位置と判定された時と同様に上辺の中点が移動するように、(E)(G)位置の時には(F)位置と判定された時と同様に下辺の中点が移動するようにしても良い。
あるいは(A)(G)位置の場合には(H)位置と判定された時と同様に左辺の中点が移動するように、(C)(E)位置の場合には(D)位置と判定された時と同様に右辺の中点が移動するようにしても良い。
次に、S507のトリミング枠の移動処理の別の例について、図18及び図19を用いて説明する。図19はS507における第3のトリミング枠移動の処理を示すフローチャートである。この図19に示す移動処理では、トリミング枠の重心点がユーザによるタッチ位置に一致するようにトリミング枠を移動させる。例えば図18に示すように、ユーザがタッチした位置にトリミング枠を移動させる。ただし、このとき図18(b)に示すように、トリミング枠が画像領域からはみ出すことになる。この場合、トリミング枠の位置補正が行われるが、詳細については後述する。
図19はS507における第3のトリミング枠移動の処理を示すフローチャートである。S1901においてタッチした位置座標を取得する。次にS1902においてその座標が新たなトリミング枠の重心となるような、4点の座標を算出する。これも先と同じく移動前の各座標を(a,b)、(c,d)、(p,q)としたとき、以下の式を満たすa´,b´,c´,d´を求め、移動後のトリミング枠の左上の座標を(a´,b´)、右下の座標を(c´,d´)を決定する。
(c´+a´)/2=p
(d´+b´)/2=q
a´−c´=a−c
b´−d´=b−d
次にS1903において上記4点の座標が画像領域からはみ出していないかを判断する。これは上記の図7のS703で説明した場合と同様に判断できる。画像領域からはみ出した場合(S1903でYES)にはS1904においてトリミング枠の位置を補正する。トリミング枠の補正手順の詳細については後述する。
一方、トリミング枠が画像領域内にある場合(S1903でNO)にはそのままS1905においてトリミング枠を再描画する。そしてS1906において新たなトリミング枠の座標をDRAM103に保存し、本処理を終了する。
より具体的な例を図18に示す。図18(a)はタッチ位置1802がトリミング枠の外側に位置していることを示している。この時図18(b)で示すようにトリミング枠401の重心1801がタッチ位置1802に移動する。なお図18(b)では移動後のトリミング枠が画像領域301からはみ出した状態となることを示している。このような場合には、このままトリミング枠を再描画する前にトリミング枠の位置補正を行うものである。
次に、トリミング枠の位置法制処理について図20を用いて説明する。この図20に示す補正処理が、上述した図7のS704、図11のS1103、図17のS1709、図19のS1904において実行される。
図20(a)は破線で示されるトリミング枠401が画像領域301からX座標方向右側にはみ出した状態の一例である。この時、実線のようにそのトリミング枠の大きさを維持したままX座標方向左に水平に移動させ、画像領域内に収まるように補正する。これははみ出した長さをrとしたとき、トリミング枠の4つ角のそれぞれのX座標の値から、rを減ずることにより、算出することができる。同様にX座標方向左側にrだけはみ出した場合には4つ角のそれぞれのX座標の値にrを加えることにより、算出することができる。Y座標方向上側/下側にはみ出した場合も同様に補正が出来る。また、XY方向の両方ではみ出しが起こった場合には、X座標、Y座標のそれぞれについて同様の補正を行う。
次にトリミング枠の補正処理の別の例について図20(b)を参照しながら説明する。図20(b)は破線で示されるトリミング枠401が画像領域301からX座標方向右側にはみ出した状態の一例である。この時、実線のようにそのトリミング枠の重心の位置2101を維持したままXY座標の両方に縮小処理を施し、画像領域内に収まるように補正する。
これはX座標方向にはみ出した長さをrとしたとき、左側2点のX座標に対してはrを加え、右側2点のX座標に対してはrを減ずることによってそれぞれのX座標を求めることができる。またY座標に関してはトリミング枠のアスペクト比とrから、加算または減算すべき値を求めることができる。Y座標方向上側/下側にはみ出した場合も同様に補正することができる。
また、XY方向それぞれが複合してはみ出した場合には、まずX座標について補正した値を求め、それでもY座標についてはみ出している場合には改めてY座標について補正を行う。
以上の図20で説明した2つの補正方法を適宜使い分けるようにしても良い。例えば上述のトリミング枠の回転処理により、トリミング枠の上下の両方で、トリミング枠がはみ出ることがある。この場合、図20(b)に示した補正方法を行うことにより、適切にトリミング枠を補正することができる。
以上の実施形態によれば、ユーザが表示画面に表示されている画像上で且つトリミング枠等のオブジェクト外の領域をタッチすると、その位置にトリミング枠が移動する。これにより、ユーザはドラッグ操作を行わなくても、トリミング枠を所望の位置に素早く移動させることができるため、容易にトリミング領域を決定することができる。
またユーザがトリミング枠内を指定すると、ドラッグ操作に追従してトリミング枠が移動する。よってユーザは、例えばトリミング枠の位置を調整する場合に、トリミング枠内をタッチしてドラッグ操作を行うことで、細かな位置調整を行うことができる。
さらに、ユーザがトリミング枠外をタッチしてトリミング枠を素早く移動させた後、ドラッグ操作によりトリミング枠を移動させることができる。よってユーザは、例えばトリミング枠外を指定して大まかな位置を決定した後、継続してドラッグ操作を行うことで、トリミング枠の位置調整を行うことができる。
また本実施形態によれば、ユーザが表示画面上に表示されていたトリミング枠の外の位置を指定すると、トリミング枠が、その形状や大きさを維持したまま指定された位置に従って移動する。そのため、例えばユーザが所望の大きさやアスペクト比のトリミング枠を表示させた後に、そのトリミング枠外を指定することにより、その所望の大きさやアスペクト比を維持させたまま、所望の位置に素早く移動させることができる。
なお、以上の実施形態では、表示画面上に既にトリミング枠が表示されているときに、そのトリミング枠を移動させる例について説明したが、これに限らない。例えば、トリミング枠が表示された後にユーザがスクロール操作を行い、トリミング枠が表示されなくなった画面において、ユーザがタッチした位置にトリミング枠を移動させてもよい。この場合、ユーザはスクロール操作前に表示されていたトリミング枠を指定しなくても、所望の位置にトリミング枠を素早く移動させることができる。さらに、トリミング枠が未だ表示されていないときに、ユーザによるタッチに応じて、そのタッチ位置に新たにトリミング枠を表示させてもよい。
また、以上の実施形態では、トリミング枠のアスペクト比を印刷用紙のアスペクト比と一致させるよう構成したが、これに限定されるものではない。例えば、トリミング枠の辺や角をドラッグした場合に任意のアスペクト比のトリミング枠を設定できる構成としても良い。
さらに以上の実施形態では、画像に実行される処理としてトリミングを例にして、トリミング枠を表示させる処理について説明した。しかしこれに限らず、画像に対して色補正や明るさ補正などの各種の処理が実行されるときに、画像における処理対象の領域を決定する場合であってもよい。
また以上の実施形態では、画像における処理対象の領域を決定するために、ユーザがタッチパネルを用いて指示を行う例について説明した。しかし、これに限定されるものではなく、マウス、トラックボール、タッチペンやタッチパッド等、各種のポインティングデバイスを用いて処理対象の領域を決定する場合に適用できるものである。
さらに、処理対象の画像は写真画像に限らず、テキスト文書や、ベクター画像、また構造化文書に基づくWebページ等の各種の画像であってよい。
また、以上の実施形態は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又はコンピュータ読取可能な各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。さらに、1つのコンピュータ(またはCPUやMPU等)が処理を実行する場合に限らない。複数のコンピュータ(またはCPUやMPU等)が協働することにより、処理を実行する場合であっても、以上の実施形態で示した処理を実現することができる。また、コンピュータ(またはCPUやMPU等)がROM等のメモリに記憶されているプログラムを実行する場合に限らず、以上の実施形態で示した処理を行うためのハードウェア(回路等)により、処理を行ってもよい。さらに、以上の実施形態で示した処理の一部をコンピュータ(またはCPUやMPU等)が実行し、残りの部分をハードウェアにより実行する場合であってもよい。