(57)【要約】【課題】  より少ない処理負荷でプログラム間通信を実現することができるプログラム間通信装置、プログラム間通信方法およびそのプログラムを提供する。【解決手段】  画像補正プログラムと画像印刷プログラムは、初期化フェイズ５１において一対の通信経路を確立する。この時、画像補正プログラムは、画像印刷プログラムと共有する共有メモリのメモリ領域を確保する。次に、接続フェイズ５２において、画像印刷プログラムは、画像データを特定するファイル番号および画像データのデコード処理を要求する要求情報を、確立した通信経路を用いて画像補正プログラムへ通知する。これにより、画像補正プログラムは、通知されたファイル番号で特定される画像データに対して要求情報に応じたデコード処理を行った場合に、デコード処理後の画像データ本体のデータおよび画像データに付属する付属情報を共有メモリに格納する。【選択図】  図１
2005050307.tif 000002
【特許請求の範囲】
【請求項１】
共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置であって、
前記第１のプログラムと前記第２のプログラム間に一対の通信経路を確立する通信経路確立手段と、
前記第１のプログラムおよび前記第２のプログラムが共有する共有メモリのメモリ領域を確保する共有メモリ確保手段と、
前記メディア・オブジェクトを特定する特定情報および前記特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、前記通信経路確立手段が確立した前記通信経路を用いて前記第１のプログラムから前記第２のプログラムへ通知する通知手段と、
前記第２のプログラムが前記通知手段により通知された前記特定情報で特定されるメディア・オブジェクトに対して前記要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよび前記メディア・オブジェクトに付属する付属情報を前記共有メモリ確保手段が確保した前記共有メモリに格納することで前記第２のプログラムから前記第１のプログラムへ前記処理後のメディア・オブジェクト本体のデータおよび前記付属情報を転送する転送手段と
を具備することを特徴とするプログラム間通信装置。
【請求項２】
前記第１のプログラムと前記第２のプログラムは、複数のプログラムを並列実行可能な一つのコンピュータ上で動作することを特徴とする請求項１に記載のプログラム間通信装置。
【請求項３】
前記通信経路確立手段は、前記第１のプログラムおよび前記第２のプログラムのウインドウを制御するウインドウシステムにおけるウインドウ識別情報とウインドウ処理関数を特定するメッセージ識別子とを利用することを特徴とする請求項１または請求項２に記載のプログラム間通信装置。
【請求項４】
前記通信経路確立手段は、前記第１のプログラムが前記第２のプログラムを起動する際に、前記第１のプログラムのウインドウにおける前記ウインドウ識別情報である第１のウインドウ識別情報と前記第１のプログラムのウインドウにおける前記メッセージ識別子である第１のメッセージ識別子とを少なくとも含む起動時パラメータを前記第２のプログラムに送信することを特徴とする請求項３に記載のプログラム間通信装置。
【請求項５】
前記通信経路確立手段は、前記起動時パラメータを前記第２のプログラムに送信した場合に、前記第２のプログラムのウインドウにおける前記ウインドウ識別情報である第２のウインドウ識別情報と前記第２のプログラムのウインドウにおける前記メッセージ識別子である第２のメッセージ識別子とを少なくとも含む通信経路情報を、前記起動時パラメータを基に送信先として特定した前記第１のプログラムへ送信することを特徴とする請求項４に記載のプログラム間通信装置。
【請求項６】
前記共有メモリは、メモリ識別情報により前記メモリ領域確保手段が確保したメモリ領域を特定でき、
前記通信経路確立手段は、前記起動時パラメータおよび前記通信経路情報に前記メモリ識別情報を更に含めることを特徴とする請求項４または請求項５に記載のプログラム間通信装置。
【請求項７】
前記通信経路確立手段が利用する前記ウインドウ識別情報と前記メッセージ識別子とを基に、前記第１のプログラムのウインドウと前記第２のプログラムのウインドウにおける表示位置および大きさを同じに制御するウインドウ制御手段を更に具備することを特徴とする請求項３から請求項６のいずれか１項に記載のプログラム間通信装置。
【請求項８】
前記メディア・オブジェクトが画像データを含むものである場合に、前記通知手段は、前記画像データの解像度、色深度、色空間識別情報のいずれか一つまたは複数の組み合わせを含む前記要求情報を、前記第１のプログラムから前記第２のプログラムへ通知することを特徴とする請求項１から請求項７のいずれか１項に記載のプログラム間通信装置。
【請求項９】
前記第２のプログラムが前記画像データを補正または加工する画像処理プログラムであり、前記要求情報に前記画像データの解像度、色深度、色空間識別情報のいずれか複数の組み合わせを含む場合に、前記第２のプログラムは、前記特定情報で特定されるメディア・オブジェクトに対して、前記要求情報に含まれる複数の要求において実行可能な要求のみに応じた処理を行うことを特徴とする請求項８に記載のプログラム間通信装置。
【請求項１０】
前記要求情報において要求したにも関わらず前記第２のプログラムの処理において実行されなかった不実行の要求がある場合に、前記第１のプログラムは、前記第２のプログラムが処理後のメディア・オブジェクトに対して、前記不実行の要求に応じた処理の一部または全部を行うことを特徴とする請求項９に記載のプログラム間通信装置。
【請求項１１】
前記メディア・オブジェクトが画像データを含むものである場合に、前記転送手段が前記共有メモリに格納する付属情報には、前記画像データの撮影に関する情報である撮影時情報および／または前記画像データの印刷時に前記画像データを補正するための印刷用情報を含むことを特徴とする請求項１から請求項１０のいずれか１項に記載のプログラム間通信装置。
【請求項１２】
前記第１のプログラムが前記画像データを印刷装置により印刷させる画像印刷プログラムであり、前記付属情報に前記撮影時情報および／または前記印刷用情報が少なくとも含まれる場合に、前記第２のプログラムが処理後の画像データを前記共有メモリより読み出して、前記撮影時情報および／または前記印刷用情報を用いて補正する補正手段を更に具備することを特徴とする請求項１１に記載のプログラム間通信装置。
【請求項１３】
前記メディア・オブジェクト本体のデータおよび前記付属情報を合わせたデータサイズが前記共有メモリのメモリサイズより大きい場合に、新たな共有メモリとなるメモリ領域を確保し、前記新たな共有メモリへ前記メディア・オブジェクト本体のデータおよび前記付属情報を再割り当てする再割り当て手段を更に具備することを特徴とする請求項１から請求項１２のいずれか１項に記載のプログラム間通信装置。
【請求項１４】
前記通信経路確立手段、前記共有メモリ確保手段、前記通知手段、前記転送手段、前記ウインドウ制御手段、前記補正手段、前記再割り当て手段の一部または全部は、前記第１のプログラムおよび前記第２のプログラムに実装されていることを特徴とする請求項１から請求項１３のいずれか１項に記載のプログラム間通信装置。
【請求項１５】
前記ウインドウ制御手段は、前記第１のプログラムのウインドウと同じ表示位置及び同じ大きさで前記第２のプログラムのウインドウを表示してから、前記第１のプログラムのウインドウを非表示に制御することを特徴とする請求項７に記載のプログラム間通信装置。
【請求項１６】
前記ウインドウ制御手段が前記第１のプログラムのウインドウから前記第２のプログラムのウインドウに表示を切り替える処理を行う際に、前記第２のプログラムを起動する直前に前記第１のプログラムに対する入力信号を無視する状態に制御し、前記第１のプログラムと前記第２のプログラムとの連携が確立した後で、前記第１のプログラムに対する入力信号を無視する状態を解除するよう制御する状態制御手段を更に具備することを特徴とする請求項１５に記載のプログラム間通信装置。
【請求項１７】
共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置を用いたプログラム間通信方法であって、
前記第１のプログラムと前記第２のプログラム間に一対の通信経路を確立する第１のステップと、
前記第１のプログラムおよび前記第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、
前記メディア・オブジェクトを特定する特定情報および前記特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、前記第１のステップで確立した前記通信経路を用いて前記第１のプログラムから前記第２のプログラムへ通知する第３のステップと、
前記第２のプログラムが前記第３のステップにより通知された前記特定情報で特定されるメディア・オブジェクトに対して前記要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよび前記メディア・オブジェクトに付属する付属情報を前記第２のステップで確保した前記共有メモリに格納することで前記第２のプログラムから前記第１のプログラムへ前記処理後のメディア・オブジェクト本体のデータおよび前記付属情報を転送する第４のステップと
を有することを特徴とするプログラム間通信方法。
【請求項１８】
共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置用のプログラムを記録した記録媒体であって、
前記第１のプログラムと前記第２のプログラム間に一対の通信経路を確立する第１のステップと、
前記第１のプログラムおよび前記第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、
前記メディア・オブジェクトを特定する特定情報および前記特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、前記第１のステップで確立した前記通信経路を用いて前記第１のプログラムから前記第２のプログラムへ通知する第３のステップと、
前記第２のプログラムが前記第３のステップにより通知された前記特定情報で特定されるメディア・オブジェクトに対して前記要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよび前記メディア・オブジェクトに付属する付属情報を前記第２のステップで確保した前記共有メモリに格納することで前記第２のプログラムから前記第１のプログラムへ前記処理後のメディア・オブジェクト本体のデータおよび前記付属情報を転送する第４のステップと
を前記プログラム間通信装置に実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１９】
共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置用のプログラムであって、
前記第１のプログラムと前記第２のプログラム間に一対の通信経路を確立する第１のステップと、
前記第１のプログラムおよび前記第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、
前記メディア・オブジェクトを特定する特定情報および前記特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、前記第１のステップで確立した前記通信経路を用いて前記第１のプログラムから前記第２のプログラムへ通知する第３のステップと、
前記第２のプログラムが前記第３のステップにより通知された前記特定情報で特定されるメディア・オブジェクトに対して前記要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよび前記メディア・オブジェクトに付属する付属情報を前記第２のステップで確保した前記共有メモリに格納することで前記第２のプログラムから前記第１のプログラムへ前記処理後のメディア・オブジェクト本体のデータおよび前記付属情報を転送する第４のステップと
を前記プログラム間通信装置に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象となるメディア・オブジェクトを扱う複数のプログラムが相互に通信し、全体としてまとまった処理を行うプログラム間通信装置、プログラム間通信方法、コンピュータ読み取り可能な記録媒体およびプログラムに関するものである。
【背景技術】
【０００２】
従来、プログラム間通信のうち機能を補い合うために用いられるものは、プログラムに用意されていない機能を持つプログラムを検索し、検索されたプログラムにその処理の実行を完全に任せるものであった（特許文献１参照。）。例えば、画像印刷ソフトで未対応のデータ形式の画像データを印刷しようとした場合、そのデータ形式の画像データを扱えるプログラムを検索し、そのプログラムにその画像データを画像印刷ソフトで処理可能なデータ形式にデコードするよう処理を任せるという連携を実現するためのプログラム間通信がある。
【０００３】
上述したような複数のプログラムの連携を実現するためには、あるプログラムに備えられていない機能を実現するためのプログラムが何なのかを検索／推定しなくてはならない。また、どのような機能を補うためにプログラム間通信が行われるか分からないので、プログラム間通信の手順が複雑になってしまい、プログラムの連携に非常に気を使って実装しなくてはならない。例えば、連携先のアプリケーション毎に異なる実装をしなくてはならないようなことが考えられる。
【０００４】
【特許文献１】特開平６−１７５８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のプログラム間通信では、あるプログラムにおいて、自ら処理できない機能を補ってくれる連携に最適な他のプログラムを検索する処理の負荷に加えて、連携に必要なプログラム間通信を制御する複雑さ・厳密さによる処理の負荷が非常に高いという問題点があった。
【０００６】
本発明は、上述した事情を考慮してなされたもので、より少ない処理負荷でプログラム間通信を実現することができるプログラム間通信装置、プログラム間通信方法およびコンピュータ読み取り可能な記録媒体およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
この発明は、上述した課題を解決すべくなされたもので、本発明によるプログラム間通信装置においては、共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置であって、第１のプログラムと第２のプログラム間に一対の通信経路を確立する通信経路確立手段と、第１のプログラムおよび第２のプログラムが共有する共有メモリのメモリ領域を確保する共有メモリ確保手段と、メディア・オブジェクトを特定する特定情報および特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、通信経路確立手段が確立した通信経路を用いて第１のプログラムから第２のプログラムへ通知する通知手段と、第２のプログラムが通知手段により通知された特定情報で特定されるメディア・オブジェクトに対して要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよびメディア・オブジェクトに付属する付属情報を共有メモリ確保手段が確保した共有メモリに格納することで第２のプログラムから第１のプログラムへ処理後のメディア・オブジェクト本体のデータおよび付属情報を転送する転送手段とを具備することを特徴とする。
【０００８】
ここで、メディア・オブジェクトとは、画像データ、映像データ、音声データ、文字データ、音楽データなど、マルチメディアに含まれる処理対象となる各種データを示すものである。また、一対の通信経路とは、第１のプログラムから第２のプログラムへコマンドやデータを送信する第１の通信経路と第２のプログラムから第１のプログラムへコマンドやデータを送信する第２の通信経路とが対を成すものである。この通信経路は所定の通信プロトコルにより管理される。
【０００９】
また、本発明によるプログラム間通信装置の一態様例においては、上記通信経路確立手段は、第１のプログラムおよび第２のプログラムのウインドウを制御するウインドウシステムにおけるウインドウ識別情報とウインドウ処理関数を特定するメッセージ識別子とを利用することを特徴とする。
これにより、各プログラムが管理するウインドウの制御コマンドを通じて通信を行うことができる。ここで、例えば上述した「ウインドウシステム」がＯＳであるウィンドウズ（登録商標）である場合には、上述した「ウインドウ識別情報」とはウインドウハンドルであり、「ウインドウ処理関数を特定するメッセージ識別子」とはウインドウプロシージャのメッセージＩＤである。
【００１０】
また、本発明によるプログラム間通信方法においては、共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置を用いたプログラム間通信方法であって、第１のプログラムと第２のプログラム間に一対の通信経路を確立する第１のステップと、第１のプログラムおよび第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、メディア・オブジェクトを特定する特定情報および特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、第１のステップで確立した通信経路を用いて第１のプログラムから第２のプログラムへ通知する第３のステップと、第２のプログラムが第３のステップにより通知された特定情報で特定されるメディア・オブジェクトに対して要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよびメディア・オブジェクトに付属する付属情報を第２のステップで確保した共有メモリに格納することで第２のプログラムから第１のプログラムへ処理後のメディア・オブジェクト本体のデータおよび付属情報を転送する第４のステップとを有することを特徴とする。
【００１１】
また、本発明によるコンピュータ読み取り可能な記録媒体は、共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置用のプログラムを記録した記録媒体であって、第１のプログラムと第２のプログラム間に一対の通信経路を確立する第１のステップと、第１のプログラムおよび第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、メディア・オブジェクトを特定する特定情報および特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、第１のステップで確立した通信経路を用いて第１のプログラムから第２のプログラムへ通知する第３のステップと、第２のプログラムが第３のステップにより通知された特定情報で特定されるメディア・オブジェクトに対して要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよびメディア・オブジェクトに付属する付属情報を第２のステップで確保した共有メモリに格納することで第２のプログラムから第１のプログラムへ処理後のメディア・オブジェクト本体のデータおよび付属情報を転送する第４のステップとをプログラム間通信装置に実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００１２】
また、本発明によるプログラムは、共通のメディア・オブジェクトを連携して処理可能な第１のプログラムと第２のプログラムの間におけるプログラム間通信を行うプログラム間通信装置用のプログラムであって、第１のプログラムと第２のプログラム間に一対の通信経路を確立する第１のステップと、第１のプログラムおよび第２のプログラムが共有する共有メモリのメモリ領域を確保する第２のステップと、メディア・オブジェクトを特定する特定情報および特定情報により特定したメディア・オブジェクトの処理を要求する要求情報を、第１のステップで確立した通信経路を用いて第１のプログラムから第２のプログラムへ通知する第３のステップと、第２のプログラムが第３のステップにより通知された特定情報で特定されるメディア・オブジェクトに対して要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよびメディア・オブジェクトに付属する付属情報を第２のステップで確保した共有メモリに格納することで第２のプログラムから第１のプログラムへ処理後のメディア・オブジェクト本体のデータおよび付属情報を転送する第４のステップとをプログラム間通信装置に実行させるためのプログラムである。
【発明の効果】
【００１３】
これにより、本発明によるプログラム間通信装置、プログラム間通信方法、コンピュータ読み取り可能な記録媒体およびプログラムは、第１のプログラムと第２のプログラム間に一対の通信経路を確立して、第１のプログラムおよび第２のプログラムが共有する共有メモリのメモリ領域を確保して、メディア・オブジェクトを特定する特定情報およびそのメディア・オブジェクトの処理を要求する要求情報を、確立した通信経路を用いて第１のプログラムから第２のプログラムへ通知して、第２のプログラムが通知された特定情報で特定されるメディア・オブジェクトに対して要求情報に応じた処理を行った場合に、処理後のメディア・オブジェクト本体のデータおよびメディア・オブジェクトに付属する付属情報を共有メモリに格納することで第２のプログラムから第１のプログラムへ処理後のメディア・オブジェクト本体のデータおよび付属情報を転送するので、第１のプログラムと第２のプログラムが連携して一つのメディア・オブジェクとを処理する際に、以下に示す特徴により、より少ない処理負荷でプログラム間通信を実現することができる。
・２プログラム間の通信経路を一対の通信経路に限定している。
・一般的にデータ容量の大きいメディア・オブジェク本体のデータや付属情報を、共有メモリを介して転送している。
すなわち、通信経路を限定しているので、余分な通信管理処理が発生しない。また、データ容量の大きいデータを共有メモリで共有しているので、従来のように共有メモリが無い場合に各プログラムがデータを処理する度に、各プログラムで各々確保したメモリ領域に上記データを移動する処理などが省略できる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を説明する。
〔第１の実施形態〕
まず、本発明の第１の実施形態におけるコンピュータシステムの概要について説明する。
図１は、第１の実施形態におけるコンピュータシステムのハードウェア構成を示す図である。図１において、ＣＰＵ１０１は、システム全体の動作をコントロールし、一次記憶１０２に格納されたプログラムの実行などを行う。一次記憶１０２は、主にメモリであり、二次記憶１０３に記憶されたプログラムなどを読み込んで格納する。二次記憶１０３は、例えばハードディスクなどの不揮発性の記録媒体である。一般に一次記憶１０２の容量は二次記憶１０３の容量より小さく、ＣＰＵ１０１は、一次記憶１０２に格納しきれないプログラムやデータなどを二次記憶１０３に格納する。また、ＣＰＵ１０１は、長時間記憶しなくてはならないデータなども二次記憶１０３に格納する。
【００１５】
本実施形態では、種々のプログラムを二次記憶１０３に格納し、その中より実行対象となるプログラムを一次記憶１０２に読み込んでＣＰＵ１０１が実行処理を行う。入力デバイス１０４は、入力装置であり、例えば、コンピュータシステムのコントロールに用いるマウスやキーボードの他、画像データの入力に必要なカードリーダ、スキャナ、フィルムスキャナなどである。また、出力デバイス１０５は、表示装置と印刷装置であり、例えば液晶モニタやプリンタなどである。尚、上述したコンピュータシステムのハードウェア構成は一例であり、本発明は、コンピュータプログラムを実行可能なハードウェア構成を備える装置やシステムに用いて好適である。
【００１６】
また、図１に示したコンピュータシステムには、複数のプログラムを並列実行可能なオペレーティングシステム（以下、ＯＳとする）およびＯＳ上で動作可能な種々のアプリケーションプログラムが搭載され、ＣＰＵ１０１により実行可能である。このＯＳは、コンピュータシステムの操作者に、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を提供する。これにより、操作者は、上述した入力デバイス１０４からＧＵＩを操作することで種々のアプリケーションプログラムを利用することができる。本実施形態においては、ＯＳの具体例として、マイクロソフト社のウィンドウズ（登録商標）を搭載したコンピュータシステムについて説明する。尚、コンピュータシステムが搭載するＯＳは、ウィンドウズ（登録商標）に限られるものではなく、他のＯＳを搭載したコンピュータシステムであっても本発明を実現することは可能である。
【００１７】
ここで、コンピュータシステムがアプリケーションプログラムとして、画像補正を行う画像補正プログラムと、画像補正プログラムにより補正された画像を印刷する画像印刷プログラムを搭載しているとする。これらの画像補正プログラムと画像印刷プログラムが、本実施形態の特徴であるプログラム間通信方法を用いて連携動作するためのしくみについて以下に説明する。本実施形態におけるコンピュータシステムは、画像データを複数のプログラムで扱うための仕組みを備え、それら複数のプログラムの連携と、それを実現するプログラム間通信を制御する機能を有する。尚、連携するプログラム自身の仕様は、限定されるものではなく、種々の仕様を有するプログラムに適用可能である。
【００１８】
まず、図１に示したコンピュータシステムで利用可能な画像補正プログラムについて簡単に説明する。画像補正プログラムは、ＢＭＰ、ＪＰＥＧ、ＴＩＦＦなどの画像ファイル形式である画像データを処理対象とした画像補正アプリケーションである。画像補正プログラムを、ＣＰＵ１０１が実行することで、図２に示すような画像選択画面２０または画像補正画面２４が出力デバイス１０５（表示装置）に表示される。
【００１９】
図２に示すように、画像選択画面２０は、フォルダ・ツリー表示エリア２２とサムネイル表示エリア２１で構成され、フォルダ・ツリー表示エリア２２にはシステムの記録媒体に格納された画像データのディレクトリ構造を表現したフォルダ・ツリーが表示される。このフォルダ・ツリー表示エリア２２に表示されたディレクトリを選択すると、サムネイル表示エリア２１に、選択されたディレクトリに格納される選択対象となる画像の縮小画像（サムネイル）が一覧表示される。ここで、サムネイル表示エリア２１は、表示対象の画像が後述の画像補正画面２４で補正された場合には、縮小画像にも同様の補正を適用して表示する。また、サムネイル表示エリア２１は、対象画像が多すぎてサムネイル表示エリア２１に全ての縮小画像を同時に表示できない場合には、スクロールバーを表示する。これにより、操作者はスクロールバーを操作することで、全ての縮小画像を閲覧することができる。サムネイル表示エリア２１に表示された縮小画像は、シングル・クリックする度に選択状態と非選択状態が切り替わり、ダブル・クリックすると画像補正画面２４に表示が切り替わる。例えば、図２の縮小画像２３がダブル・クリックされた場合に、縮小画像２３に対応する画像を含む画像補正画面２４が表示される。
【００２０】
画像補正画面２４は、補正対象画像表示エリア２５と、補正パレット２６で構成される。補正対象画像表示エリア２５には、補正対象画像に対して補正パレット２６で指定されたパラメータを適用した画像が表示される。補正パレット２６は、対象画像のヒストグラムが表示されるヒストグラム表示領域２６ａと、シャープネスや彩度等を指定するスライダー２６ｂ〜２６ｄで構成される。操作者がスライダー２６ｂ〜２６ｄを操作する度に、ＣＰＵ１０１は、補正対象画像表示エリアの画像を補正処理して更新する。補正パレット２６で調整可能なパラメータは、例えば輝度γ値、シャープネス、彩度、コントラストを調整可能なものとする。
【００２１】
また、図２に示した画像補正画面２４と異なる画像補正画面について説明する。例えば操作者が画像選択画面２０で複数の画像を選択した場合、ＣＰＵ１０１は、図３に示すような画像補正画面２４ａを出力デバイス１０５（表示装置）に表示する。画像補正画面２４ａは、補正対象画像表示エリア２５の左に、選択画像一覧表示エリア２７が表示されている。この選択画像一覧表示エリア２７には、選択された画像の縮小画像が並べて表示される。このような画像補正画面２４ａを表示するモードを用意することで、複数画像の補正を行う場合に、画像選択画面２０と画像補正画面２４の表示切り替え操作を、選択した画像の枚数に応じて行わなくても済むようになり操作性が向上する。
【００２２】
画像補正画面２４または画像補正画面２４ａ（以下、単に画像補正画面２４とする）での補正結果は、対象となる画像を直接加工するのでは無く、元画像に対する補正パラメータをファイルに追記する形で保存する。このようにすることで、補正に応じて何度もパラメータを変更しても原画像に画像データは保存されているので、補正するたびに画質が劣化していくことは無い。
【００２３】
次に、画像印刷プログラムについて簡単に説明する。画像印刷プログラムは、ＪＰＥＧ形式の画像データを対象とした印刷アプリケーションである。画像印刷プログラムをＣＰＵ１０１が実行することで、図４に示すような画像選択画面３０と印刷条件設定画面３５が出力デバイス１０５（表示装置）に表示される。図４に示すように画像選択画面３０は、図２に示した画像選択画面２０と同様のフォルダ・ツリー表示エリア３２とサムネイル表示エリア３３に加えて、画像印刷プログラムによる処理を終了するための終了ボタン３１を更に含む構成である。また、印刷条件設定画面３５は、用紙指定エリア３６と、印刷ボタン３７と、レイアウト指定エリア３８から構成されている。これにより、用紙指定エリア３６において用紙を指定し、レイアウト指定エリア３８でレイアウトを指定した後に、印刷ボタン３７を押下すると、選択された画像が、指定された用紙サイズの用紙に対して、指定されたレイアウトで出力デバイス１０５（プリンタ）で印刷され出力される。
【００２４】
図４に示すように本実施形態では、用紙指定エリア３６では、Ａ４、Ｌ判、葉書のいずれかを選択可能な構成である。尚、用紙指定エリア３６において、用紙サイズ以外に、用紙の種類などを指定可能にしてもよい。具体的には、普通紙と写真用紙などが指定可能とする。また、レイアウト指定エリア３８においては、フチ無し全面、２ｉｎ１、撮影時情報付印刷、縮小画像一覧（インデックス印刷）のいずれかが選択可能である。ここで、撮影時情報付印刷とは、画像と、その付属情報（撮影日時、シャッタ速度など撮影時の情報）を同一用紙に出力するためのレイアウトである。具体的には用紙一枚に対して一枚の画像とその撮影時情報を並べて出力する。また、終了ボタン３１を押下すると画像印刷プログラムの処理を終了する。
【００２５】
以上、図２と図４を用いて説明した画像補正プログラムおよび画像印刷プログラムは、上記で説明した単体での動作の他に、本実施形態における特徴となるプログラム間通信処理によって連携動作するための仕組みが実装されている。このプログラム間通信処理によって連携動作の詳細な処理については後述することにして、まずＧＵＩレベルでの動作について説明する。
【００２６】
画像補正プログラムには、選択画像を印刷するためのメニューが用意されていて、そのメニューを選択することで選択画像を印刷することができる。具体的には、ＯＳが提供するユーザインターフェイスを使って選択画像をプリンタ出力できるようになっている。しかし、本実施形態のコンピュータシステム内に図４を用いて説明した画像印刷プログラムがインストールされているので、ＯＳが提供するインターフェイスでは無く、その画像印刷プログラムが起動する。
【００２７】
また、画像印刷プログラムは、画像補正プログラムからの印刷要求により起動された場合には、図４に示した画像選択画面３０のうち、フォルダ・ツリー表示エリア３２は表示されなくなる。この状態の場合、サムネイル表示エリア３３に、画像補正プログラムで選択された画像が一覧表示される。さらに、終了ボタン３１は、戻るボタン３１に代わる。この戻るボタン３１を押下した場合、画像印刷プログラムを終了し、画像補正プログラムに制御を戻す。
【００２８】
但し、上述したように画像補正プログラムと画像印刷プログラムが連携を行う場合に、次のような問題が生じる。
・画像補正プログラムと画像印刷プログラムとで処理可能なデータ形式が異なる。さらに、画像補正処理の有無をプログラム間で伝達する必要ある。
・プログラム間で扱うファイル名を伝達する必要がある。
これらの問題を解決するために、本実施形態におけるコンピュータシステムは、以下に説明するプログラム間通信方式を用いて画像補正プログラムと画像印刷プログラムの連携を実現する。以下、プログラム間通信方式の詳細について述べる。
【００２９】
まず、図１に示したコンピュータシステムにおける画像補正プログラムおよび画像印刷プログラムのプログラム間の通信手順について説明する。図５は、図１に示したコンピュータシステムにおけるプログラム間の通信手順を示す図である。図５に示すように、本プログラム間通信方式は、初期化フェイズ５１と、接続フェイズ５２と、終了フェイズ５３の大きく３つのフェイズで構成される。以下、画像補正プログラムや画像印刷プログラムを含む一般的な複数のプログラム間における３つのフェイズでの処理について説明を行う。尚、図５に示す画像補正プログラムと画像印刷プログラムにおける３つのフェイズの処理につては詳細を後述する。また、説明を分かり易くするために、あるファイルを処理中のプログラムを第１のプログラムとして、プログラム間通信により第１のプログラムの要求に応じてそのファイルを代わりに処理するプログラムを第２のプログラムとする。
【００３０】
まず、初期化フェイズ５１では、第１のプログラムが、第２のプログラムとのプログラム間の通信経路（通信チャネル）を確立し、その通信経路を用いて、処理対象となるファイルのリストであるファイルリストを共有する処理を行う。また、各プログラムにおけるファイルの指定は、ファイル名ではなく上述したファイルリストにおける順番を示すファイル番号（識別子などでもよい）で行う。すなわち、各プログラムは、ファイル単位で他のプログラムに対して処理を要求する。具体的には、ファイルリストの先頭のファイル番号を０番として扱う。また、プログラム間のファイルリストの転送は、共有メモリを介して行う。尚、共有メモリとは、各プログラムが処理対象とするファイル（ファイルリストに記載されたファイル）を格納するメモリでも有り、図１に示した一次記憶１０２、二次記憶１０３のいずれかに構築される。
【００３１】
上述した処理により初期化フェイズ５１を終えると、接続フェイズ５２に進む。接続フェイズ５２では、第１のプログラムが、処理対象となるファイルのファイル番号と要求条件（例えばデコード処理の要求）とを第２のプログラムに通知する。これにより、第２のプログラムは、ファイル番号で特定されるファイルに対して、要求条件に応じた処理（例えばデコード処理）を行い、処理後のファイルを共有メモリに配置する。次に、配置されたデータを、要求側の第１のプログラムが共有メモリから参照する。以上により、第１のプログラムと第２のプログラム間で、必要なデータ（デコード処理後のファイル）の転送を実現する。
【００３２】
接続フェイズ５２を終えると、最後に、終了フェイズ５３に進む。いずれかのプログラムがプログラム間通信の切断要求を相手のプログラムに対して通知し、接続を切断する。図５では、画像印刷プログラムの終了と共にプログラム間通信の接続を切断するようになっているが、切断を要求するプログラムはどちらでも構わない。尚、図５に示す「ＰＲＯＣＥＳＳ＿Ａ」、「ＰＲＯＣＥＳＳ＿Ｂ」については、後述の通信プロトコルの詳細説明において述べる。
【００３３】
次に、本実施形態におけるプログラム間通信方式のプロトコル例と、画像補正プログラムと画像印刷プログラム間における各フェイズの処理の詳細について説明する。
＜通信プロトコル＞
本実施形態では、プログラム間における通信経路の確立のための情報として、夫々のプログラムがＧＵＩとして表示するメインウインドウのウインドウハンドルと、そのウインドウプロシージャのメッセージＩＤを用いる。具体的には、画像補正プログラムが表示する画像選択画面２０および画像印刷プログラムが表示する画像選択画面３０の各々のウインドウハンドルとウインドウプロシージャのメッセージＩＤを用いて、通信経路を確立する。また、図５に示した「ＰＲＯＣＥＳＳ＿Ａ」および「ＰＲＯＣＥＳＳ＿Ｂ」は、画像補正プログラムおよび画像印刷プログラムにおいて定義している通信用メッセージＩＤである。
【００３４】
本実施形態のようにＯＳがウィンドウズ（登録商標）の場合では、各ウインドウは、ウインドウを識別するウインドウハンドルを持っており、マウスイベントなどのイベントは、各ウインドウハンドルを指定して送られる。イベントを識別するため、イベントを伝えるメッセージにはメッセージＩＤが割り振られている。メッセージＩＤには、システムで予約された番号と、ユーザが任意に設定できる番号がある。そこで、ユーザ定義のメッセージＩＤとしてプログラム間通信用の通信用メッセージＩＤを定義し、プログラム間通信の処理を受け持つウインドウのウインドウハンドルを指定して、プログラム間通信イベントを送付することで、該ウインドウを管理する特定のプログラムに対して処理要求などの情報を伝達することが出来る。
【００３５】
ただし、ウインドウに対するイベント通知では、伝達できる情報量が限られている。本実施形態のようにＯＳがウィンドウズ（登録商標）の場合には、イベントとしてウインドウを管理するプログラムに通知可能なデータは、上述したメッセージＩＤの他に、副イベント情報であるＷＰＡＲＡＭとＬＰＡＲＡＭの２つのみである。このＷＰＡＲＡＭとＬＰＡＲＡＭは、夫々４バイトの整数値である。そこで、画像データなど大きなサイズのデータは、共有メモリを介してプログラム間の転送を行う。ウィンドウズ（登録商標）では、共有メモリを特定するために、共有メモリに識別名をつけて管理を行っている。
【００３６】
ここで、本実施形態において使用する通信コマンドについて説明する。既に述べたように、ユーザ定義のメッセージＩＤ（通信用メッセージＩＤ）を使って相手のプログラムにコマンドを送信する。また、コマンドとそのパラメータの送信で利用できるデータ容量は、ＷＰＡＲＡＭとＬＰＡＲＡＭを合わせた８バイトである。そこで、図６に示すように、この８バイトを２バイトずつ４つに区切り、それぞれ、コマンド、パラメータ１、パラメータ２、パラメータ３として扱う。図６は、本実施形態における通信用メッセージＩＤに含ませるコマンドおよびパラメータ割り当て例を示す図である。また、図６のコマンド部において、上位１バイトに相当する定義例の一覧を図７に示し、また、下位１バイトにはデコード時の色深度を示すコマンドを入れる。図７に示すように、１６進数で「００〜７Ｆ」までがデコード要求コマンド、「Ａ０」がメッセージＩＤの通知コマンド、「Ｂ０」がウインドウハンドルの通知コマンド、「Ｅ０」がプログラム間接続通信切断要求コマンド、「Ｆ０」がプログラム終了要求コマンドである。尚、図７に示した各コマンドの詳細については、各フェイズにおける処理の詳細説明の中で述べる。
【００３７】
次に、図５に示した初期化フェイズ５１と、接続フェイズ５２と、終了フェイズ５３の各フェイズにおける処理の詳細について説明する。
＜初期化フェイズ＞
初期化フェイズ５１では、上述したようにプログラム間通信開始処理を行う。即ち、画像補正プログラムが連携動作する画像印刷プログラムを起動し、プログラム間の通信経路を確定するまでの処理が初期化フェイズ５１である。
【００３８】
本実施形態における初期化フェイズ５１においては、連携動作する２つのプログラム間で通信処理が実装されているウインドウのウインドウハンドルとメッセージＩＤを互いに通知しあう必要がある。また、連携動作する２つのプログラムのいずれかが共有メモリを確保し、その識別名を相手のプログラムに伝達する必要がある。本実施形態では、他のプログラムを起動する側のプログラムで共有メモリを確保する。具体的には、図５に示すように、画像補正プログラムが共有メモリを確保して、画像印刷プログラムに共有メモリの識別名を伝達する。
【００３９】
ここで、図５に示した初期化フェイズ５１の処理の詳細について説明する。
図８は、図５に示した初期化フェイズ５１の処理の詳細を示す図である。尚、図８に示す処理の前提として本実施形態のコンピュータシステムは、画像補正プログラムは既に起動済みである。図８に示すように、ステップＳ８０１において、画像補正プログラムは、画像印刷プログラムを起動して、共有メモリに上述したファイルリストを格納する。この時、画像補正プログラムは、通信用パラメータ１としてウインドウハンドル、メッセージＩＤを夫々１６進数で表記して文字列にしたものと、共有メモリの識別名を順に記述したものを送信する。これにより、その通信用パラメータ１を画像印刷プログラムの実行時オプションとして指定することができる。また、画像補正プログラムは、プログラム間接続で扱うファイルのリストであるファイルリストを共有メモリ上に配置する。
【００４０】
次に、ステップＳ８０２において、画像印刷プログラムは、起動時に画像補正プログラムより通信パラメータ１を取得する。これにより、画像印刷プログラムは、その通信パラメータ１で指定された実行時オプション（起動時パラメータ）を解析し、通信相手（画像補正プログラム）のウインドウハンドル、メッセージＩＤ、共有メモリの識別名を取得する。
尚、実行時オプションが特に指定されていない場合は単独起動、指定されている場合には他のプログラムにより起動されたことが識別できる。このような処理を行うことで、画像印刷プログラムは、図４に示したように、単独起動時だけフォルダ・ツリー表示エリア３２を表示することが可能になる。ただし、単独起動チェック処理については図８中では省略している。
【００４１】
次に、ステップＳ８０３において、画像印刷プログラムは、ステップＳ８０２で得た共有メモリの識別名を使って、共有メモリ上にあるファイルリストを取得する。次に、ステップＳ８０４において、画像印刷プログラムは、ステップＳ８０２で得たウインドウハンドル、メッセージＩＤで特定される画像補正プログラムに対して、通信用パラメータ２として画像印刷プログラム側でプログラム間通信に利用するウインドウハンドルとメッセージＩＤを通知する。具体的には、画像印刷プログラムは、ＳＥＮＤ＿ＭＥＳＳＡＧＥ＿ＩＤとＳＥＮＤ＿ＷＩＮＤＯＷ＿ＨＡＮＤＬＥの２つのコマンドを使って、通信パラメータ２としてウインドウハンドルとメッセージＩＤを画像補正プログラムへ通知する。このＳＥＮＤ＿ＭＥＳＳＡＧＥ＿ＩＤコマンドの場合、図６に示したパラメータ２とパラメータ３の領域で、通信に使うメッセージＩＤを伝える。また、ＳＥＮＤ＿ＷＩＮＤＯＷ＿ＨＡＮＤＬＥコマンドの場合も、図６に示したパラメータ２とパラメータ３の領域でウインドウハンドルを通知する。いずれの場合も、パラメータ１の領域は未使用とする。
【００４２】
次に、ステップＳ８０５において、画像補正プログラムは、ステップＳ８０４で通知された２つのコマンドから、通信用パラメータ２として画像印刷プログラムでプログラム間通信に利用するウインドウハンドルとメッセージＩＤを得る。
【００４３】
以上で述べた処理を初期化フェイズ５１で行うことによって、画像補正プログラムと画像印刷プログラム間におけるプログラム間通信の経路を確立することができる。さらに初期化フェイズ５１において、連携して動作する画像補正プログラムと画像印刷プログラムが、以下に示すようなウインドウの表示制御を行うことで、利用者にあたかも一つのプログラムとして動作するように見せることが可能になる。このように、２つのプログラムがあたかも一つのプログラムとして動作しているように見せることは、統一感があり、使用者にとって自然な操作環境であるといえる。図９は、初期化フェイズ５１において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。
【００４４】
図９に示すように、まず、ステップＳ９０１において、起動時の画像印刷プログラムは、起動画面（ウインドウ）を表示する際に、元々画像補正プログラムが表示していたウインドウ（以下、元ウインドウとする）と同一の表示位置・大きさで表示する。本実施形態では、画像印刷プログラムが画像補正プログラムから起動された場合、画像補正プログラムが表示していた元ウインドウ（例えば図２の画像補正画面２４）と同じ位置・大きさで、画像印刷プログラムにおけるウインドウ（例えば図４の画像選択画面３０）を出力デバイス１０５（表示装置）に表示する。
【００４５】
次に、ステップＳ９０２に進み、画像印刷プログラムは、ステップＳ９０１で表示した起動画面（ウインドウ）を、最前面に表示する。これにより、画像補正プログラムが元々表示していた元ウインドウを覆い隠すことが可能になる。次に、ステップＳ９０３に進み、画像印刷プログラムは、画像補正プログラムが表示するウインドウの表示状態を非表示に変更する。これにより、ステップＳ９０４において、画像補正プログラムの元ウインドウは非表示となる。
【００４６】
以上により、新たに表示した起動画面の表示位置を変更しても、元々起動していた元ウインドウは表示されず、連携動作する２つのプログラムは、ユーザに対して単に表示モードが変わっただけのように見せることが可能に成る。本実施形態のようにＯＳがウィンドウズ（登録商標）の場合では、ウインドウハンドルが取得できていれば、他のプロセスであっても任意のウインドウを非表示にすることが可能なので、上記手順でウインドウを入れ替えることが可能である。
【００４７】
ここで、図８において、ステップＳ８０２以降のタイミングで、かつステップＳ８０５の前に画像補正プログラムを終了することが考えられる。例えば、ウィンドウズ（登録商標）では、ＡＬＴキーとＦ４キーを同時に押下することによって、指定したウインドウを閉じるメニューを表示することができる。ここで、プログラムの終了を選択することで、プログラムを終了させることができる。このような操作を行うことで、起動側と、新たに起動したプログラムの連携が確立する前に、起動側のプログラムを終了することができる。このようにすると、プログラムが想定外の状態になり、本プログラム連携方式を安心して使うことが出来なくなってしまう。
【００４８】
そこで、図１９のように、図８の処理に加え、連携開始から連携を確立するまでの間、画像補正プログラムの状態を、キー入力一般を無視するような状態に制御することで、上記のような状況を回避することができる。図１９は、第１の実施形態における連携開始処理中の起動側プログラムの終了回避方法を示すフロー図である。尚、図１９におけるステップＳ１９０２〜Ｓ１９０６の処理は、図８に示したステップＳ８０１〜Ｓ８０５の処理と同様の処理であるので、説明を省略する。図１９に示すように、ステップＳ１９０１において、画像補正プログラムは、自身への入力信号を無視する状態に設定する。また、画像補正プログラムと画像印刷プログラムの連携が確立したステップＳ１９０６の次に、ステップＳ１９０７において、画像補正プログラムは、ステップＳ１９０１で設定した入力信号を無視する状態から入力信号を受け付ける状態に変更（復帰）する。
【００４９】
具体的には、ステップＳ１９０１やステップＳ１９０７のような処理は、ウィンドウズ（登録商標）では、例えば、ＥｎａｂｌｅＷｉｎｄｏｗ関数を用い、ステップＳ１９０１でＤｉｓａｂｌｅ状態、ステップＳ１９０７でＥｎａｂｌｅ状態にすることで実現可能である。
【００５０】
尚、他のプロセスで起動しているウインドウを非表示にできないＯＳの場合には、例えば図１０に示す処理を行えばよい。図１０は、他のプロセスで起動しているウインドウの表示状態を変更できないＯＳの場合に、初期化フェイズ５１において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。
【００５１】
図１０において、ステップＳ１００１、Ｓ１００２の処理は、図９に示したステップＳ９０１、Ｓ９０２の処理と同様なので、説明を省略する。次に、ステップＳ１００３において、画像印刷プログラムは、相手の画像補正プログラムに対して「非表示要求コマンド」を送る。次に、ステップＳ１００４において、非表示要求コマンドを受け取った画像補正プログラムが元ウインドウを非表示にする。
【００５２】
以上に示したように、初期化フェイズ５１では、画像補正プログラムが、画像印刷プログラムとのプログラム間の通信経路を確立し、その通信経路を用いて、処理対象となるファイルのリストであるファイルリストを共有する処理を行う。また、その際に、画像印刷プログラムが表示するウインドウの位置や大きさを制御することで、画像補正プログラムと画像印刷プログラムの連携動作をあたかも一つのプログラムとして動作するように見せることができる。このように、２つのプログラムがあたかも一つのプログラムとして動作しているように見せることは、統一感があり、使用者にとって自然な操作環境であるといえる。
【００５３】
次に、図５に示した接続フェイズ５２の処理の詳細について説明する。
＜接続フェイズ＞
接続フェイズ５２は、画像補正プログラムと画像印刷プログラムのプログラム間通信が確立された状態で、必要なデータ（例えば、画像データ）の要求および転送を行うフェイズである。
【００５４】
本実施形態においては、必要な画像データの要求は、図７に示したコマンドのうち、ＤＥＣＯＤＥを使って行う。本実施形態におけるプログラム間通信方式の特徴として、デコード要求時に必要な画像の情報を伝えるという点がある。例えば、本実施形態では、画像の色深度、画像サイズ（幅、高さ）、色空間をデコード要求時に指定する。図６に示したように、コマンドと合わせて通知できるパラメータのデータ長さには制限があるので、色深度と色空間の指定は、図７に示したＤＥＣＯＤＥコマンドの値として用意されている。具体的には、デコード要求コマンドの値は０ｘ００〜０ｘ７Ｆ（ここで、０ｘは１６進数を示す）の値をとるが、この値の下位４ｂｉｔで、要求する画像の色深度を指定する。例えば下位４ｂｉｔで８（１０進数）が指定されていれば、ＲＧＢ各色８ｂｉｔのデータを要求していることになる。ただし、下位４ｂｉｔが００００ｂ（ここで、ｂは２進数を示す）である場合には、画像データ本体は要求しないという指定になる。この場合には、デコード要求コマンドにより撮影時情報などの付属情報だけを要求したことになる。
【００５５】
次に、ＤＥＣＯＤＥコマンドの上位４ｂｉｔについて説明する。上位４ｂｉｔのうち、上２ｂｉｔは常に００ｂであり、下２ｂｉｔで色空間を指定する。例えば本実施形態では、００ｂでｓＲＧＢ、０１ｂでＡｄｏｂｅＲＧＢ、１０ｂでＷｉｄｅＲＧＢ、１１ｂはその他の色空間とする。また、下２ｂｉｔが１１ｂの場合は、画像データと共に、ＩＣＣプロファイルを付与したデータを要求していることを示す。
【００５６】
また、ＤＥＣＯＤＥコマンドに付随する図６に示したパラメータ１には、ファイル名の指定に用いる。ファイル名の指定は、前述のように初期化フェイズ５１で共有したファイルリストでの番号で指定する。したがって、一度に共有できるファイル数の上限は、６５５３６（２バイト分）である。また、図６のパラメータ２には、画像データの画像幅をピクセル単位で指定する。また、図６のパラメータ３には、画像データの画像の高さをピクセル単位で指定する。このようなコマンドとパラメータより構成される通信メッセージを用いることで、必要な画像ファイルを特定しつつ、要求する画像の情報を伝えることができる。
【００５７】
さらに、この接続フェイズ５２における画像データ要求時の処理にも、本プログラム間通信方式の特徴がある。図１１は、接続フェイズ５２における画像データ要求時の処理を示すフロー図である。
図１１に示すように、まず、ステップＳ１１０１において、画像印刷プログラムは、デコード要求を相手の画像補正プログラムに送る。具体的には、画像印刷プログラムは、デコード要求コマンドＤＥＣＯＤＥを相手の画像補正プログラムに送る。この時点で、画像印刷プログラムの動作はブロックされる。また、画像印刷プログラムは、共有メモリをロックする。
【００５８】
ここで、共有メモリをロックするとは、同一プログラム内からの共有メモリへのアクセスをブロックするという意味で、画像印刷プログラムがマルチスレッドであった場合に共有メモリへのアクセスが衝突するのを防ぐことができる。画像印刷プログラムがシングルスレッドである場合には、この処理は省略することができる。
【００５９】
次に、ステップＳ１１０２において、デコード要求を受け取った画像補正プログラムは、画像データやその付属情報を共有メモリに置く。共有メモリに置くデータが画像補正プログラムにより管理されるメモリ上に無い場合には、画像補正プログラムは、画像データをデコードし、補正処理を適用する処理を行い、デコードおよび補正処理後の画像データを共有メモリに置く。これにより、プログラム間通信メッセージに対する処理を終え、メッセージループに処理を戻す。この時点で、ステップＳ１１０１でブロックされていた画像印刷プログラムは、ブロック解除される。次に、ステップＳ１１０３において、画像印刷プログラムは、共有メモリから、デコード要求した画像データや付属情報を取り出した後、共有メモリのロックを解除する。
【００６０】
尚、上述したステップＳ１１０１ではデコード要求を出力した画像印刷プログラムがブロックされるが、この限りではなく、画像印刷プログラムの処理としてスレッドが使える環境では、デコード要求を出したスレッドの動作がブロックされる。このように動作させるために、例えばＯＳがウィンドウズ（登録商標）の場合には、ＤＥＣＯＤＥコマンドをシステムで提供されているＳｅｎｄＭｅｓｓａｇｅ関数を使って送信することで実現することが出来る。すなわち、ＳｅｎｄＭｅｓｓａｇｅ関数でメッセージを送る場合、そのメッセージに対する処理が終了するまでＳｅｎｄＭｅｓｓａｇｅ関数はブロックされるというＯＳの仕様になっている。
【００６１】
このような動作をすることで、画像印刷プログラムから画像補正プログラムへの画像データ要求の処理が、あたかも一つの関数のように振る舞うようになる。もし、このような同期的な動作ではなく、夫々のプログラムが非同期に動作する場合には、画像を要求したプログラムは、画像データが共有メモリに完全に転送されたかどうかについて、画像を要求する度に気にかけなくてはならなくなり、プログラムの動作が複雑になりがちである。さらに、画像を要求されたプログラムの方も、共有メモリにデータを転送しても良いかどうかを常に意識して実装されなくてはならなくなる。以上の理由により、プログラム間の画像データの転送処理を完全に同期的に動作させることで、プログラムの実装コストを大幅に低減することが可能になる。
【００６２】
また、ステップＳ１１０１における画像のデコード要求時には、デコード要求コマンドおよびそのパラメータで画像サイズや色空間などの要求条件を指定することは前述の通りである。しかし、要求された側がその要求条件でデコード後の画像データを作成することができるかどうかは分からない。そこで本実施形態におけるプログラム間通信方式においては、ステップＳ１１０２におけるデコードおよび補正後の画像生成処理時に上述した要求条件はあくまで参考情報として扱う。すなわち、画像補正プログラムは、画像処理や画像印刷プログラムとの連携動作の高速化のために、その要求条件を使って最適な画像データを作成しても構わない。逆に、その要求条件を一切無視して画像データを作成しても構わない。そのため、画像補正プログラムが要求条件の一部または全部を無視した画像データを作成した場合には、デコード要求を行った側の画像印刷プログラムは、共有メモリより取得した画像データを自らのプログラムで期待するサイズや色に自身で変換する必要がある。仮に画像印刷プログラムにカラーマネジメントの機能が用意されていなかった場合、表示される画像の色は正確ではなくなってしまうが、これは画像印刷プログラムの仕様とみなすことができる。
【００６３】
以上に示したように、２つのプログラムがお互いに要求条件を強制しない「ゆるい」連携動作を行うことで、お互いのプログラムが持つ機能を利用することも、利用しないことも出来るようになる。これは、プログラムの動作環境や、プログラム仕様そのものに応じて、プログラムの連携の密度をダイナミックに変化させることができるということである。このようなプログラム間の「ゆるい」連携動作を実現した本実施形態におけるプログラム間通信方式は、大変有効な通信方式である。また、図５に示すように、画像印刷プログラム５１から複数回のデコード要求が画像補正プログラムに出力されてもよい。この場合は、図１１に示した処理が複数回行われる。
【００６４】
また、ステップＳ１１０３で画像印刷プログラムが共有メモリから取得するデータは、画像データと付属情報となっているが、この付属情報とは例えば、撮影時情報やＩＣＣプロファイルなどが考えられる。例えば、色空間がｓＲＧＢ、ＡｄｏｂｅＲＧＢ、ＷｉｄｅＲＧＢ以外である場合、画像データと共にＩＣＣプロファイルを転送する。色空間がｓＲＧＢ、ＡｄｏｂｅＲＧＢ、ＷｉｄｅＲＧＢである場合には、撮影時情報に色空間情報を格納する。このようにすることで、要求する色空間と作成した画像データの色空間が異なる場合でも、正しい色空間情報を伝えることができるようになる。また、共有メモリを介して受け渡される画像データはＤＩＢ（Ｄｅｖｉｃｅ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｂｉｔｍａｐ）形式とする。ＤＩＢ形式はウィンドウズ（登録商標）のシステム標準のデータ形式であり、受け取ったデータをそのまま描画に使えるという利点がある。
【００６５】
ここで、共有メモリに格納する画像データおよび付属情報のフォーマット例について説明する。図１２は、共有メモリに格納する画像データおよび付属情報のフォーマット例を示す図である。図１２に示すように、共有メモリの先頭には、各データへのオフセットとデータサイズが格納されており、これを参照することで、各プログラムは必要なデータにアクセスすることが可能になる。各データへのオフセットは、共有メモリ先頭からデータ先頭までのバイト数である。データサイズが０の場合、該当するデータは格納されていないことを示す。図１２に示す“状態コード”は、本実施形態では常に０である。また、“ヘッダサイズ”は、図１２のフォーマット例では画像データ、撮影時情報、ＩＣＣプロファイルの各オフセットとデータサイズで、計２４ｂｙｔｅになる。また、オフセットとデータサイズの後には、画像データそのものが格納される領域、撮影時情報が格納される領域、ＩＣＣプロファイルが格納される領域が続く。
【００６６】
次に、図５に示した終了フェイズ５３の処理の詳細について説明する。
＜終了フェイズ＞
図５に示した終了フェイズ５３は、上述したようにプログラム間通信の接続を切断するフェイズである。本実施形態においては、画像印刷プログラムが表示する図４に示す画像選択画面３０において「戻る」ボタン３１の押下によりこの処理が開始する。また、ＯＳがウィンドウズ（登録商標）の場合には、ウインドウの右上に用意される「ウインドウを閉じる」ボタンでも、ウインドウを表示するプログラムを終了することが出来る。
【００６７】
本実施形態では「戻る」ボタン３１が押下された場合、画像印刷プログラムを終了すると共に、画像補正プログラムに制御を戻す。しかし、「ウインドウを閉じる」ボタンを押下した場合、画像補正プログラムと画像印刷プログラムの両方を終了する。このような動作にすることで、２つのプログラムが連携動作する場合に、利用者に対して完全に一つのアプリケーションプログラムとして動作しているかのように見せることができる。このように、２つのプログラムがあたかも一つのプログラムとして動作しているように見せることは、統一感があり、使用者にとって自然な操作環境であるといえる。
【００６８】
具体的には、本実施形態において、利用者により「戻る」ボタン３１が押下された場合のプログラム間の処理は、起動された画像印刷プログラムだけを終了するためのコマンドとして、図７に示したコマンドＥＮＤ＿ＰＲＯＣＥＳＳを利用する。このコマンドを受け取った画像補正プログラムは、単に画像印刷プログラムとのプログラム間通信処理のみを終了する。また、本実施形態における「ウインドウを閉じる」ボタンを押下した場合の処理は、双方のプログラムを終了するためのコマンドとして、図７に示したコマンドＥＮＤ＿ＰＡＲＥＮＴを利用する。このコマンドを受け取った画像補正プログラムは、直ちにプログラム自身の終了処理を実行し、プログラムを終了する。
【００６９】
詳細には、「戻る」ボタン３１が押下された場合には図１３に示す処理を行い、「ウインドウを閉じる」ボタンを押した場合には、画像印刷プログラムは、画像補正プログラムに対してＥＮＤ＿ＰＡＲＥＮＴコマンドを送信してプログラムを終了する。双方のプログラムは、ＥＮＤ＿ＰＡＲＥＮＴコマンドを受け取った場合、直ちにプログラムの終了処理を行う仕様になっている。
【００７０】
また、上述したように「戻る」ボタン３１が押下された時点では、連携動作している画像補正プログラムのウインドウは非表示の状態になっている。そこで、ＥＮＤ＿ＰＲＯＣＥＳＳコマンドが発行された場合、画像補正プログラムのウインドウを表示状態に戻さなくてはならない。以下、画像印刷プログラムを終了する際に画像補正プログラムのウインドウを表示状態に戻す処理について説明する。図１３は、画像印刷プログラムを終了する際に画像補正プログラムのウインドウを表示状態に戻す処理を示す図である。
【００７１】
図１３に示すように、ステップＳ１３０１において、画像印刷プログラムは、元々起動していた画像補正プログラムの元ウインドウを、後で起動した画像印刷プログラムのウインドウ（画像選択画面３０）と同一の表示位置・大きさで表示させる。これにより、画像補正プログラムの元ウインドウが画像印刷プログラムのウインドウと同じ位置・大きさで表示される。次に、ステップＳ１３０２において、画像印刷プログラムは、ステップＳ１３０１で表示した画像印刷プログラムの元ウインドウを、最前面に表示させる。これにより、画像補正プログラムの元ウインドウが画像印刷プログラムのウインドウの前に表示される。このようにすることで、後で起動した画像印刷プログラムのウインドウを覆い隠すことができる。
【００７２】
次に、ステップＳ１３０３において、画像印刷プログラムは、画像印刷プログラムのウインドウの表示状態を非表示に変更する。これにより画像印刷プログラムのウインドウは非表示となる。また、非表示にした後に、画像印刷プログラムを終了する。
このような処理を行うことで、利用者に対して、異なるプログラムにスイッチしたのではなく、同一プログラムにおいてモードが切り替わっただけのように見せることが可能になる。このように、２つのプログラムがあたかも一つのプログラムとして動作しているように見せることは、統一感があり、使用者にとって自然な操作環境であるといえる。また、初期化フェイズ５１の時と同様に、他のプロセスの表示状態を変更できないＯＳにおいては、図１３の処理の代わりに図１４に示す処理を行う。
【００７３】
図１４は、他のプロセスで起動しているウインドウの表示状態を変更できないＯＳの場合に、終了フェイズ５３において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。図１４に示すように、まず、ステップＳ１４０１において、画像印刷プログラムは、元々起動していた画像補正プログラムに対し、表示要求コマンドを送信する。次に、ステップＳ１４０２において、表示要求コマンドを受け取った画像補正プログラムは、ウインドウの表示位置および大きさを通信相手（画像印刷プログラム）と同じ位置、同じ大きさに変更した後、自身を表示状態に変更する。また、同時にそのウインドウを最前面に移動する。
【００７４】
次に、ステップＳ１４０３において、画像補正プログラムは、通信相手である画像印刷プログラムに対して終了要求コマンドを送信する。次に、ステップＳ１４０４において、終了要求コマンドを受け取った画像印刷プログラムは、自身のウインドウの表示状態を非表示に変更した後、自身の終了処理を行い、プログラムを終了する。
【００７５】
以上述べたように、本実施形態では、ウインドウの表示状態をコントロールすることで利用者に対して同一のプログラムにおいて表示が切り替わったように見せる仕様としたが、この仕様を省略しても構わない。また、上述した第１のプログラムと第２のプログラムをネットワーク接続された異なる装置で夫々動作させても構わない。
【００７６】
〔第２の実施形態〕
第１の実施形態で述べたプログラム間通信方式においては、画像データと撮影時情報をプログラム間で転送する構成であったが、第２の実施形態のプログラム間通信方式においては、画像データと撮影時情報の他に印刷用補正情報（以下、印刷用情報とする）もプログラム間で転送する構成である。尚、第２の実施形態におけるコンピュータシステムのハードウェア構成は、図１に示した第１の実施形態におけるコンピュータシステムのハードウェア構成と同様であるので説明を省略する。
【００７７】
Ｅｘｉｆ（Ｅｘｃｈａｎｇｅａｂｌｅ  ｉｍａｇｅ  ｆｉｌｅ  ｆｏｒｍａｔ）２．２（Ｅｘｉｆ−Ｐｒｉｎｔ）と呼ばれる規格がある。これは、撮影時情報を使った画像の自動補正に関する規格である。上述した第１の実施形態では、印刷時の画像補正は行わなかったが、本実施形態の画像印刷プログラムでは、撮影時情報によって、印刷対象画像を自動補正する。このような印刷用自動補正処理によって、撮影状況に応じて最適なプリントを提供することができる。尚、印刷用自動補正処理の内容については、既存の技術であるので説明を省略する。
【００７８】
第１の実施形態のように画像補正プログラムと画像印刷プログラムが連携動作した場合には、画像印刷プログラムにおける印刷用自動補正処理を、画像補正プログラム側でコントロールする方が好ましい。それは、画像補正プログラムで適用した補正と印刷用自動補正処理が互いに影響し合い、思わぬ出力結果になることがあるためである。しかし、画像と一緒に撮影時情報を合わせて印刷する場合には、画像補正プログラム側で撮影時情報を修正するのは望ましいことではない。そこで、本実施形態の画像補正プログラムは、図１５に示すように撮影時情報としてオリジナルの撮影時情報６１と、オリジナルの撮影時情報６１と印刷時自動補正処理のために補正した撮影時情報（以下、印刷用撮影時情報とする）の差分情報である印刷用情報６２とを画像印刷プログラムへ送る。
【００７９】
図１５は、第２の実施形態のプログラム間通信方式における撮影時情報の処理を示す図である。図１５の例では、画像補正プログラム側で印刷用撮影時情報としてオリジナルの撮影時情報６１の鮮やかさを調整したので、その差分情報となる印刷用情報６２では鮮やかさに関するパラメータのみを含む構成である。尚、図１５に示すように撮影時情報として、シャッタ速度の値、絞り値（ｆ値）、鮮やかさ値（±）、印刷時自動補正のオン／オフに関する情報が含まれている。
【００８０】
また、図１５に示すように、画像印刷プログラム側では、処理ｔ１において、画像６５ａと、オリジナルの撮影時情報６１を利用する撮影時情報６５ｂとを並べた撮影時情報付きの印刷レイアウト６５を作成する。次に、処理ｔ２において、画像印刷プログラムは、オリジナルの撮影時情報６１に、印刷用情報６２を上書きして合成した印刷用撮影時情報を作成する。次に、処理ｔ３において、画像印刷プログラムは、合成した印刷用撮影時情報を基に画像６５ａに対して印刷用自動補正処理を行う。以上により、出力デバイス１０５（プリンタ）から、図１５に示すような印刷レイアウト６５の印刷物が出力される。また、その印刷物の画像は、画像補正プログラムで補正され、その補正を考慮した印刷用自動補正処理まで施されたものである。
【００８１】
このような処理を行うことで、撮影時情報を画像と合わせて印刷する場合に、印刷する撮影時情報はオリジナルのままで、印刷時自動補正結果は画像補正プログラム側からコントロールすることができ、最適な印刷物を得ることができる。
また、第１の実施形態では、画像要求時の共有メモリ上でのデータ配置は図１２のようになっていたが、本実施形態では図１６のような配置とする。図１６に示すように、図１２の場合と比べて、ヘッダ部分に“印刷用情報へのオフセット”と“印刷用情報のデータサイズ”がそれぞれ４ｂｙｔｅ分増えたので、ヘッダサイズは３２ｂｙｔｅになる。
【００８２】
尚、本実施形態におけるプログラム間通信方式では、画像補正プログラム側で、印刷用自動補正処理を禁止する設定にすることもできるし、撮影時情報を画像補正内容に応じて書き換えた状態で印刷用自動補正処理を実行させる設定にすることも可能である。ここで、本実施形態のプログラム間通信方式においては、画像データと撮影時情報の他に印刷用補正情報（以下、印刷用情報とする）もプログラム間で転送する構成であったが、プログラム間で転送する他の情報としてフル解像度情報を適用する構成も考えられる。このフル解像度情報の転送は、現画像を展開したときのサイズを勝手に変えて欲しくない場合に、そのまま送り返し欲しいという要求によるものである。
【００８３】
〔第３の実施形態〕
第１の実施形態では、プログラム間で大量のデータを転送するための共有メモリのサイズが、転送対象となるデータのサイズより小さい場合の処理については触れていなかった。第３の実施形態におけるプログラム間通信方式では、このような場合に対処するため共有メモリの再配置処理が可能な構成を有する。具体的には、第３の実施形態では、第１の実施形態で常に０であった、状態コードを利用して共有メモリの再配置処理を行う。共有メモリが足りない場合に、図１７に示す手順で共有メモリを再配置処理する。
【００８４】
図１７は、第３の実施形態におけるプログラム間通信方式で利用する共有メモリの再配置処理を示す図である。図１７に示すように、まず、ステップＳ１７０１において、データを転送する側のプログラム（以下、単にプログラムとする）は、新しい共有メモリの領域を確保する。共有メモリの識別名は２４バイト以下になるように設定する。また、識別名はＮｕｌｌターミネイトする。つまり、識別名の末尾は必ず０ｘ００である。次に、ステップＳ１７０２に進み、プログラムは、古い領域の先頭４バイト（状態コード）に、０ｘＦＦＦＦＦＦＦＦを格納する。通常はこの後ろに図１２や図１６に示したようなデータが続くが、状態コードが０ｘＦＦＦＦＦＦＦＦである場合には、新しい共有メモリの識別名を格納する。次に、ステップＳ１７０３に進み、プログラムは、新しい共有メモリの領域を作成して、その識別名を記録する。次に、ステップＳ１７０４に進み、プログラムは、古い共有メモリの領域をクローズする。以上により、共有メモリの再配置処理を終了する。上述した共有メモリの再配置処理後に、プログラムは、新しい共有メモリに対して、転送対象であるデータを格納する。
【００８５】
次に、読み込み側（データを転送される側）のプログラム（以下、読み込み側プログラムとする）の処理について説明する。共有メモリのデータを読み込む場合、第１〜第２の実施形態では特に状態コードをチェックしなかったが、本実施形態では状態コードをチェックして、新しい共有メモリが確保されたかどうかを確認する。図１８は、読み込み側プログラムにおける新たな共有メモリの利用開始処理を示すフロー図である。
【００８６】
まず、ステップＳ１８０１において、読み込み側プログラムは、共有メモリの状態コードをチェックする。ここで、状態コードが０ｘＦＦＦＦＦＦＦＦの場合（ステップＳ１８０１のＮｏ）には、ステップＳ１８０２へ進み、読み込み側プログラムは、新たな共有メモリの識別名を取得する。また、状態コードが０の場合（ステップＳ１８０１のＹｅｓ）には、新たな共有メモリが再配置されていないことを示しているので、読み込み側プログラムは、新たな共有メモリの利用開始処理を終了する。
【００８７】
上述したステップ１８０２の具体的な処理として、読み込み側プログラムは、共有メモリの先頭から５バイト目以降を読み込み、新しい共有メモリの識別名を取得する。次に、ステップＳ１８０３において、読み込み側プログラムは、古い共有メモリをクローズする。次に、ステップＳ１８０４において、読み込み側プログラムは、新しい共有メモリをオープンする。以上により、読み込み側プログラムにおける新たな共有メモリの利用開始処理を終了する。
【００８８】
尚、ＯＳがウィンドウズ（登録商標）であれば、共有メモリが参照している全てのプログラムからクローズされた場合には、システムからその共有メモリの領域が削除される。以上に述べたような処理を行うことで、共有メモリの再割り当てを行うことが可能になる。
【００８９】
〔他の応用例〕
上述した実施形態によるプログラム間通信方式を用いると、プログラム間の通信処理を局所化することができる。したがって、プログラム間通信のための処理を、プログラム間通信モジュールという形でカプセル化することができる。これによって、プログラムの開発者にプログラム間通信の手順などを意識させることなくプログラム間通信を実現させることができ、開発コストを低減することが可能になる。以下に、上述した実施形態におけるプログラム間通信方式の他の応用例として、上記のようなプログラム間通信の処理をモジュール化する手法の概要について説明する。
【００９０】
上述した実施形態によるプログラム間通信方式では、図７に示したコマンドがやりとりされるだけになっている。ここで、図７に示したコマンドの内、ＤＥＣＯＤＥコマンド以外は、自動応答可能であることを以下に説明する。
【００９１】
ＳＥＮＤ＿ＭＥＳＳＡＧＥ＿ＩＤコマンドを受け取った時に返す値は、このコマンドを受け取る時点で通信用メッセージＩＤが確定していることになる。これは、ＳＥＮＤ＿ＷＩＮＤＯＷ＿ＨＡＮＤＬＥを受け取ったときに返すべきウインドウハンドルの値も同様である。したがって、この２つについては、通信用メッセージＩＤを処理するルーチンの先頭で、自動応答することが可能である。
【００９２】
次に、ＥＮＤ＿ＰＲＯＣＥＳＳコマンドとＥＮＤ＿ＰＡＲＥＮＴコマンドであるが、これらも受信後の処理は決まっている。ＥＮＤ＿ＰＲＯＣＥＳＳコマンドの場合は、プロセス間通信用の情報を初期化して、通信を切断すれば良い。また、ＥＮＤ＿ＰＡＲＥＮＴコマンドの場合は、プログラムの終了処理を開始するだけである。ＯＳがウィンドウズ（登録商標）の場合には、プログラムのルートウインドウに対して、ＷＭ＿ＣＬＯＳＥメッセージを送ると、プログラムの終了処理が開始される。したがって、この部分の処理も、ＳＥＮＤ＿ＭＥＳＳＡＧＥ＿ＩＤコマンドやＳＥＮＤ＿ＷＩＮＤＯＷ＿ＨＡＮＤＬＥコマンドと同様に自動応答することが可能である。
【００９３】
さらに、初期化フェイズ５１の処理についても、プログラムの起動時オプションで必要な情報を伝えるので、起動オプションを解析することで、他のプログラムから起動されたかどうかの判断が可能である。さらに、解析が完了した時点で通信相手のウインドウハンドルや通信用メッセージＩＤが取得できるので、ここに対して、プログラムのウインドウハンドルや通信用メッセージＩＤを通知するだけでよい。
ファイルのリスト共有についても、前述のように通信経路が確定した時点で共有メモリの識別名も伝達されるので、プログラム作成者には共有メモリを使っていることを意識させることなくファイル名の共有が可能になる。
【００９４】
以上述べたように、本プログラム間通信方式では、通信に必要な部分の殆どを、プログラム作成者から隠蔽することが可能になる。通信部分をプログラム作成者に対して隠蔽することで、通信のタイミングなどを共通化し、スムーズなプログラム間通信を実現することができるようになる。これにより、例えば上述した実施形態のようにプログラム間で画像データの転送を行う場合には、本プログラム間通信方式を利用して通信手順が局所化されていることの効果がより顕著になる。
【００９５】
また、上述した実施形態では、図５、図８〜図１１、図１３〜図１５、図１７、図１８に示す各処理を実現する為のプログラムを一次記憶１０２に読み込んでＣＰＵ１０１が実行することによりその機能を実現させるものであったが、この限りではなく、各処理の全部または一部の機能を専用のハードウェアにより実現してもよい。
また、上述した二次記憶１０３は、光磁気ディスク装置、フラッシュメモリ等の不揮発性のメモリや、ＣＤ−ＲＯＭ等の読み出しのみが可能な記録媒体、ＲＡＭ以外の揮発性のメモリ、あるいはこれらの組み合わせによるコンピュータ読み取り、書き込み可能な記録媒体より構成されてもよい。
【００９６】
また、図５、図８〜図１１、図１３〜図１５、図１７、図１８において各種処理を行う機能を実現する為のプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各処理を行っても良い。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
【００９７】
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００９８】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現する為のものであっても良い。さらに、前述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００９９】
また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体およびプログラムプロダクトは、本発明の範疇に含まれる。
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【０１００】
【図１】第１の実施形態におけるコンピュータシステムのハードウェア構成を示す図である。
【図２】画像補正プログラムにより出力デバイス１０５に表示される画像選択画面例および画像補正画面例を示す図である。
【図３】図２の画像選択画面２０で複数の画像を選択した場合の画像補正画面例を示す図である。
【図４】画像印刷プログラムにより出力デバイス１０５に表示される画像選択画面例と印刷条件設定画面例を示す図である。
【図５】図１に示したコンピュータシステムにおけるプログラム間の通信手順を示す図である。
【図６】本実施形態における通信用メッセージＩＤに含ませるコマンドおよびパラメータ割り当て例を示す図である。
【図７】図６のコマンド部において、上位１バイトに相当する定義例の一覧を示す図である。
【図８】図５に示した初期化フェイズ５１の処理の詳細を示す図である。
【図９】初期化フェイズ５１において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。
【図１０】他のプロセスで起動しているウインドウの表示状態を変更できないＯＳの場合に、初期化フェイズ５１において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。
【図１１】接続フェイズ５２における画像データ要求時の処理を示すフロー図である。
【図１２】共有メモリに格納する画像データおよび付属情報のフォーマット例を示す図である。
【図１３】画像印刷プログラムを終了する際に画像補正プログラムのウインドウを表示状態に戻す処理を示す図である。
【図１４】他のプロセスで起動しているウインドウの表示状態を変更できないＯＳの場合に、終了フェイズ５３において連携動作する２つのプログラムがあたかも一つのプログラムとして動作するように見せるための処理を示すフロー図である。
【図１５】第２の実施形態のプログラム間通信方式における撮影時情報の処理を示す図である。
【図１６】第２の実施形態における共有メモリに格納する画像データおよび付属情報のフォーマット例を示す図である。
【図１７】第３の実施形態におけるプログラム間通信方式で利用する共有メモリの再配置処理を示す図である。
【図１８】読み込み側プログラムにおける新たな共有メモリの利用開始処理を示すフロー図である。
【図１９】第１の実施形態における連携開始処理中の起動側プログラムの終了回避方法を示すフロー図である。
【符号の説明】
【０１０１】
１０１      ＣＰＵ
１０２      一次記憶
１０３      二次記憶
１０４      入力デバイス
１０５      出力デバイス
【図１】
2005050307.tif 000003
【図２】
2005050307.tif 000004
【図３】
2005050307.tif 000005
【図４】
2005050307.tif 000006
【図５】
2005050307.tif 000007
【図６】
2005050307.tif 000008
【図７】
2005050307.tif 000009
【図８】
2005050307.tif 000010
【図９】
2005050307.tif 000011
【図１０】
2005050307.tif 000012
【図１１】
2005050307.tif 000013
【図１２】
2005050307.tif 000014
【図１３】
2005050307.tif 000015
【図１４】
2005050307.tif 000016
【図１５】
2005050307.tif 000017
【図１６】
2005050307.tif 000018
【図１７】
2005050307.tif 000019
【図１８】
2005050307.tif 000020
【図１９】
2005050307.tif 000021