(57)【要約】【課題】  １対のプログラムにおけるゆるやかな連携処理を実現するためのプログラム間通信方式を実現する。【解決手段】  第1のプログラムと第2のプログラムの通信を行う1対の通信経路と、データを受け渡しするための共有メモリを備え、連携に必要な情報を交換する連携初期化手段と、処理対象となるデータ・リストを第１のプログラムと第2のプログラムで共有する対象データ共有手段と、メディア・オブジェクトとそのパラメータを要求するデータ要求手段と、前記データ要求手段で要求されたメディア・オブジェクトを前記共有メモリを用いて転送するデータ転送手段と、連携を終了する連携終了手段とを備えたプログラム間通信装置であって、前記メディア・オブジェクトは加工処理情報スタックを含み、第２のプログラムは、前記加工処理情報スタックをデコード結果に応じて変換し加工処理を適用する画像処理適用手段を備えるもの。【選択図】  図１
2006209321.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１種類以上のメディア・オブジェクトのデコード手段を持つ第１のプログラムと、第１のプログラムから起動され、第１のプログラムで扱うメディア・オブジェクトを処理する第２のプログラムが相互に通信して全体としてまとまった処理を行うプログラム間通信装置であって、第１のプログラムと第２のプログラムの通信を行う１対の通信経路と、データを受け渡しするための共有メモリを備え、
連携に必要な情報を交換する連携初期化手段と、
処理対象となるデータ・リストを第１のプログラムと第２のプログラムで共有する対象データ共有手段と、
メディア・オブジェクトとそのパラメータを要求するデータ要求手段と、
前記データ要求手段で要求されたメディア・オブジェクトを前記共有メモリを用いて転送するデータ転送手段と、
連携を終了する連携終了手段と
を備えることを特徴とするプログラム間通信装置であって、前記メディア・オブジェクトは加工処理情報スタックを含み、
第２のプログラムは、前記加工処理情報スタックをデコード結果に応じて変換し加工処理を適用する画像処理適用手段を備えることを特徴とするプログラム間通信装置。
【請求項２】
前記第１のプログラムと前記第２のプログラムは、ネットワーク接続された異なる装置で夫々動作することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項３】
前記第１のプログラムと前記第２のプログラムは、複数のプログラムを並列実行可能な一つの装置上で動作することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項４】
前記通信経路を実現するための手段として、各プログラムのウィンドウシステム上でのウィンドウハンドルと、ウィンドウプロシージャのメッセージ識別子を利用することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項５】
前記第２のプログラムが実行される時、前記第１のプログラムが前記第２のプログラムと通信するための通信経路情報を、前記第２のプログラムの実行時パラメータとして指定することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項６】
前記第２のプログラムの実行開始後、第１の通信経路情報に基づいて、前記第２のプログラムが前記第１のプログラムと通信するための第２の通信経路情報を前記第１のプログラムに通知することを特徴とする請求項５に記載のプログラム間通信装置。
【請求項７】
前記通信経路情報は、夫々のプログラムを表示するウィンドウシステム上でのウィンドウハンドルを含むことを特徴とする請求項５乃至６に記載のプログラム間通信装置。
【請求項８】
前記通信経路情報は、夫々のプログラムを表示するウィンドウシステム上でのメッセージ識別子を含むことを特徴とする請求項５乃至６に記載のプログラム間通信装置。
【請求項９】
前記通信経路情報は、プログラム間通信に利用する共有メモリを特定するための識別情報を含むことを特徴とする請求項５乃至６に記載のプログラム間通信装置。
【請求項１０】
前記対象データ共有手段は、共有メモリを用いてファイル名のリストを受け渡すことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１１】
前記ファイル名のリストは、データ記述言語で記述することを特徴とする請求項１０に記載のプログラム間通信装置。
【請求項１２】
前記連携初期化手段は、前記第１のプログラムの表示位置と同じ位置に前記第１のプログラムと同じ大きさで前記第２のプログラムを表示した後、前記第１のプログラムを非表示にすることで、二つのプログラムがあたかも一つのプログラムとして動作しているように見せることを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１３】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトの解像度を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１４】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトの色深度を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１５】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトの色空間識別情報を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１６】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトの撮影時情報を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１７】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトのフル解像度情報を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１８】
前記データ要求手段で指定するパラメータとは、前記メディア・オブジェクトの印刷用情報を含むことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項１９】
前記第２のプログラムは、前記データ転送手段で前記第１のプログラムから転送されたデータを、前記印刷用情報を用いて補正して出力デバイスに出力することを特徴とする請求項１８に記載のプログラム間通信装置。
【請求項２０】
前記データ転送手段で転送される前記メディア・オブジェクトは、前記第１のプログラムで加工されていることを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２１】
前記データ転送手段で転送される前記メディア・オブジェクトの解像度は、前記データ要求手段で指定された解像度と必ずしも一致しないことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２２】
前記第２のプログラムは、前記データ転送手段で転送される前記メディア・オブジェクトを必要な解像度に解像度変換する機能を有することを特徴とする請求項２１に記載のプログラム間通信装置。
【請求項２３】
前記データ転送手段で転送される前記メディア・オブジェクトの色深度は、前記データ要求手段で指定された色深度と必ずしも一致しないことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２４】
前記第２のプログラムは、前記データ転送手段で転送される前記メディア・オブジェクトを必要な色深度に変換する機能を有することを特徴とする請求項２３に記載のプログラム間通信装置。
【請求項２５】
前記データ転送手段で転送される前記メディア・オブジェクトの色空間は、前記データ要求手段で指定された色空間と必ずしも一致しないことを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２６】
前記第２のプログラムは、前記データ転送手段で転送される前記メディア・オブジェクトを必要な色空間に変換する機能を有することを特徴とする請求項２５に記載のプログラム間通信装置。
【請求項２７】
転送対象となったデータが前記共有メモリのサイズより大きかった場合、前記共有メモリを再割り当てする共有メモリ再割り当て手段を備えることを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２８】
前記データ要求手段は、前記第２のプログラムから前記第１のプログラムに対して前記メディア・オブジェクトとそのパラメータを要求することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項２９】
前記第１のプログラムから前記第２のプログラムに表示を切り替える処理において、前記第２のプログラムを起動する直前に前記第１のプログラムに対する入力信号を無視する状態にし、前記第１のプログラムと前記第２のプログラムとの連携が確立した後で、前記第１のプログラムの入力信号無視状態を解除することを特徴とする請求項１２に記載のプログラム間通信装置。
【請求項３０】
前記加工処理情報スタックとは、加工処理の適用履歴であることを特徴とする請求項１に記載のプログラム間通信装置。
【請求項３１】
前記適用履歴とは、加工情報の適用位置、適用範囲と操作の種類を、処理の適用順のリストにした情報であることを特徴とする請求項３０に記載のプログラム間通信装置。
【請求項３２】
前記加工処理の適用位置、適用範囲は、加工処理対象となる現画像上でのピクセル単位の座標であることを特徴とする請求項３１に記載のプログラム間通信装置。
【請求項３３】
前記加工処理とは、コピースタンプ処理であることを特徴とする請求項３０に記載のプログラム間通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象となるメディア・オブジェクトを扱う複数のプログラムが相互に通信し、全体としてまとまった処理を行うプログラム間通信装置に関する。
【背景技術】
【０００２】
従来、プログラム間通信で機能を補い合うために用いられるものは、プログラムに用意されていない機能を持つプログラムを検索し、検索されたプログラムにその処理の実行を完全に任せるものであった。例えば、画像印刷ソフトで未対応の画像形式のデータを印刷しようとした場合、それを扱えるプログラムを検索し、そのプログラムにデコードを任せるようなものが、その一例である。
【０００３】
このようなプログラム連携を実現するためには、プログラムに備えられていない機能を実現するためのプログラムが何なのかを検索/推定しなくてはならない。また、どのような機能を補うためにプログラム間通信が行われるか分からないので、プログラム間通信の手順が複雑になってしまい、プログラムの連携に非常に気を使って実装しなくてはならない。例えば、連携先のアプリケーション毎に異なる実装をしなくてはならないようなことが考えられる。
【０００４】
プログラム間通信に関する従来技術としては、例えば“プログラム間通信装置およびプログラム間通信方法”が開示されている（例えば、特許文献１参照）。
【０００５】
これは、多対１の連携を実現するために識別コードおよび処理内容に関するテーブルを持ち、その照合処理を行い、受信した識別コードとテーブルに登録された識別コードが一致した場合、特定のプログラムに識別コードを通知する複雑な連携の仕組みを提供するための技術である。
【０００６】
これに対し本発明では、１対のプログラムにおけるゆるやかな連携処理を実現するためのプログラム間通信方式を実現する事を課題としている。
【特許文献１】特許第３３１２４０２号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
つまり、従来技術で生じる問題は、連携するプログラム間において、自分で処理できない機能を補ってくれるプログラムを検索するコストと、連携に必要なプログラム間通信の複雑さ・厳密さによるコストが非常に高いことである。
【課題を解決するための手段】
【０００８】
上記問題を解決するために、本発明のプログラム間通信装置は以下の構成を含む。即ち、少なくとも１種類以上のメディア・オブジェクトのデコード手段を持つ第1のプログラムと、第１のプログラムから起動され、第1のプログラムで扱うメディア・オブジェクトを処理する第2のプログラムが相互に通信して全体としてまとまった処理を行うプログラム間通信装置であって、第1のプログラムと第2のプログラムの通信を行う1対の通信経路と、データを受け渡しするための共有メモリを備え、連携に必要な情報を交換する連携初期化手段と、処理対象となるデータ・リストを第１のプログラムと第2のプログラムで共有する対象データ共有手段と、メディア・オブジェクトとそのパラメータを要求するデータ要求手段と、前記データ要求手段で要求されたメディア・オブジェクトを前記共有メモリを用いて転送するデータ転送手段と、連携を終了する連携終了手段とを備えることを特徴とするプログラム間通信装置であって、前記メディア・オブジェクトは加工処理情報スタックを含み、第２のプログラムは、前記加工処理情報スタックをデコード結果に応じて変換し加工処理を適用する画像処理適用手段を備えることを特徴とする。
【発明の効果】
【０００９】
本発明によるプログラム間通信装置を用いれば、プログラム間通信を１：１接続として通信経路を限定することで、複数のプログラム間で画像データを低コストでやりとりすることが可能になる。また、プログラムに実装されていない機能を他のプログラムに求めるのではなく、他の機能を持つプログラムを自分の子として起動し、親側には当然用意されている機能が子として起動したプログラムで用意されていない場合、親側のプログラムが子に提供することによって、プログラム間通信のコストを非常に小さくすることが出来るという利点がある。さらに、全く異なるプログラムを、あたかも一つのプログラムの動作モードが切り替わったかのように見せることが可能になる。
【００１０】
また、デコード処理の高速化に伴う縮小デコード処理と、これに対応した加工処理を提供することで、プログラム間通信確立後のプログラムの動作を軽快にすることが可能になる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の好適な実施形態について、図面を参照して説明する。
【００１２】
（第一の実施形態）
以下、図面を用いて本発明の好適な実施例を具体的に説明する。図１は、本実施例を実現するシステムの概略を示した図である。CPU101は、システム全体の動作をコントロールし、一次記憶102に格納されたプログラムの実行などを行う。一次記憶102は、主にメモリであり、二次記憶103に記憶されたプログラムなどを読み込んで格納する。二次記憶103は、例えばハードディスクなどがこれに該当する。一般に一次記憶の容量は二次記憶の容量より小さく、一次記憶に格納しきれないプログラムやデータなどは二次記憶に格納される。また、長時間記憶しなくてはならないデータなども二次記憶に格納される。本実施例では、プログラムを二次記憶103に格納し、プログラム実行時に一次記憶102に読み込んでCPU101が実行処理を行う。入力デバイス104とは例えば、システムのコントロールに用いるマウスやキーボードの他、画像データの入力に必要なカードリーダー、スキャナ、フィルムスキャナなどがこれに該当する。出力デバイス105とは例えば、モニタやプリンタなどが考えられる。この装置の構成方法は他にも様々な形態が考えられるが、本発明の主眼ではないので説明を省略する。
【００１３】
本実施例による装置には、複数のプログラムを並列実行可能なオペレーティングシステムが搭載され、操作者はＧＵＩを使ってこの装置上で動作するプログラムの操作ができる。例えば本実施例では、オペレーティングシステムとしてマイクロソフト社のWindows（登録商標）であるとする。したがって、実施の形態はWindows（登録商標）の仕様に依存した記述になっているが、他の環境で実現しても構わない。
【００１４】
画像補正を行う画像補正プログラムと、補正後の画像を印刷する画像印刷プログラムを例に挙げ、本実施例によるプログラム間通信方法で連携動作するためのしくみについて説明する。本発明の主眼は、画像データを複数のプログラムで扱うための仕組みであって、その本質はプログラムの連携と、それを実現するプログラム間通信方式である。したがって、連携するプログラム自身の仕様には依存しないことは言うまでも無い。
【００１５】
まず、画像補正プログラムについて簡単に説明する。画像補正プログラムは、BMP、JPEG、TIFFを対象とした画像補正アプリケーションで、図２に示すように、画像選択画面と画像補正画面で構成される。
【００１６】
画像選択画面は、フォルダ・ツリー表示エリアとサムネイル表示エリアで構成され、フォルダ・ツリー表示エリアにはシステムの記録媒体に格納されたデータのディレクトリ構造を表現した図が表示される。表示されたディレクトリを選択すると、サムネイル表示エリアに、選択対象となる画像の縮小画像が一覧表示される。ここで、表示対象の画像が後述の画像補正画面で補正された状態の場合、縮小画像にも同様の補正を適用して表示する。対象画像が多すぎてサムネイル表示エリアに表示できない場合はスクロールバーが表示され、スクロールバーを操作することで、全ての縮小画像を閲覧することができる。サムネイル表示エリアに表示された縮小画像は、シングル・クリックする度に選択状態と非選択状態が切り替わり、ダブル・クリックすると画像補正画面に表示が切り替わる。
【００１７】
画像補正画面は、補正対象画像表示エリアと、補正パレットで構成される。補正対象画像表示エリアには、補正対象画像に対して補正パレットで指定されたパラメータを適用した画像が表示される。補正パレットは、対象画像のヒストグラムが表示されるヒストグラム表示領域と、シャープネスや彩度を指定するスライダーで構成され、スライダーを操作される度に、補正対象画像表示エリアの画像を更新する。補正パレットで調整可能なパラメータは本発明の主眼では無いが、例えば輝度γ値、シャープネス、彩度、コントラストを調整可能なものとする。
【００１８】
さらに、画像補正プログラムは画像補正画面に表示している画像を加工するコピースタンプ機能を持つ。コピースタンプ機能とは、ユーザによって指定された領域に、別途指定された相対位置の領域をブレンド処理（合成処理）する機能である。本実施例では、Altキーを押しながら画像をクリックすることでクリックされた座標をコピー元座標とする。コピー元座標が確定した場合、コピースタンプモードに入る。コピースタンプモードでは、マウスカーソルの代わりにコピースタンプ処理の適用範囲を示す円を表示する。適用範囲を示す円の半径の値は、マウスのホイール操作によって上下することができる。コピースタンプモードに入った後、最初にクリックした座標をコピー先座標とし、コピー先座標からコピー元座標を結ぶコピー位置ベクトルを計算する。以後、ドラッグ操作あるいはクリックで指定された処理対象座標と、処理対象座標とコピー位置ベクトルから算出されるコピー元座標を用いてブレンド処理を行う。図２０に、コピー先座標、コピー元座標およびコピー位置ベクトルの関係を示す。コピースタンプモード時に右クリックされた場合、コピー元座標、コピー位置ベクトルを破棄し、コピースタンプモードを抜ける。ブレンド処理は、単純に領域を上書きしても良いし、コピー先位置からの距離に応じてブレンド率を変えても良い。本実施例では例えば、ブレンド率の計算に次式を用いる。
【００１９】
blend = exp( ( 4 * sqrt( l ) / r )2 / 2 )
ここで、blendはコピー先画素値に対するコピー元画素の割合で、lはコピー先座標からの距離、rは適用処理半径とする。
【００２０】
画像選択画面で複数の画像を選択した場合、図３のように対象画像表示領域の左に、選択画像一覧表示領域が作成され、縮小画像が並べて表示される。このようなモードを用意することで、複数画像の補正を行う場合、画像選択画面と画像補正画面の表示切替操作を行わなくても済むようになり操作性が向上する。
【００２１】
画像補正画面での補正結果は、対象となる画像を直接加工するのでは無く、元画像に対する補正パラメータをファイルに追記する形で保存する。このような仕組みを用いると、何度パラメータを変更しても原画像を壊さないので、補正するたびに画質が劣化していくことは無い。補正結果と同様に、コピースタンプ処理内容も処理パラメータだけを保持する。具体的には、処理対象座標列、コピー位置ベクトル、処理対象半径を指定順に並べた情報を保持する。
【００２２】
次に、画像印刷プログラムについて簡単に説明する。画像印刷プログラムは、JPEGを対象とした印刷アプリケーションで、図４に示すように、画像選択画面と印刷条件設定画面で構成される。印刷条件設定画面で、用紙とレイアウトを指定して印刷ボタンを押すと選択された画像が、指定された用紙サイズの用紙に対して、指定されたレイアウトでプリンタに出力される。例えば本実施例では、用紙としてA4、L判、葉書から選択可能になっている。もちろん、用紙サイズ以外に、用紙の種類、例えば、普通紙と写真用紙などが選択可能であっても構わないことは言うまでもない。レイアウトとしては、本実施例では全面、2 in 1、撮影時情報付き印刷、縮小画像一覧（インデックス印刷）が選択可能である。撮影時情報付き印刷とは、画像と、その付属情報をレイアウトして出力するためのレイアウトであり、本実施例では用紙一枚に対して一枚の画像とその撮影時情報を並べて出力する。また、画像印刷プログラムを単独起動した場合、「終了」ボタンでアプリを終了する。
【００２３】
図２と図４で示した２つのプログラムは、上記で説明した単体での動作の他に、本発明によるプログラム間通信処理によって連携動作するための仕組みが実装されている。内部の詳細な処理については後述することにして、まずプログラムのGUIレベルでの動作について述べる。
【００２４】
画像補正プログラムには、選択画像を印刷するためのメニューが用意されており、オペレーティングシステムが提供するユーザインターフェイスを使って選択画像をプリンタ出力できるようになっている。しかし、同じシステム内に図４で説明した画像印刷プログラムがセットアップされている場合には、オペレーティングシステムが提供するインターフェイスでは無く、画像印刷プログラムが起動する。
【００２５】
また、画像印刷プログラムは、画像補正プログラムから起動された場合、図４に示した画像選択画面のうち、フォルダ・ツリー表示エリアを非表示にする。このようにすることで単独起動時と区別出来るようになる。この状態の場合、サムネイル表示エリアに、画像補正プログラムで選択された画像が一覧表示される。さらに、「終了」ボタンを、「戻る」ボタンに変更する。「戻る」ボタンを押下した場合、画像印刷プログラムを終了し、画像補正プログラムに制御を戻す。
【００２６】
このような連携を行う場合、次のような問題が生じる。
【００２７】
・プログラムで扱えるデータ形式の違い、さらに、画像補正・加工処理の有無
・プログラム間で扱うファイル名の伝達
これらの問題を解決するために、本発明によるプログラム間通信方式が有効である。以下、プログラム間通信方式の詳細について述べる。まず、本実施例における通信手順を、図５に示す。
【００２８】
本プログラム間通信方式は、初期化フェイズと、接続フェイズと、終了フェイズの3つのフェイズで構成される。
【００２９】
初期化フェイズは、通信経路を確立し、その経路を用いて、対象となるファイルのリストを共有する。各々のプログラムは、ファイル単位で相手のプログラムに対して処理を要求するが、そのファイルの指定は、ファイル名そのものではなくファイルリストにおける順番で行う。例えば本実施例では、ファイルリストの先頭のファイルを0番として扱う。プログラム間のファイルリストの転送は、共有メモリを介して行う。
【００３０】
次に、接続フェイズになる。接続フェイズでは、処理対象となるファイルをファイル番号と要求条件とを相手のプログラムに通知し、要求されたプログラムはデコード処理などを行ったデータを共有メモリに配置する。配置されたデータを、要求側のプログラムが参照することで、必要なデータの転送を実現する。
【００３１】
最後に、終了フェイズになる。いずれかのプログラムがプログラム間通信の切断要求を相手のプログラムに対して通知し、接続を切断する。図５では、画像印刷プログラムの終了と共にプログラム間通信の接続を切断するようになっているが、切断を要求するプログラムはどちらでも構わない。
【００３２】
図中の「PROCESS_A」「PROCESS_B」については、後述の通信プロトコルの詳細説明において述べる。
【００３３】
以下、本プログラム間通信方式のプロトコルと、各フェイズの詳細について述べる。
【００３４】
（通信プロトコル）
本実施例では、通信経路として、夫々のアプリケーションを表示するメインウィンドウのウィンドウハンドルと、メッセージＩＤを用いる。図５中の「PROCESS_A」と「PROCESS_B」は、夫々のプログラムで規定した通信用メッセージIDである。
【００３５】
Windows（登録商標）では、各ウィンドウは、ウィンドウを識別するウィンドウハンドルを持っており、マウスイベントなどのイベントは、各ウィンドウハンドルに対して送られる。イベントを識別するため、イベントを伝えるメッセージにはメッセージＩＤが割り振られている。メッセージＩＤには、システムで予約された番号と、ユーザが任意に設定できる番号がある。そこで、ユーザ定義のメッセージＩＤとして通信用のプログラム間通信メッセージＩＤを定義し、プログラム間通信の処理を受け持つウィンドウのウィンドウハンドルに対して、プログラム間通信イベントを送付することで、特定のプログラムに対して情報を伝達することが出来る。
ただし、ウィンドウに対するイベント通知では、伝達できる情報量が限られている。Windows（登録商標）の場合、イベントとしてウィンドウに通知可能なデータは、メッセージIDの他に、副イベント情報であるWPARAMとLPARAMの２つのみであるが、WPARAMとLPARAMは、夫々4バイトの整数値である。そこで、画像データなど大きなサイズのデータは、共有メモリを介して転送する。Windows（登録商標）では、共有メモリを特定するために、識別名をつけて管理を行っている。
【００３６】
ここで、本実施例において使用する通信コマンドについて述べる。既に述べたように、ユーザ定義のメッセージIDを使って相手のプログラムにコマンドを送信するので、コマンドとパラメータでトータル8バイトしかデータを送信することができない。そこで、この8バイトを2バイトずつに区切り、それぞれ、コマンド、パラメータ１、パラメータ２、パラメータ３として扱う（図６）。図７に、コマンド一覧を示す。各コマンドの詳細については、各フェイズの詳細説明の中で述べる。
【００３７】
（初期化フェイズ）
初期化フェイズは、プログラム間通信開始処理を行う。即ち、連携動作するプログラムを起動し、通信経路を確定するフェイズが初期化フェイズである。
【００３８】
本実施例では、初期化フェイズにおいては、通信処理が実装されているウィンドウのウィンドウハンドルとメッセージIDを互いに通知しあう必要がある。また、連携動作する２つのプログラムのいずれかが共有メモリを確保し、その識別名を相手のプログラムに伝達する必要がある。本実施例では、相手のプログラムを起動する側のプログラムで共有メモリを確保する。図５の例では、画像補正プログラムで共有メモリを確保して、画像印刷プログラムに共有メモリの識別名を伝達する。
【００３９】
初期化フェイズの処理の流れを図８に示す。
【００４０】
(ステップS801) 画像印刷プログラムを起動する。この時、画像補正プログラムは、通信に使うウィンドウハンドル、メッセージIDを夫々16進数で表記して文字列にしたものと、共有メモリの識別名を順に記述したものを、画像印刷プログラムの実行時オプションとして指定する。また、画像補正プログラムは、プログラム間接続で扱うファイルのリストを共有メモリ上に配置する。
【００４１】
(ステップS802) 画像印刷プログラムは、起動時に実行時オプションを解析し、通信相手のウィンドウハンドル、メッセージID、共有メモリの識別名を取得する。実行時オプションが特に指定されていない場合は単独起動、指定されている場合には他のプログラムに起動されたことが識別できる。このような処理を行うことで、画像印刷プログラムは、前述のように、単独起動時だけフォルダ・ツリー表示エリアを表示することが可能になる。ただし、単独起動チェック処理については図８中では省略している。
【００４２】
(ステップS803) 画像印刷プログラムは、ステップS802で得た共有メモリの識別名を使って、共有メモリ上にあるファイルリストを取得する。
【００４３】
(ステップS804) 画像印刷プログラムは、ステップS802で得たウィンドウハンドル、メッセージIDに対して、SEND_MESSAGE_IDとSEND_WINDOW_HANDLEの2つのコマンドを使って、画像印刷プログラム側でプログラム間通信に利用するウィンドウハンドルとメッセージIDを通知する。SEND_MESSAGE_IDの場合、図６中のパラメータ２とパラメータ３の領域で、通信に使うメッセージIDを伝える。SEND_WINDOW_HANDLEの場合も、パラメータ２とパラメータ３の領域でウィンドウハンドルを通知する。いずれの場合も、パラメータ１の領域は未使用である。
【００４４】
(ステップS805) 画像補正プログラムは、ステップS804で通知されたコマンドから、画像印刷プログラムでプログラム間通信に利用するウィンドウハンドルとメッセージIDを得る。
【００４５】
以上で述べた処理を行うことによって、プログラム間通信の経路を確立することができる。さらに、図９に示す処理を実行することにより、連携動作する２つのプログラムは、あたかも一つのプログラムとして動作するように見せることが可能になる。
【００４６】
(ステップS901) 新たに起動するプログラムを、元々起動していたプログラムと同一の表示位置・大きさで表示する。本実施例では、画像印刷プログラムが画像補正プログラムから起動された場合、画像補正プログラムと同じ位置・大きさで、画像印刷プログラムを表示する。
【００４７】
(ステップS902) ステップS901で表示したプログラムを、最前面に表示する。このようにすることで、元々起動していたプログラムを覆い隠すことが可能になる。
【００４８】
(ステップS903) 非表示要求コマンドを受け取ったプログラムを非表示にする。
【００４９】
ここで、図8において、ステップS802以降のタイミング、なおかつS805に到達する前に画像補正プログラムを終了することが考えられる。例えば、Windows（登録商標）では、ALTキーとF4キーを同時に押下することによって、指定したウィンドウを閉じるメニューを表示することができる。ここで、プログラムの終了を選択することで、プログラムを終了させることができる。このような操作を行うことで、起動側と、新たに起動したプログラムの連携が確立する前に、起動側のプログラムを終了することができる。このようにすると、プログラムが想定外の状態になり、本プログラム連携方式を安心して使うことが出来なくなってしまう。
【００５０】
そこで、図１９のように、図８の処理に加え、連携開始から連携を確立するまでの間、キー入力一般を無視するような仕様にすることで、上記のような状況を回避することができる。ステップS1901やステップS1907のような処理は、Windows（登録商標）では例えば、EnableWindow関数を用い、ステップS1901でDisable状態、ステップS1907でEnable状態にすることで実現可能である。
【００５１】
このような処理を行うことで、新たに起動したプログラムの表示位置を変更しても、元々起動していたプログラムは表示されず、２つのプログラムは単に表示モードが変わっただけのように見せることが可能に成る。
【００５２】
Windows（登録商標）では、ウィンドウハンドルが取得できていれば、他のプロセスであっても任意のウィンドウを非表示にすることが可能なので、上記手順でウィンドウを入れ替えることが可能である。他のプロセスで起動しているプログラムを非表示にできないオペレーティングシステムの場合には、図１０に示す処理を行えばよい。
【００５３】
(ステップS1001) 新たに起動するプログラムを、元々起動していたプログラムと同一の表示位置・大きさで表示する。本実施例では、画像印刷プログラムが画像補正プログラムから起動された場合、画像補正プログラムと同じ位置・大きさで、画像印刷プログラムを表示する。
【００５４】
(ステップS1002) ステップS1001で表示したプログラムを、最前面に表示する。このようにすることで、元々起動していたプログラムを覆い隠すことが可能になる。
【００５５】
(ステップS1003) 相手のプログラムに対して「非表示要求コマンド」を送る。
【００５６】
(ステップS1004) 非表示要求コマンドを受け取ったプログラムが自身を非表示にする。
【００５７】
（接続フェイズ）
接続フェイズは、プログラム間通信が確立された状態で、必要なデータの要求・転送を行うフェイズである。
【００５８】
必要な画像の要求は、図７に示したコマンドのうち、DECODEを使って行う。本発明によるプログラム間通信方式の特徴として、デコード要求時に必要な画像の情報を伝えるという点がある。例えば本実施例では、画像の色深度、画像サイズ（幅、高さ）、色空間を指定する。前述のように、通知できるデータのデータ長さには制限があるので、色深度と色空間の指定は、図７に示したコマンドとして用意されている。具体的には、デコード要求の値は0x00から0x7fの値をとるが、この値の下位4bitで、要求する画像の色深度を指定する。例えば下位4bitで10進数で8が指定されていれば、RGB各色8bitのデータを要求していることになる。ただし、下位4bitが0000bである場合には、画像データ本体は要求しないという指定になる。この場合には、撮影時情報などの付属情報だけを要求したことになる。
【００５９】
次に、DECODEコマンドの上位4bitについて説明する。上位4bitのうち、上2bitは常に00bであり、下2bitで色空間を指定する。例えば本実施例では、00bでsRGB、01bでAdobe RGB、10bでWide RGB、11bはその他の色空間とする。11bの場合は、画像データと共に、ICC Profileを付与したデータを要求していることを示す。
【００６０】
パラメータ１は、ファイル名の指定に用いる。ファイル名の指定は、前述のように初期化フェイズで共有したファイルリストでの番号で指定する。したがって、一度に共有できるファイル数の上限は、65536である。
【００６１】
パラメータ２は、画像データの画像幅をピクセル単位で指定する。パラメータ３は、画像データの画像の高さをピクセル単位で指定する。
【００６２】
このようなメッセージを用いることで、必要な画像ファイルを特定しつつ、要求する画像の情報を伝えることができる。
【００６３】
さらに、画面表示用と印刷表示用で異なる画質の画像が必要な場合がある。例えば本実施例における画像印刷プログラムでは、画面表示時には加工処理を適用しない画像を表示する方がレスポンスの良いアプリケーションを提供可能であるが、印刷時は加工処理済みの画像が必要になる。そこで、画面表示時にはsRGB、印刷時にはsRGB以外の色空間を要求することが考えられる。例えば本実施例では、印刷時にはAdobeRGBを要求する。
【００６４】
さらに、この接続フェイズにおける画像データ要求時の処理に、本プログラム間通信方式の特徴がある。図１１に、通信処理の流れを示す。
【００６５】
(ステップS1101) デコード要求を相手のプログラムに送る。この時点で、このプログラムの動作はブロックされる。
【００６６】
(ステップS1102) デコード要求を受け取ったプログラムは、画像データや付属情報を共有メモリに置く。共有メモリに置くデータがメモリ上に無い場合には、画像データをデコードし、画像処理を適用する処理を行う。画像データを共有メモリに置いた後、プログラム間通信メッセージに対する処理を終え、メッセージループに処理を戻す。この時点で、ステップS1101でブロックされていたプログラムは、ブロック解除される。
【００６７】
(ステップS1103) 共有メモリから、画像データや付属情報を取り出した後、共有メモリのロックを解除する。
【００６８】
共有メモリをロックするとは、同一プログラム内からの共有メモリへのアクセスをブロックするという意味で、プログラムがマルチスレッドであった場合に共有メモリへのアクセスが衝突するのを防ぐことができる。プログラムがシングルスレッドである場合には、この処理は省略することができる。
【００６９】
ステップS1101ではプログラムがブロックされるが、スレッドが使える環境では、デコード要求を出したスレッドの動作がブロックされる。このように動作させるために、例えばWindows（登録商標）では、DECODEコマンドをシステムで提供されているSendMessage関数を使って送信することで実現することが出来る。SendMessage関数でメッセージを送る場合、そのメッセージに対する処理が終了するまでSendMessage関数はブロックされるという仕様になっている。
【００７０】
このような動作をすることで、画像要求処理が、あたかも一つの関数のように振舞うようになる。このような同期的な動作ではなく、夫々のプログラムが非同期に動作する場合、画像を要求したプログラムは、画像データが共有メモリに完全に転送されたかどうかを画像を要求する度に気にかけなくてはならなくなり、プログラムの動作が複雑になりがちである。さらに、画像を要求されたプログラムの方も、共有メモリにデータを転送しても良いかどうかを常に意識して実装されなくてはならなくなる。この画像転送部分を完全に同期的に動作させることで、このような部分での実装コストを大幅に低減することが可能になる。
【００７１】
ステップS1101における画像のデコード要求時には、画像サイズや色空間などの要求条件を指定することは前述の通りである。しかし、要求された側がその条件で画像データを作成することができるかどうかは分からない。
【００７２】
そこで本プログラム間通信方式を適用した場合、ステップS1102における画像生成処理において要求条件はあくまで参考情報であって、プログラムや連携動作の高速化のために、その条件を使って最適な画像データを作成しても構わない。逆に、要求された条件を一切無視して画像データを作成しても構わない。
【００７３】
そのため、デコード要求を行った側は、受け取った画像を自らのプログラムで期待するサイズや色に自分で変換する必要がある。仮に画像印刷プログラムにカラーマネジメントの機能が用意されていなかった場合、表示される画像の色は正確ではなくなってしまうが、これは画像印刷プログラムの仕様とみなすことができる。
【００７４】
このような「ゆるい」連携を行うことで、お互いのプログラムが持つ機能を利用することも、利用しないことも出来るようになる。これは、プログラムの動作環境や、プログラム仕様そのものに応じて、プログラムの連携の密度をダイナミックに変化させることができるということである。このような連携を実現したプログラム間通信方式は、本発明の重要な特徴の一つであり、他の方式に例を見ない。
【００７５】
ステップS1103で取得するデータは、画像データと付属情報となっているが、この付属情報とは例えば、撮影時情報とICCプロファイルが考えられる。例えば本実施例では、色空間がsRGB、AdobeRGB、WideRGB以外である場合、画像データと共にICCプロファイルを転送する。色空間がsRGB、AdobeRGB、WideRGBである場合には、撮影時情報に色空間情報を格納する。このようにすることで、要求する色空間と作成した画像データの色空間が異なる場合でも、正しい色空間情報を伝えることができるようになる。また、共有メモリを介して受け渡される画像データはDIB形式とする。DIB形式はWindows（登録商標）のシステム標準のデータ形式であり、受け取ったデータをそのまま描画に使えるという利点がある。
【００７６】
図１２に、共有メモリに格納するデータのフォーマットを示す。共有メモリの先頭には、各データへのオフセットとデータサイズが格納されており、これを参照することで、必要なデータにアクセスすることが可能になる。データへのオフセットは、共有メモリ先頭からデータ先頭までのバイト数である。データサイズが0の場合、該当するデータは格納されていないことを示す。
【００７７】
状態コードは、本実施例では常に0である。
【００７８】
ヘッダサイズは、図１２に示した例の場合は、画像データ、撮影時情報、ICCプロファイルの各オフセットとデータサイズで、計24byteになる。
【００７９】
（終了フェイズ）
接続フェイズは、プログラム間通信の接続を切断するフェイズである。ここで、例えば画像印刷プログラムには、「戻る」ボタンが用意されている。また、Windows（登録商標）では、ウィンドウの右上に用意された「ウィンドウを閉じる」ボタンで、プログラムを終了することが出来る。「戻る」ボタンを押下した場合、画像印刷プログラムを終了すると共に、画像補正プログラムに制御を戻す。また、「ウィンドウを閉じる」ボタンを押下した場合、画像補正プログラムと画像印刷プログラムの両方を終了する。このような動作にすることで、２つのプログラムが連携動作する場合、完全に一つのアプリとして動作しているかのように見せることができる。
【００８０】
図７中のEND_PROCESSは、本実施例における「戻る」ボタンを押下した場合の処理、即ち、起動されたプログラムだけを終了するためのコマンドである。このコマンドを受け取ったプログラムは、単にプログラム間通信処理のみを終了する。
【００８１】
図７中のEND_PARENTは、本実施例における「ウィンドウを閉じる」ボタンを押下した場合の処理、即ち、双方のプログラムを終了するためのコマンドである。このコマンドを受け取ったプログラムは、直ちにプログラム自身の終了処理を実行し、プログラムを終了する。
【００８２】
本実施例では、「戻る」ボタンを押した場合には図１３に示す処理を行い、「ウィンドウを閉じる」ボタンを押した場合、画像印刷プログラムは、画像補正プログラムに対してEND_PARENTコマンドを送信してプログラムを終了する。双方のプログラムは、END_PARENTコマンドを受け取った場合、直ちにプログラムの終了処理を行う仕様になっている。
【００８３】
本実施例では、連携動作した場合、画像補正プログラムは非表示の状態になっている。そこで、END_PROCESSコマンドが発行された場合、画像補正プログラムを表示状態に戻さなくてはならない。図１３に、その処理の流れを示す。
【００８４】
(ステップS1301) 元々起動していたプログラムを、後で起動したプログラムと同一の表示位置・大きさで表示する。本実施例では、画像補正プログラムを画像印刷プログラムと同じ位置・大きさで表示する。
【００８５】
(ステップS1302) ステップS1301で表示したプログラムを、最前面に表示する。このようにすることで、後で起動したプログラムを覆い隠すことができる。
【００８６】
(ステップS1303) 後で起動したプログラムを非表示にする。非表示にした後、後で起動したプログラムを終了する。
【００８７】
このような処理を行うことで、プログラムがスイッチしたのではなく、モードが切り替わっただけのように見せることが可能になる。初期化フェイズの時と同様に、他のプロセスの表示状態を変更できないシステムにおいては、図１３の処理の代わりに図１４に示す処理を行う。即ち、(ステップS1401) 後で起動したプログラムから元々起動していたプログラムに対し、「表示要求コマンド」を送る。
【００８８】
(ステップS1402) 表示要求コマンドを受け取ったプログラムは、表示位置を通信相手と同じ位置、同じ大きさに変更した後、自身を表示状態にする。また、ウィンドウを最前面に移動する。
【００８９】
(ステップS1403) 表示要求コマンドを受け取ったプログラムは、通信相手に対して「終了要求コマンド」を送る。
【００９０】
(ステップS1404) 終了要求コマンドを受け取ったプログラムは、表示状態を非表示に変更した後、プログラムの終了処理を行い、プログラムを終了する。
という手順で処理することにより、同様の処理を実現することができる。
【００９１】
以上述べたように、本実施例では、ウィンドウの表示状態をコントロールすることで表示が切り替わったように見せる仕様としたが、この仕様を省略しても構わないことは言うまでも無い。
【００９２】
（第二の実施形態）
本実施例では、第一の実施例で述べたプログラム間通信方式において、画像データの他に撮影時情報と印刷用補正情報を転送する構成について述べる。
【００９３】
Exif2.2(Exif-Print)と呼ばれる規格がある。これは、撮影時情報を使った画像の自動補正に関する規格である。第一の実施例では、印刷時の画像補正は行わなかったが、本実施例による画像印刷プログラムでは、撮影時情報によって、印刷対象画像を自動補正する。このような印刷用自動補正処理によって、撮影状況に応じて最適なプリントを提供することができる。なお、印刷用自動補正処理の内容については、本発明の主眼ではないので省略する。
【００９４】
第一の実施例のように画像補正プログラムと画像印刷プログラムが連携動作した場合、画像印刷プログラムにおける印刷用自動補正処理を、画像補正プログラム側でコントロールするべきである。画像補正プログラムで適用した補正と印刷用自動補正処理が互いに影響し合い、思わぬ出力結果になることがあるからである。しかし、撮影情報を印刷することを考えた場合、撮影情報を修正するのは望ましいことではない。そこで、本実施例では、撮影時情報としてオリジナルの撮影時情報を、印刷用自動補正処理に利用する印刷用情報としてオリジナルの撮影時情報との差分情報を、画像印刷プログラムへ送る。画像印刷プログラム側では、撮影時情報付き印刷ではオリジナルの撮影時情報を利用し、印刷用自動補正処理では、オリジナルの撮影時情報に、印刷用情報を上書きしたものを利用する。この処理の様子を図１５に示す。図１５の例では、画像補正プログラム側で鮮やかさを調整したので、印刷用情報では鮮やかさに関するパラメータを変更している。
【００９５】
このような処理を行うことで、撮影時情報印刷で利用する情報はオリジナルのままで、自動補正結果は画像補正プログラム側からコントロールすることができ、最適なプリントを得ることができる。
【００９６】
第一の実施例では、画像要求時の共有メモリ上でのデータ配置は図１２のようになっていたが、本実施例では図１６のような配置とする。この場合、ヘッダサイズは32byteになる。
【００９７】
このような仕組みを導入することで、画像補正プログラム側で、印刷用自動補正処理を禁止する設定にすることもできるし、撮影時情報を画像補正内容に応じて書き換えた状態で印刷用自動補正処理を実行させる設定にすることも可能になる。
【００９８】
（第三の実施形態）
第一の実施例では、大量のデータを転送するための共有メモリのサイズが、転送対象となるデータのサイズより小さい場合の処理については触れていなかった。本実施例では、このような状況における共有メモリの再配置の手順について述べる。
【００９９】
本実施例では、第一の実施例で常に０であった、状態コードを使う。共有メモリが足りない場合、図１７に示す手順で共有メモリをリアロケートする。
【０１００】
(ステップS1701) 新しい共有メモリの領域を確保する。共有メモリの識別名は24バイト以下になるように設定する。また、識別名はNullターミネイトする。つまり、識別名の末尾は必ず0x00である。
【０１０１】
(ステップS1702) 古い領域の先頭4バイト(状態コード)に、0xFFFF FFFFを格納する。通常はこの後ろに図１２や図１６に示したようなデータが続くが、状態コードが0xFFFF FFFFである場合には、新しい共有メモリの識別名を格納する。
【０１０２】
(ステップS1703) 新しい共有メモリをクリエイトする。
【０１０３】
(ステップS1704) 古い共有メモリをクローズする。
【０１０４】
後は、新しい共有メモリに対して、転送対象であるデータを格納する。
【０１０５】
次に、読み込み側の処理について述べる。共有メモリのデータを読み込む場合、第一の実施例や第二の実施例では特に状態コードをチェックしなかったが、本実施例では状態コードをチェックして、新しい共有メモリが確保されたかどうかを確認する。共有メモリの再割り当て処理の流れを示す図を図１８に示す。
【０１０６】
(ステップS1801) 状態コードをチェックする。状態コードが0xFFFF FFFFの場合、ステップS1802へ進む。そうでない場合、処理を終了する。
【０１０７】
(ステップS1802) 共有メモリの先頭から5バイト目以降を読み込み、新しい共有メモリの識別名を取得する。
【０１０８】
(ステップS1803) 古い共有メモリをクローズする。
【０１０９】
(ステップS1804) 新しい共有メモリをオープンする。
【０１１０】
Windows（登録商標）における共有メモリは、参照している全てのプログラムからクローズされた場合、システムから削除される。以上述べたような処理を行うことで、共有メモリの再割り当てを行うことが可能になる。
【０１１１】
（第四の実施形態）
本発明によるプログラム間通信方式を用いると、通信処理を局所化することができる。したがって、プログラム間通信のための処理を、プログラム間通信モジュールという形でカプセル化することによって、プログラムの開発者にプログラム間通信の手順などを意識させることなくプログラム間通信を実現させることができ、開発コストを低減することが可能になる。本実施例では、このようなモジュール化の実現のための概要について説明する。
【０１１２】
本発明によるプログラム間通信方式では、図７に示したコマンドがやりとりされるだけになっている。ここで、DECODEコマンド以外は、自動応答可能である。
【０１１３】
SEND_MESSAGE_IDを受け取った時に返す値は、このコマンドを受け取る時点で通信用メッセージIDが確定していることになる。これは、SEND_WINDOW_HANDLEを受け取ったときに返すべきウィンドウハンドルの値も同様である。したがって、この２つについては、通信用メッセージIDを処理するルーチンの先頭で、自動応答することが可能である。
【０１１４】
次に、END_PROCESSとEND_PARENTであるが、これらも受信後の処理は決まっている。END_PROCESSの場合は、プロセス間通信用の情報を初期化して、通信を切断すれば良く、END_PARENTの場合は、プログラムの終了処理を開始するだけである。Windows（登録商標）の場合、プログラムのルートウィンドウに対して、WM_CLOSEメッセージを送ると、プログラムの終了処理が開始される。したがって、この部分の処理も、SEND_MESSAGE_IDやSEND_WINDOW_HANDLEと同様に自動応答することが可能である。
【０１１５】
さらに、初期化フェイズの処理についても、プログラムの起動時オプションで必要な情報を伝えるので、起動オプションを解析することで、他のプログラムから起動されたかどうかの判断が可能である。さらに、解析が完了した時点で通信相手のウィンドウハンドルや通信用メッセージIDが取得できるので、ここに対して、プログラムのウィンドウハンドルや通信用メッセージIDを通知するだけでよい。
【０１１６】
ファイルのリスト共有についても、前述のように通信経路が確定した時点で共有メモリの識別名も伝達されるので、プログラム作成者には共有メモリを使っていることを意識させることなくファイル名の共有が可能になる。
【０１１７】
以上述べたように、本プログラム間通信方式では、通信に必要な部分の殆どを、プログラム作成者から隠蔽することが可能になる。通信部分をプログラム作成者に対して隠蔽することで、通信のタイミングなどを共通化し、スムーズなプログラム間通信を実現することができるようになる。これも、本プログラム間通信方式が、画像データの転送に特化したものであり、通信手順が局所化されていることの利点の一つである。
【０１１８】
（第五の実施形態）
本発明によるプログラム間通信方式を用いる場合、デコード要求に期待する画像サイズが含まれている。本実施例では、そのサイズに近い画像サイズを得る方法と、その画像サイズに応じた加工処理を適用する方法について述べる。この具体例として、第一の実施例の接続フェイズにおける画像補正プログラムの処理について説明する。
【０１１９】
通常のデコード画像サイズ（以後、フルデコードサイズ）の2のn乗分の１サイズでデコードすると、フルデコードサイズを得るより高速に処理できるデコーダが存在する。例えば、Independent JPEG Groupが作成したjpegsrc.v6bにはこのような機能がある。
【０１２０】
そこで、要求画像サイズより大きく、フルデコードサイズの画像幅、画像高さを各々２の倍数分の１になるようなサイズを求め、このサイズでデコード処理を行うことで、デコード処理の高速化を達成する。図２１は、このような高速化のために、要求画像サイズからデコード画像サイズを求める処理のフローチャートである。
【０１２１】
まず、ステップS2101で、要求画像サイズの画像幅をWidthrに、画像高さをHeightrに代入する。ステップS2102で、画像のフルデコード時のサイズを取得し、フルデコード時の画像幅をWidthi、画像高さをHeightiに代入する。ステップS2103で出力画像サイズの画像幅をWidtht、画像高さをHeighttに代入する。このWidtht、Heighttがデコード画像のサイズになる。ステップS2104でWidthi、Heightiのいずれかが要求画像サイズWidthr、Heightrより小さいかを判定する。いずれかが小さい場合、処理を終了する。そうでない場合、ステップS2105へ進む。ステップS2105で、WidthiをWidthtに、HeightiをHeighttに代入してステップS2106へ進む。ステップS2106で、WidthiとHeightiを1/2倍してステップS2104の判定処理へ戻る。
【０１２２】
このような処理を行うことで、要求画像サイズより大きく、なおかつ要求画像サイズに最適なデコードサイズを求めることが出来る。
【０１２３】
次に、第一の実施例で加工処理の例として挙げたコピースタンプ処理を適用する処理について説明する。コピースタンプ処理内容を保持した加工情報は、フルデコードサイズに対応するパラメータを保持しているため、デコード画像サイズに応じてパラメータを変換する必要がある。本実施例における加工処理の流れを示すフローチャートを図２２に示す。
【０１２４】
ステップS2201で、画像に適用される加工処理数nを得る。ステップS2202で処理カウンタcを0に初期化する。ステップS2203で、全ての加工処理のパラメータを変換したかどうかを確認し、全てのパラメータが変換済みであった場合ステップS2206へ進み、加工処理を適用する。パラメータ変換が終わっていない場合、ステップS2204へ進んでカウンタcを進める。ステップS2205でc番目のパラメータの変換処理を適用し、ステップS2203へ戻る。パラメータの変換処理の詳細は後述する。
【０１２５】
このような処理を行うことで、図２１で示したデコードサイズに応じた加工処理を適用することが可能になる。
【０１２６】
最後に、パラメータの変換処理について述べる。パラメータ変換処理は、フルデコードサイズにおける加工処理パラメータを、デコードサイズに応じて変換する処理である。第一の実施例で述べた加工処理の場合、フルデコードサイズの画像幅をW、実際のデコードサイズの画像幅をw、半径をr、コピー位置ベクトルをa、コピー先座標を(x,y)とすると、変換後のパラメータr'、a'、(x', y')は、次式で表される。
【０１２７】
r' = r * w / W
a' = (‘ w / W ) a
( x', y' ) = w / W ( x, y )
なお、本実施例では実際にデコードするサイズがフルデコードサイズの2のn乗分の１である
【図面の簡単な説明】
【０１２８】
【図１】実施例におけるシステム構成を表す図である。
【図２】実施例における画像補正プログラムの概要を示す図である。
【図３】実施例における複数画像選択時の画像補正プログラムの表示画面を示す図である。
【図４】実施例における画像印刷プログラムの概要を示す図である。
【図５】実施例におけるプログラム間通信の概要を示す図である。
【図６】実施例におけるプログラム間通信のコマンド形式の一例を示す図である。
【図７】実施例におけるプログラム間通信のコマンド一覧である。
【図８】実施例における通信経路の確立処理の流れを示すフローチャートである。
【図９】実施例における初期化フェイズにおける画面切替処理の流れを示すフローチャートである。
【図１０】実施例における初期化フェイズにおける画面切替処理の流れを示すフローチャートである。
【図１１】実施例における接続フェイズにおける画像データ転送処理処理の流れを示すフローチャートである。
【図１２】第一の実施例における共有メモリ上のデータ形式を示すフローチャートである。
【図１３】実施例における終了フェイズにおける画面切替処理の流れを示すフローチャートである。
【図１４】実施例における終了フェイズにおける画面切替処理の流れを示すフローチャートである。
【図１５】第二の実施例に印刷用情報の利用方法の一例を示す図である。
【図１６】第二の実施例における共有メモリ上のデータ形式を示すフローチャートである。
【図１７】第三の実施例における新しい共有メモリ領域の確保処理の流れを示すフローチャートである。
【図１８】第三の実施例における新しい共有メモリ領域の認識・再割り当て処理の流れを示すフローチャートである。
【図１９】実施例における連携開始処理中の起動側プログラムの終了回避方法を示すフローチャートである。
【図２０】第一の実施例におけるコピースタンプ処理の主なパラメータを示す図である。
【図２１】第五の実施例におけるデコード処理の流れを示すフローチャートである。
【図２２】第五の実施例における加工処理の流れを示すフローチャートである。
【図１】
2006209321.tif 000003
【図２】
2006209321.tif 000004
【図３】
2006209321.tif 000005
【図４】
2006209321.tif 000006
【図５】
2006209321.tif 000007
【図６】
2006209321.tif 000008
【図７】
2006209321.tif 000009
【図８】
2006209321.tif 000010
【図９】
2006209321.tif 000011
【図１０】
2006209321.tif 000012
【図１１】
2006209321.tif 000013
【図１２】
2006209321.tif 000014
【図１３】
2006209321.tif 000015
【図１４】
2006209321.tif 000016
【図１５】
2006209321.tif 000017
【図１６】
2006209321.tif 000018
【図１７】
2006209321.tif 000019
【図１８】
2006209321.tif 000020
【図１９】
2006209321.tif 000021
【図２０】
2006209321.tif 000022
【図２１】
2006209321.tif 000023
【図２２】
2006209321.tif 000024