(57)【特許請求の範囲】
【請求項１】
プロセッサを備える装置であって、
前記プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するアプリケーションプログラムを記憶する記憶手段と、
前記第１のプログラム層が、ユーザからの指示を受け付けるためのユーザインターフェースを表示装置に表示する表示手段と、
前記表示手段により表示された前記ユーザインターフェースに対する指示の入力があったことに応じて、前記第１のプログラム層が前記第２のプログラム層に画像データの取得を要求し、当該要求に応じて前記第２のプログラム層が所定の記憶媒体内の前記画像データを取得する第１の画像取得手段と、
前記第１の画像取得手段により取得された前記画像データの第１のデータ形式を、前記第２のプログラム層が、前記第１のプログラム層において利用可能な第２のデータ形式に変換する第１の変換手段と、
前記第１の変換手段により前記変換が行われた前記第２のデータ形式である画像データを、前記第１のプログラム層が取得する第２の画像取得手段と、
前記第２の画像取得手段により前記第１のプログラム層が取得した前記画像データを、前記第１のプログラム層が描画する描画手段と、
前記ユーザインターフェースを介してユーザからの所定の指示があった場合に、前記第２のプログラム層が、前記第１の画像取得手段により取得された画像データに基づく処理対象の画像データのデータ形式を、外部デバイスが処理可能な第３のデータ形式に変換する第２の変換手段と、
前記外部デバイスとの通信を、前記第１のプログラム層から前記第２のプログラム層に要求し、当該要求に応じて前記第２のプログラム層が前記第２の変換手段により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データを、前記外部デバイスに向けて送信する送信手段と
を有することを特徴とする装置。
【請求項２】
プロセッサを備える装置により実行されるプログラムであって、前記プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するアプリケーションプログラムであって、
前記第１のプログラム層が、ユーザからの指示を受け付けるためのユーザインターフェースを表示装置に表示する表示工程と、
前記表示工程により表示された前記ユーザインターフェースに対する指示の入力があったことに応じて、前記第１のプログラム層が前記第２のプログラム層に画像データの取得を要求し、当該要求に応じて前記第２のプログラム層が所定の記憶媒体内の前記画像データを取得する第１の画像取得工程と、
前記第１の画像取得工程により取得された前記画像データの第１のデータ形式を、前記第２のプログラム層が、前記第１のプログラム層において利用可能な第２のデータ形式に変換する第１の変換工程と、
前記第１の変換工程により前記変換が行われた前記第２のデータ形式である画像データを、前記第１のプログラム層が取得する第２の画像取得工程と、
前記第２の画像取得工程により前記第１のプログラム層が取得した前記画像データを、前記第１のプログラム層が描画する描画工程と、
前記ユーザインターフェースを介してユーザからの所定の指示があった場合に、前記第２のプログラム層が、前記第１の画像取得工程において取得された画像データに基づく処理対象の画像データのデータ形式を、外部デバイスが処理可能な第３のデータ形式に変換する第２の変換工程と、
前記外部デバイスとの通信を、前記第１のプログラム層から前記第２のプログラム層に要求し、当該要求に応じて前記第２のプログラム層が前記第２の変換工程により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データを、前記外部デバイスに向けて送信する送信工程と
を前記装置に実行させることを特徴とするプログラム。
【請求項３】
前記描画工程は、前記第２の画像取得工程により前記第１のプログラム層が取得した前記画像データに基づき、前記ユーザインターフェースにおける所定の表示領域内に画像を描画する
ことを特徴とする請求項２に記載のプログラム。
【請求項４】
前記第２のプログラム層は、前記第１の画像取得工程で取得した画像データを、前記第２の変換工程の変換対象とするために保持することを特徴とする請求項２又は３に記載のプログラム。
【請求項５】
前記第１のプログラム層からの要求に応じて前記第２のプログラム層が、前記外部デバイスと通信し、前記外部デバイスによる処理に関わる情報を前記外部デバイスから取得するデバイス情報取得工程を前記装置にさらに実行させることを特徴とする請求項２乃至４のいずれか１項に記載のプログラム。
【請求項６】
前記外部デバイスはプリンタであり、前記デバイス情報取得工程は、用紙種類とサイズ、縁無し印刷機能の有無、印刷品位の少なくとも１つを示す情報を前記プリンタの印刷に関わる情報として取得する
ことを特徴とする請求項５に記載のプログラム。
【請求項７】
前記デバイス情報取得工程により前記第２のプログラム層が取得した前記外部デバイスの処理に関わる情報を前記第１のプログラム層が取得し、前記表示工程により当該情報に基づく設定画面が前記ユーザインターフェースに表示され、
前記設定画面に基づく設定情報を前記第２のプログラム層が前記第１のプログラム層から受信することを特徴とする請求項５または６に記載のプログラム。
【請求項８】
前記第２の変換工程により、前記第２のプログラム層が前記設定情報に基づいて前記変換を行うことを特徴とする請求項７に記載のプログラム。
【請求項９】
前記送信工程により、前記第２のプログラム層が、前記第２の変換工程により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データと前記設定情報とに基づくコマンドを、前記外部デバイスに向けて送信することを特徴とする請求項７に記載のプログラム。
【請求項１０】
前記第２のデータ形式が表す画像データと、前記第３のデータ形式が表す画像データは、ＲＧＢ色空間で表される画像データであることを特徴とする請求項２乃至９のいずれか１項に記載のプログラム。
【請求項１１】
前記第２のデータ形式は、テキストデータのデータ形式であることを特徴とする請求項２乃至１０のいずれか１項に記載のプログラム。
【請求項１２】
前記第２のデータ形式は、ＢＡＳＥ６４に従って変換されたテキストデータであることを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記外部デバイスはプリンタであり、前記所定の指示は印刷指示であり、
前記第２の変換工程は前記第１の画像取得工程において取得された画像データに基づく処理対象の画像データを、前記第３のデータ形式として前記プリンタが処理可能なデータ形式に変換し、
前記送信工程は、前記第２の変換工程で変換して得た画像データを印刷対象画像データとして前記プリンタに送信することで、前記プリンタが前記印刷対象画像データに基づく画像を印刷する
ことを特徴とする請求項２乃至１２のいずれか１項に記載のプログラム。
【請求項１４】
前記第２のプログラム層は、前記第１の画像取得工程により取得された前記画像データに対応するＩＤを保持し、前記所定の指示があった場合に、前記第２の変換工程は、前記第２のプログラム層が前記第１のプログラム層から受信したＩＤに対応する前記第１の画像取得工程において取得された画像データに基づく処理対象の画像データに対して、前記変換を行うことを特徴とする請求項２乃至１３のいずれか１項に記載のプログラム。
【請求項１５】
前記送信工程は、前記第３のデータ形式であり、且つ前記第２のプログラム層によりリサイズ、スタンプ画像の追加の少なくとも一方が行われた前記処理対象の画像データを送信することを特徴とする請求項２乃至１４のいずれか１項に記載のプログラム。
【請求項１６】
前記ユーザインターフェースを介してユーザからの補正指示があった場合に、前記第１のプログラム層が前記補正指示から前記第２のプログラム層において利用可能な形式の補正指示データを生成し、前記第２のプログラム層が当該補正指示データに従って前記画像データを補正するとともに、補正後の画像データを前記描画工程で描画するために前記第２のデータ形式に変換して、前記第１のプログラム層に供給する画像処理工程と、
を有することを特徴とする請求項２乃至１５のいずれか１項に記載のプログラム。
【請求項１７】
プロセッサを有し、前記プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するアプリケーションプログラムを記憶する記憶手段を有する装置による方法であって、
前記第１のプログラム層が、ユーザからの指示を受け付けるためのユーザインターフェースを表示装置に表示する表示工程と、
前記表示工程により表示された前記ユーザインターフェースに対する指示の入力があったことに応じて、前記第１のプログラム層が前記第２のプログラム層に画像データの取得を要求し、当該要求に応じて前記第２のプログラム層が所定の記憶媒体内の前記画像データを取得する第１の画像取得工程と、
前記第１の画像取得工程により取得された前記画像データの第１のデータ形式を、前記第２のプログラム層が、前記第１のプログラム層において利用可能な第２のデータ形式に変換する第１の変換工程と、
前記第１の変換工程により前記変換が行われた前記第２のデータ形式である画像データを、前記第１のプログラム層が取得する第２の画像取得工程と、
前記第２の画像取得工程により前記第１のプログラム層が取得した前記画像データを、前記第１のプログラム層が描画する描画工程と、
前記ユーザインターフェースを介してユーザからの所定の指示があった場合に、前記第２のプログラム層が、前記第１の画像取得工程において取得された画像データに基づく処理対象の画像データのデータ形式を、外部デバイスが処理可能な第３のデータ形式に変換する第２の変換工程と、
前記外部デバイスとの通信を、前記第１のプログラム層から前記第２のプログラム層に要求し、当該要求に応じて前記第２のプログラム層が前記第２の変換工程により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データを、前記外部デバイスに向けて送信する送信工程と
を有することを特徴とする方法。
【請求項１８】
前記第１のプログラム層からの要求に応じて前記第２のプログラム層が、前記外部デバイスと通信し、前記外部デバイスによる処理に関わる情報を前記外部デバイスから取得するデバイス情報取得工程を前記装置にさらに実行させることを特徴とする請求項１７に記載の方法。
【請求項１９】
前記外部デバイスはプリンタであり、前記デバイス情報取得工程は、用紙種類とサイズ、縁無し印刷機能の有無、印刷品位の少なくとも１つを示す情報を前記プリンタの印刷に関わる情報として取得する
ことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記デバイス情報取得工程により前記第２のプログラム層が取得した前記外部デバイスの処理に関わる情報を前記第１のプログラム層が取得し、前記表示工程により当該情報に基づく設定画面が前記ユーザインターフェースに表示され、
前記設定画面に基づく設定情報を前記第２のプログラム層が前記第１のプログラム層から受信することを特徴とする請求項１８または１９に記載の方法。
【請求項２１】
前記第２の変換工程により、前記第２のプログラム層が前記設定情報に基づいて前記変換を行うことを特徴とする請求項２０に記載の方法。
【請求項２２】
前記送信工程により、前記第２のプログラム層が、前記第２の変換工程により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データと前記設定情報とに基づくコマンドを、前記外部デバイスに向けて送信することを特徴とする請求項２０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、装置間の通信に関するものである。
【背景技術】
【０００２】
近年、カメラ機能が搭載された可搬型多機能携帯端末（以下、モバイルコンピュータ）が普及し、デジタルカメラや従来のパーソナルコンピュータ（以下、ＰＣ）の販売台数を遥かに凌ぐ勢いで拡販されている。
【０００３】
このようなモバイルコンピュータは、基本的には３つの要素で成り立っている。即ち、コンピュータ自身であるハードウェアと、該ハードウェア上で動作するオペレーティングシステム（以下、ＯＳ）と、該ＯＳ上で動作するアプリケーションである。ユーザは、該アプリケーションを用いて、地図やメール、インターネット上のウェブサイトの閲覧等の機能を使用することが可能である。
【０００４】
このようなモバイルコンピュータ上で動作するアプリケーションの形態としては、主に二つのものが存在する。即ち、ネイティブアプリケーションとウェブアプリケーションである。以下、それぞれの特徴を説明する。
【０００５】
まず、ネイティブアプリケーションとは、通常、ＯＳ毎に用意される開発環境、及び開発言語を用いて開発される。例えば、Ａ社が提供するＯＳ上ではＣ／Ｃ＋＋言語、Ｂ社が提供するＯＳ上ではＪａｖａ（登録商標）言語、Ｃ社が提供するＯＳ上では更に異なる開発言語を用いる、という具合である。通常、ネイティブアプリケーションは、各開発環境において予めコンパイルされ、人間が理解可能ないわゆる高水準言語から、コンピュータのＣＰＵが解釈可能なアセンブラ等の命令セット群に変換される。このように、通常のネイティブアプリケーションでは、命令をＣＰＵが直接解釈するために、高速動作が可能である、というメリットが存在する。
【０００６】
一方、ウェブアプリケーションとは、近年では、各コンピュータ上のＯＳに標準的に組み込まれているウェブブラウザ上で動作するアプリケーションのことである。アプリケーションはウェブブラウザが解釈できるよう、一般的には、ＨＴＭＬ５及びＣＳＳ、さらにＪａｖａＳｃｒｉｐｔ（登録商標）等の言語を用いて開発される。これらはウェブ標準言語であるため、これらのウェブ標準言語でウェブアプリケーションを一旦記述すれば、ウェブブラウザが動作する環境であれば、どこでも動作可能というメリットが存在する。
【０００７】
例えば、特許文献１には、ウェブブラウザ上で動作するウェブアプリケーションにより印刷を実行することが開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−２３３０３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のように、近年のモバイルコンピュータにおいては、高解像度のカメラを保持している。モバイルコンピュータは日常携帯されており、かつ写真を数千枚程度記憶可能なメモリを備えているため、ユーザは非常に高い頻度で気楽に写真撮影を楽しむことができる。これによって得られる撮影画像に対して、例えば、モノクロ・セピア調にするフィルタ処理を施したり、写真の明るさ、色バランス等を修正するための画像処理は、ユーザにとっても大変重要で欠かせないアプリケーションとなっている。このような画像処理をユーザに対して、ストレスなく、簡単に提供できるようなアプリケーションを、上記２つのアプリケーション形態で作成することを考えると、以下のようなことが発生し得る。
【００１０】
まず、ネイティブアプリケーションでは、上述のように処理を高速実行できるというメリットがある。しかし、本形態は、ＯＳ毎に異なる開発言語で別々に開発する必要があるため、開発コストと開発時間が増大し、ユーザに迅速に提供できない場合がある。また、ネイティブアプリケーションは、予めコンパイル（翻訳）する必要がある。そのため、例えば、アプリケーションのＵＩ（ユーザインタフェース）デザインを動作時に変更したり、機能を動的に追加する等は難しく、柔軟性に欠ける場合がある。
【００１１】
また、ウェブアプリケーションでは、ＨＴＭＬ５、ＣＳＳ、ＪａｖａＳｃｒｉｐｔで記述されたウェブアプリケーションの本体が、モバイルコンピュータ外部のサーバ上に存在することが通常である。ウェブアプリケーションは、利用時に動的にサーバからモバイルコンピュータにインターネット回線を介してダウンロードするため、ＵＩデザイン等を予めコンパイルすることなく動的に変更することが可能である。
【００１２】
しかし、高度で複雑な処理を実行する場合、ウェブアプリケーションは、ブラウザのセキュリティ上の制約から、ブラウザ上でＪａｖａＳｃｒｉｐｔによって実行するか、サーバ上で実行するという２つの選択肢しか存在しない。従来、ＪａｖａＳｃｒｉｐｔは、人間が視認可能な文字列のスクリプトとして記述され、該スクリプトを動作時に随時コンパイルすることで実行することができる。このことから、複雑な処理をＪａｖａＳｃｒｉｐｔで記述すると動作が遅くなる場合がある。
【００１３】
一方、この複雑な処理をサーバで実行するように構築した場合、モバイルコンピュータ内部に存在する写真等のデータを、インターネット回線を介してサーバ上にアップロードし、サーバで処理後の結果を、今度はサーバからダウンロードする時間が必要となる。このような構成は、モバイルアプリケーションに対してストレスの少ない、即時的な処理を実現することができない場合がある。それに加え、サーバでの処理は、オフラインでは実行できない。
【００１４】
即ち、近い将来訪れるモバイルコンピュータ全盛時代においては、開発期間をより短縮し、かつより汎用性の高いアプリケーション形態、開発環境をユーザに提供することが要望されている。加えて、ＪａｖａＳｃｒｉｐｔ等のスクリプトで記述されたウェブアプリケーションにおけるセキュリティ上の制約を確保しながら、外部デバイスとの通信を行える等の利便性の向上も要望されている。
【００１５】
本発明は上記の課題を解決するためになされたものであり、より柔軟かつ利便性の高い装置の使用環境を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記の目的を達成するための本発明による装置は以下の構成を備える。即ち、
プロセッサを備える装置であって、
前記プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するアプリケーションプログラムを記憶する記憶手段と、
前記第１のプログラム層が、ユーザからの指示を受け付けるためのユーザインターフェースを表示装置に表示する表示手段と、
前記表示手段により表示された前記ユーザインターフェースに対する指示の入力があったことに応じて、前記第１のプログラム層が前記第２のプログラム層に画像データの取得を要求し、当該要求に応じて前記第２のプログラム層が所定の記憶媒体内の前記画像データを取得する第１の画像取得手段と、
前記第１の画像取得手段により取得された前記画像データの第１のデータ形式を、前記第２のプログラム層が、前記第１のプログラム層において利用可能な第２のデータ形式に変換する第１の変換手段と、
前記第１の変換手段により前記変換が行われた前記第２のデータ形式である画像データを、前記第１のプログラム層が取得する第２の画像取得手段と、
前記第２の画像取得手段により前記第１のプログラム層が取得した前記画像データを、前記第１のプログラム層が描画する描画手段と、
前記ユーザインターフェースを介してユーザからの所定の指示があった場合に、  前記第２のプログラム層が、前記第１の画像取得手段により取得された画像データに基づく処理対象の画像データのデータ形式を、外部デバイスが処理可能な第３のデータ形式に変換する第２の変換手段と、
前記外部デバイスとの通信を、前記第１のプログラム層から前記第２のプログラム層に要求し、当該要求に応じて前記第２のプログラム層が前記第２の変換手段により前記変換が行われた前記第３のデータ形式である前記処理対象の画像データを、前記外部デバイスに向けて送信する送信手段と
を有する。
【発明の効果】
【００１７】
本発明によれば、より柔軟かつ利便性の高い装置の使用環境を提供できる。
【図面の簡単な説明】
【００１８】
【図１】情報処理装置の構成を示すブロック図である。
【図２】情報処理装置のソフトウェアの構成を示すブロック図である。
【図３】ユーザ操作に伴う処理を示すフローチャートである。
【図４】写真画像選択の詳細を示すフローチャートである。
【図５】画像処理の詳細を示すフローチャートである。
【図６】スタンプ追加の詳細を示すフローチャートである。
【図７】スタンプ特定の詳細を示すフローチャートである。
【図８】スタンプ操作の詳細を示すフローチャートである。
【図９】プリンタ設定の詳細を示すフローチャートである。
【図１０】レンダリングの詳細を示すフローチャートである。
【図１１】プリントの詳細を示すフローチャートである。
【図１２】アプリケーション画面の一例を示す図である。
【図１３】設定画面の一例を示す図である。
【図１４】情報処理装置とデジタルカメラとの間で実行する処理を示すフローチャートである。
【図１５】情報処理装置と外部デバイスとの間で実行する処理を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
【００２０】
＜実施形態１＞
本実施形態では、情報処理装置上で、後述するハイブリッド型アプリケーションを動作させ、ユーザが選択した画像に対して、様々な画像処理を適用した後に、その画像を印刷する構成について説明する。
【００２１】
＜ハードウェア構成の説明＞
図１は情報処理装置１１５として、例えば、スマートフォンや携帯電話等の携帯型情報端末の構成例を説明するブロック図である。同図において、１００はＣＰＵ（中央演算装置／プロセッサ）であり、以下で説明する各種処理をプログラムに従って実行する。図中のＣＰＵ１００は１つであるが、複数のＣＰＵあるいはＣＰＵコアによって構成されていても良い。１０１はＲＯＭであり、ＣＰＵ１００により実行されるプログラムが記憶されている。１０２はＲＡＭであり、ＣＰＵ１００によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。
【００２２】
１０３はハードディスクやフラッシュメモリ等の２次記憶装置であり、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラムを記憶するための記憶媒体である。１０４はディスプレイであり、各種処理を実現するための操作を受け付けるためのＵＩ（ユーザインタフェース）や、実行された処理による処理結果等の各種情報を表示する。ディスプレイ１０４は、タッチセンサ１０５を備えても良い。
【００２３】
情報処理装置１１５は、内部撮像デバイス１１０を備えてもよい。内部撮像デバイス１１０による撮像によって得られた画像データは、所定の画像処理を経た後、２次記憶装置１０３に保存される。また、画像データは、外部Ｉ／Ｆ１０８を介して接続された外部撮像デバイス１１１から読み込むこともできる。
【００２４】
情報処理装置１１５は、外部Ｉ／Ｆ１０９を備え、インターネット等のネットワーク１１３を介して通信を行うことができる。情報処理装置１１５は、この通信Ｉ／Ｆ１０９を介して、ネットワーク１１３に接続されたサーバ１１４より画像データを取得することもできる。
【００２５】
情報処理装置１１５は、加速度センサ１０６を備え、情報処理装置１１５自身の位置姿勢に関する加速度情報を取得することができる。情報処理装置１１５は、外部Ｉ／Ｆ１０７を介し、プリンタ等の外部デバイス１１２と接続されており、画像データ等のデータを出力することができる。外部デバイス１１２は、ネットワーク１１３にも接続されており、通信Ｉ／Ｆ１０９経由で、画像データを送受信することができる。
【００２６】
外部Ｉ／Ｆ１０７〜１０９は、有線通信と無線通信の内、少なくともいずれかの通信形態を有するインタフェースであり、利用する通信形態に応じて外部デバイス（外部デバイス１１２あるいはサーバ１１４）との通信を行う。有線通信には、例えば、ＵＳＢ、イーサネット（登録商標）等があり、無線通信には、無線ＬＡＮ、ＮＦＣ、ブルートゥース、赤外線通信等がある。また、無線通信として、無線ＬＡＮを利用する場合には、装置同士が直接接続する形態もあれば、無線ＬＡＮルータ等の中継装置を介して接続する形態もある。また、外部Ｉ／Ｆ１０７〜１０９は、図では別々に構成されているが、一体となって構成されていても良い。
【００２７】
情報処理装置１１５の動作に必要な電源は、バッテリ１１７によって供給される。情報処理装置１１５が備える各種構成要素は、制御バス／データバス１１６を介して相互に接続され、ＣＰＵ１００は、この制御バス／データバス１１６を介して、各種構成要素を制御する。
【００２８】
尚、本実施形態では、情報処理装置１１５が、その情報処理装置１１５が備える制御部（ＣＰＵ１００）によって実行されるプログラム等のソフトウェアの実行場所（ソフトウェア実行環境）となる。
【００２９】
＜ソフトウェアのブロック図＞
図２は情報処理装置１１５で動作するソフトウェア構成のブロック図である。
【００３０】
情報処理装置１１５は、スクリプト層２１７、ネイティブ層２１８、及びＯＳ層２１９のプログラムを実装している。これらの各層は、ＣＰＵ１００がＲＯＭ１０１あるいは２次記憶装置１０３に記憶されている対応するプログラムを読み出し実行することにより実現される。
【００３１】
スクリプト層２１７は、ＨＴＭＬ５やＣＳＳ３、及びＪａｖａＳｃｒｉｐｔ等のウェブ標準言語を使って、テキストデータで命令セット（コンテンツの描画や画像の表示、動画の再生等）が記述されているプログラム層である。このスクリプト層２１７では、アプリケーション実行環境上で、そのアプリケーション実行環境に存在するプロセッサ（例えば、ＣＰＵ１００）を用いて、テキストデータの各種命令セットを翻訳して実行することになる。形態としては、実行の度に命令文を一行ずつ動的に翻訳する場合や、アプリケーションを起動したときに翻訳する場合、アプリケーションを情報処理装置１１５にインストールしたときに翻訳する場合等が考えられる。
【００３２】
以後、スクリプト層２１７で処理することや内容をスクリプトと呼ぶ。スクリプトの命令を情報処理装置１１５内で翻訳する形態の例として、ネイティブ層２１８やＯＳ層２１９が備えるインタプリタの機能を使用することが挙げられる。尚、本実施形態においては、アプリケーションのＵＩの大部分が、このスクリプト層２１７で記述されていることを想定している。
【００３３】
ネイティブ層２１８は、アプリケーション実行環境以外で予め翻訳（コンパイル）された命令セットを実行する部分である。形態としては、ＣもしくはＣ＋＋といった高水準言語で記述されたコードが、予めアプリケーションの開発者のＰＣやサーバ上でコンパイルされ、ＣＰＵ１００が解釈できる命令の集合体となっている。以後、ネイティブ層２１８で処理することや内容、後述するＯＳ層２１９の機能をネイティブ層２１８から呼び出すことを含め、ネイティブと呼ぶこととする。尚、ネイティブ層２１８の別の実装系として、Ｊａｖａが挙げられる。Ｊａｖａは、Ｃ／Ｃ＋＋と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳される。翻訳された中間コードは、各ＯＳが備えるＪａｖａ仮想環境上で動作する。本実施形態においては、このようなプログラム形態も、ネイティブ層２１８の一種に含める。
【００３４】
ＯＳ層２１９は、情報処理装置１１５のオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）に対応する。ＯＳ層２１９は、ハードウェア機能の使用をアプリケーションに提供する役割及び固有の機能を有する。ＯＳ層２１９は、ＡＰＩを備え、スクリプト層２１７やネイティブ層２１８から機能を使用することができる。
【００３５】
本実施形態では、スクリプト層２１７からネイティブ層２１８の呼び出しを可能にすることをバインディング、もしくはバインドと呼ぶ。各種ネイティブの機能は、ＡＰＩを備え、該ＡＰＩをスクリプトが呼び出すことでネイティブの機能を使用することができる。
【００３６】
尚、本実施形態では、スクリプト層２１７とネイティブ層２１８を含むアプリケーションのことをハイブリッド型アプリケーションと呼ぶ。
【００３７】
スクリプト層２１７の画像取得部２０１は、ネイティブ層２１８に対し画像データの取得を依頼する。取得依頼時に、画像取得部２０１は、一意なＩＤを生成し、ネイティブ層２１８に送信する。このＩＤと、ネイティブ層２１８の画像読込部２０２で読み込まれた画像データは、対となって、ネイティブ層２１８のデータ保持部２０４に記憶される。
【００３８】
ネイティブ層２１８の画像読込部２０２は、画像データ群２１５から画像データを取得する。画像データ群２１５からの画像データの取得方法は、スクリプト層２１７の画像取得部２０１の依頼に依存する。依頼方法は、ＵＩ上に提供されているダイアログボックスから選択する、ファイルのパスから直接画像を選択する等が挙げられる。
【００３９】
ネイティブ層２１８のデータ変換部２０３は、ネイティブ層２１８のデータをスクリプト層２１７で利用できる形式のデータに変換する。一方で、データ変換部２０３は、スクリプト層２１７から送られてきたデータをネイティブ層２１８で利用できる形式にする変換も行う。
【００４０】
スクリプト層２１７のデータ変換部２０７は、スクリプト層２１７のデータをネイティブ層２１８で利用できる形式のデータに変換する。一方で、データ変換部２０７は、ネイティブ層２１８から送られてきたデータをスクリプト層２１７で利用できる形式にする変換も行う。
【００４１】
ネイティブ層２１８のデータ保持部２０４は、画像読込部２０２で読み込んだ画像データ、画像処理部２０８で画像処理が施された画像データを保持する。保持される画像データは、例えば、ＲＧＢ画像信号に展開されており、すぐに画像処理が実行できる形式になっている。また、保持されている画像データは、スクリプト層２１７の画像取得部２０１で生成されたＩＤと対になっており、このＩＤを指定することで、データ保持部２０４から対応する画像データを取得することができる。
【００４２】
スクリプト層２１７のコンテンツ描画部２０５は、ネイティブ層２１８のデータ変換部２０３を経由して取得した画像データをディスプレイ１０４に表示する。また、コンテンツ描画部２０５は、コンテンツ操作部２１０で操作された画像データの再描画も行う。コンテンツ操作部２１０は、スクリプト層２１７で画像データを操作する。この操作には、画像データの拡大、移動、回転等が挙げられる。
【００４３】
画像処理制御部２０６は、画像処理に用いる補正パラメータを決定し、ネイティブ層２１８の画像処理部２０８に画像処理を依頼する。まず、画像処理制御部２０６は、スクリプト層２１７で補正パラメータを設定する。設定された補正パラメータは、データ変換部２０７でネイティブ層２１８へ送信できる形式へ変換される。その後、変換された補正パラメータは、処理対象となる画像データのＩＤと共にネイティブ層２１８へ送信される。
【００４４】
ネイティブ層２１８の画像処理部２０８は、画像処理制御部２０６で指定されたＩＤと対応する画像をネイティブ層２１８のデータ保持部２０４から取得し、画像処理を施す。その際、どのような画像処理を施すかは、画像処理制御部２０６で設定された補正パラメータにより決定される。
【００４５】
ＯＳ層２１９のタッチイベント２０９は、ディスプレイ１０４のタッチに関する情報を取得する。タッチに関する情報とは、ディスプレイ１０４のタッチ検知、タッチされた位置情報等が挙げられる。
【００４６】
スクリプト層２１７のプリンタ制御部２１１は、レンダリング部２１６へのレンダリング開始依頼、プリンタ検知の依頼、プリンタ設定画面の表示、プリント情報の生成と送信を制御する。プリンタ設定画面では、用紙のサイズ、用紙の種類、カラー・モノクロ等のプリンタ設定がなされる。ここで設定された項目より、プリンタデータが生成される。
【００４７】
プリンタデータ生成部２１２は、プリンタ制御部２１１からの依頼を基に、プリンタ通信に必要なデータ、コマンドを生成する。プリンタ通信に必要なデータとは、通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャン等、プリンタの動作を決定するためのデータである。
【００４８】
ネイティブ層２１８の外部デバイス通信部２１３は、外部デバイス１１２（プリンタ等）との通信を行う。外部デバイス通信部２１３は、プリンタデータ生成部２１２から受信するプリンタデータを外部デバイス１１２へ送信したり、外部デバイス１１２から情報を受信する。
【００４９】
尚、本実施形態では、外部デバイス通信部２１３は、ＯＳ層２１９の通信制御部２２１を介して外部デバイス１１２と通信するが、外部デバイス通信部２１３は、直接、外部Ｉ／Ｆ１０７へデータを送信してもかまわない。ＯＳ層の通信制御部２２１が、通信する外部デバイス１１２が用いる通信プロトコルに対応していればその機能を使えば良い。通信制御部２２１が、通信する外部デバイス１１２が用いる通信プロトコルに対応していなければ、通信プロトコルに沿った通信データの扱いを外部デバイス通信部２１３が担う。
【００５０】
ＯＳ層２１９のインタプリタ２１４は、スクリプト層２１７で生成された命令を解釈・実行する。例えば、画像の描画等の命令は、インタプリタ２１４を通して実行され、ディスプレイ１０４に表示される。
【００５１】
画像データ群２１５は、画像データを保持している領域である。画像保存部２２０は、必要に応じて、データ保持部２０４が保持する画像データを画像データ群２１５に保存する。
【００５２】
レンダリング部２１６は、コンテンツ描画部２０５、画像処理制御部２０６、及びコンテンツ操作部２１０を制御して、処理対象の画像データのレンダリングを行う。この際、レンダリング結果、及び、生成途中の画像はディスプレイ１０４に表示しない。レンダリング結果は、ネイティブ層２１８のデータ変換部２０３に送信され、外部デバイス１１２（プリンタ等）が利用できる形式の画像データに変換される。
【００５３】
＜ユーザ操作に伴う処理＞
図３はユーザ操作を含む処理を示すフローチャートである。まず、図３を用いて、Ｓ２１からＳ２８の各処理の概要を説明し、詳細は後述する。また、この図３に示す処理は、情報処理装置１１５のＣＰＵ１００が、ＲＯＭ１０１あるいは２次記憶装置１０３に記憶されているプログラムを実行することにより実現される。また、図３に示す各ステップは、ＵＩの１つである図１２に示すアプリケーション画面１２００に対するユーザ操作に従って遷移する。このアプリケーション画面１２００は、スクリプト層２１７によって生成される。このアプリケーション画面１２００の操作は、例えば、タッチセンサ１０５を介して実現される。
【００５４】
Ｓ２１で、ＣＰＵ１００は、アプリケーション画面１２００の写真画像選択ボタン１２０１に対するユーザ操作（タッチ操作も含む。以後も同様）を検知すると、その操作に応じて、任意の画像を選択する。画像を選択すると、ＣＰＵ１００は、アプリケーション画面１２００の描画領域１２０６の全体に選択された画像を表示する。
【００５５】
Ｓ２２では、ＣＰＵ１００は、表示されている画像の輝度を調整するためのスライドバー１２０２に対するユーザ操作を検知すると、そのユーザ操作に応じて、画像処理時に利用する補正パラメータを設定させる。そして、ＣＰＵ１００は、設定した補正パラメータに従って、表示されている画像に画像処理を施し、その処理内容及び処理結果を描画領域１２０６に表示する。
【００５６】
Ｓ２３は、ＣＰＵ１００は、スタンプ追加ボタン１２０３に対するユーザ操作を検知すると、スタンプ一覧１２０７を表示する。スタンプ一覧１２０７に対するユーザ操作によってスタンプの選択を検知すると、ＣＰＵ１００は、描画領域１２０６に選択されたスタンプを追加・表示する。
【００５７】
Ｓ２４で、ＣＰＵ１００は、アプリケーション画面１２００に対するユーザ操作に応じて、スタンプを特定する。スタンプの特定とは、ディスプレイ１０４にユーザ操作によってタッチされた座標とスタンプの座標より、スタンプがタッチされたか否かを判断するものである。スタンプがタッチされた場合、そのスタンプは操作受付状態となる。ここでは、ユーザ操作に応じて、スタンプが操作受付状態になっているものとする。操作受付状態については後述する。
【００５８】
Ｓ２５で、ＣＰＵ１００は、操作受付状態になっているスタンプを回転するためのスライドバー１２０４に対するユーザ操作を検知すると、そのユーザ操作に応じて、スタンプ操作として、操作受付状態にあるスタンプを回転する。
【００５９】
Ｓ２６で、ＣＰＵ１００は、プリントボタン１２０５に対するユーザ操作を検知すると、プリントに必要な情報を設定するための設定画面１３０１（図１３）を表示する。プリントに必要な情報とは、例えば、図１３の設定画面１３０１に示されるように、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定項目がある。これ以外にも、両面／片面、モノクロ・カラー等、使用するプリンタが有する機能に応じて、設定可能な設定項目が構成される。
【００６０】
Ｓ２７で、ＣＰＵ１００は、設定画面１３０１の設定完了ボタン１３０２に対するユーザ操作を検知すると、描画領域に表示されている画像を、プリンタに出力するためのプリント解像度に変換するためのレンダリングを実行する。
【００６１】
Ｓ２８で、ＣＰＵ１００は、プリントの解像度に変換された画像を、プリンタ制御のコマンドと共にプリンタに送信することで、外部デバイス１１２でプリントを実行する。
【００６２】
尚、図３に示す処理では、説明を簡単にするため、必要最小限のステップ群を示しているが、処理内容はこれに限定されず、ステップ群の処理順序もこれに限定されるものではない。また、本実施形態において、プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層をスクリプト層２１７、プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層をネイティブ層２１８と定義する。そして、これらの第１のプログラム層と第２のプログラム層とを包含するプログラムがハイブリッド型アプリケーションを実現する。文字列データを第１の形式、バイナリデータを第２の形式と定義する。
【００６３】
＜写真画像選択の詳細＞
図３のＳ２１の写真画像選択の詳細について、図４を用いて説明する。
【００６４】
Ｓ３０１で、ＣＰＵ１００は、スクリプト層２１７で、一意なＩＤを生成する。このＩＤは、数値、文字列等、スクリプト層２１７からネイティブ層２１８へ送信できる形式であればどのような形でも良い。Ｓ３０２で、ＣＰＵ１００は、スクリプト層２１７で、生成したＩＤとともに、ネイティブ層２１８に、写真画像選択ボタン１２０１に対するユーザ操作に応じて画像選択を依頼する。依頼方法は、バインディング機能によりスクリプト層２１７からネイティブ層２１８固有の画像選択ＡＰＩを呼び出す。ネイティブ層２１８には、スクリプト層２１７から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆる、ラッパーが予め用意してある。
【００６５】
Ｓ３０３で、ＣＰＵ１００は、ネイティブ層２１８で、デバイス固有の画像選択ＵＩをディスプレイ１０４に表示する。表示された画像選択ＵＩに対するユーザ操作に基づいて、任意の画像を１枚選択する。画像の選択は、例えば、情報処理装置１１５内で管理されるフォルダから画像を１枚選択するものとするが、これに限定されるものではない。例えば、インターネット上の画像や、脱着可能な記憶媒体内の画像を選択しても良いし、情報処理装置１１５の内部撮像デバイス１１０を利用して撮影した画像を取得しても良い。
【００６６】
Ｓ３０４で、ＣＰＵ１００は、ネイティブ層２１８で、選択された画像を取得する。例えば、選択した画像が画像ファイルの状態であれば、ＣＰＵ１００は、ファイルを開き、その内容を読み取る。Ｓ３０５で、ＣＰＵ１００は、ネイティブ層２１８で、取得した画像をＲＧＢ展開する。Ｓ３０６で、ＣＰＵ１００は、ネイティブ層２１８で、展開したＲＧＢ画像を、スクリプト層２１７から取得したＩＤと関連付けてデータ保持部２０４に保持する。関連付け方法は、例えば、ＩＤとＲＧＢ画像を有するオブジェクトを作成することで、ＩＤによりＲＧＢ画像の特定を可能にするという方法が考えられる。ここで、関連付け方法は、これに限らず、ＩＤと選択された画像のアクセス先であるパスや、ＩＤとＲＧＢ展開に応じて実行される関数やクラス等も考えられる。
【００６７】
Ｓ３０７で、ＣＰＵ１００は、ネイティブ層２１８で、展開したＲＧＢ画像をスクリプト層２１７で解釈できる形式のデータに変換する。本実施形態では、変換するデータ形式をＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｙ  Ｅｘｐｅｒｔ  Ｇｒｏｕｐ）とする。Ｓ３０８で、ＣＰＵ１００は、ネイティブ層２１８で、ＪＰＥＧ形式のデータをＢＡＳＥ６４データに変換し、スクリプト層２１７へ送信する。これは、スクリプト層２１７では、ＲＧＢ画像のデータ配列をそのまま利用できないため、ネイティブ層２１８において、スクリプト層２１７で利用できる形式に変換する必要があるためである。ＪａｖａＳｃｒｉｐｔ（登録商標）では、文字列しか扱えないため、本実施形態では、文字列としてデータを表現するＢＡＳＥ６４の形式を利用する。
【００６８】
Ｓ３０９で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８で変換されたＢＡＳＥ６４データを受信するとともに、そのＢＡＳＥ６４データを表示するための描画領域をＲＡＭ１０２に確保する。本実施形態では、描画領域の確保の一例としてＨＴＭＬのＣａｎｖａｓ機能を利用し、画像の描画は、Ｃａｎｖａｓの有するＣｏｎｔｅｘｔオブジェクトのＡＰＩを利用する。
【００６９】
Ｓ３１０で、ＣＰＵ１００は、スクリプト層２１７で、補正パラメータを生成し、初期化する。ここで、補正パラメータとは、Ｓ２２の画像処理の内容を決定するパラメータ群を保持するオブジェクトである。ＪａｖａＳｃｒｉｐｔ（登録商標）で保持する補正パラメータの一例として、下記のような形態が考えられる。
【００７０】
var CorrectionParam = function(){
this.brightness = 0;
}
【００７１】
この補正パラメータは、ＣｏｒｒｅｃｔｉｏｎＰａｒａｍオブジェクトの中に、明るさ補正用にｂｒｉｇｈｔｎｅｓｓという名前の変数が設けられており、０という値を格納するということを表している。
【００７２】
本実施形態では、説明の簡略化のために、補正パラメータは明るさ（輝度）補正用のみであるが、その他の補正処理用のパラメータ（ぼかしフィルタの強度、セピア変換のオン・オフ等）を追加しても良いことは言うまでもない。
【００７３】
Ｓ３１１で、ＣＰＵ１００は、スクリプト層２１７で、描画領域で描画するデータにＢＡＳＥ６４データを指定し、それに従って、その描画領域に画像を描画する。具体的には、インタプリタ２１４がＢＡＳＥ６４データのスクリプトを解釈し、描画領域に画像として表示する。ここで、描画領域に、ＢＡＳＥ６４データを反映させるサンプルコードの一例を示す。
【００７４】
--------------------------------------------------
var base64Data = ネイティブ層からのＢＡＳＥ６４データ
var canvas = document.createElement("canvas");  //画像の描画領域確保
canvas.setAttribute("width", 100);              //描画領域の大きさ設定
canvas.setAttribute("height", 100);
var context = canvas.getContext("2d");  //描画領域に描画するＡＰＩを持つオブジェクトの生成
var img = new Image();    //Imageオブジェクトの生成
img.src = base64Data;     //画像のＵＲＩを受け取ったＢＡＳＥ６４データとする
img.onload = function(){  //画像のロードが終わってから処理を開始する
context.drawImage(img, 0, 0);  //contextオブジェクトのメソッドを用いて画像を描画領域に描画
document.getElementById("div").appendChild(canvas);
//本フローチャートではＣａｎｖａｓが何層にもなるレイヤー構造を想定している。これらのＣａｎｖａｓは至る所好き勝手に存在するわけではなく、描画、移動、拡大等の操作は、特定の領域内（図１２の描画領域１２０６）で完結する。その領域を指定しているものが「ｄｉｖ」であり、Ｃａｎｖａｓはそのｄｉｖに追加されてゆく形態をとる。
}
--------------------------------------------------
【００７５】
＜画像処理の詳細＞
図３のＳ２２の画像処理の詳細について、図５を用いて説明する。
Ｓ４０１で、ＣＰＵ１００は、スクリプト層２１７で、補正パラメータを設定する。ここでは、図３のＳ３１０で生成した補正パラメータのｂｒｉｇｈｔｎｅｓｓの値を、スライドバー１２０２に対するユーザ操作に応じて設定される値に更新する。Ｓ４０２で、ＣＰＵ１００は、スクリプト層２１７で、インジケータを起動し、ディスプレイ１０４に表示する。ここで、インジケータとは、ユーザに処理中である旨を伝える表示であり、一般には、プログレスバーや、時計マーク、図形の点滅や回転等の画像で表現する。Ｓ４０３で、ＣＰＵ１００は、スクリプト層２１７で、設定した補正パラメータをネイティブ層２１８で利用できる形式に変換する。ここで、補正パラメータはオブジェクトの形態を取っており、そのままではネイティブ層２１８で利用できないため、設定した補正パラメータをＪＳＯＮ文字列に変換する。そして、ＣＰＵ１００は、ＪＳＯＮ文字列に変換された補正パラメータを、図３のＳ３０１で生成したＩＤと共にネイティブ層２１８へ送信する。
【００７６】
Ｓ４０４で、ＣＰＵ１００は、ネイティブ層２１８で、ＪＳＯＮ文字列に変換された補正パラメータをデコードし、補正パラメータを取得する。Ｓ４０５で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から取得したＩＤを基に、図３のＳ３０５で展開されたＲＧＢ画像を特定する。Ｓ４０６で、ＣＰＵ１００は、ネイティブ層２１８で、取得した補正パラメータから施すべき画像処理を判断し、ＲＧＢ画像に対して該画像処理を行う。Ｓ４０７で、ＣＰＵ１００は、ネイティブ層２１８で、画像処理が施されたＲＧＢ画像から、スクリプト層２１７で解釈できる形式のデータに変換する。ここでは、図３のＳ３０７と同様に、ＪＰＥＧ形式のデータに変換する。Ｓ４０８で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７にインジケータの停止を依頼する。これは、ネイティブ層２１８から、スクリプト層２１７で定義されているインジケータ停止の関数を呼び出すことで実現する。
【００７７】
Ｓ４０９で、ＣＰＵ１００は、スクリプト層２１７で、インジケータを停止して、ディスプレイ１０４の表示から消去する。
【００７８】
一方、Ｓ４１０で、ＣＰＵ１００は、ネイティブ層２１８で、変換されたＪＰＥＧ形式のデータをＢＡＳＥ６４データに変換し、スクリプト層２１７へ送信する。
【００７９】
Ｓ４１１で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８で変換されたＢＡＳＥ６４データを受信し、それに従って、図３のＳ３０９で確保した描画領域に画像を描画する。
【００８０】
＜スタンプ追加の詳細＞
図３のＳ２３のスタンプ追加の詳細について、図６を用いて説明する。ここでは、ユーザ操作によって、図１２のアプリケーション画面１２００のスタンプ追加ボタン１２０３が押下されてスタンプ一覧が表示された後、ハートスタンプ１２０８が選択された場合を例に挙げて説明する。
【００８１】
Ｓ５０１で、ＣＰＵ１００は、スクリプト層２１７で、一意なＩＤを生成する。このＩＤは、図３のＳ３０１で生成するＩＤと同等の性質を有する。Ｓ５０２で、ＣＰＵ１００は、スクリプト層２１７で、生成したＩＤととともに、スタンプとして利用される画像のアクセス先（絶対パス）をネイティブ層２１８に送信することで、スタンプに対応するスタンプ画像の画像選択を依頼する。
【００８２】
Ｓ５０３で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信したスタンプ画像の絶対パスとデバイス固有の画像選択ＡＰＩを利用して、スタンプ画像を取得する。Ｓ５０４で、ＣＰＵ１００は、ネイティブ層２１８で、取得したスタンプ画像をＲＧＢ展開する。Ｓ５０５で、ＣＰＵ１００は、ネイティブ層２１８で、展開したＲＧＢ画像を、スクリプト層２１７から取得したＩＤと関連付けてデータ保持部２０４に保持する。関連付け方法は、図３のＳ３０６と同様である。Ｓ５０６で、ＣＰＵ１００は、ネイティブ層２１８で、展開したＲＧＢ画像をスクリプト層２１７で解釈できる形式のデータに変換する。ここでの変換は、図３のＳ３０７と同様に、ＪＰＥＧ形式のデータに変換する。Ｓ５０７で、ＣＰＵ１００は、ネイティブ層２１８で、ＪＰＥＧ形式のデータをＢＡＳＥ６４データに変換し、スクリプト層２１７へ送信する。
【００８３】
Ｓ５０８で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８で変換されたＢＡＳＥ６４データを受信するとともに、そのＢＡＳＥ６４データを表示するための描画領域をＲＡＭ１０２に確保する。Ｓ５０９で、ＣＰＵ１００は、スクリプト層２１７で、オブジェクトパラメータを生成し、初期化する。ここで、オブジェクトパラメータとは、図３のＳ２７のレンダリングの際、レンダリング後のスタンプの回転角度を決定するために用いられるパラメータを保持するオブジェクトである。ＪａｖａＳｃｒｉｐｔ（登録商標）で保持するオブジェクトパラメータの一例としては、下記のような形態が考えられる。
【００８４】
var ObjectParam = function(){
this.theta = 0;
this.posX = 0;
this.posY = 0;
this.width = 100;
this.height = 100;
}
【００８５】
このオブジェクトパラメータは、ＯｂｊｅｃｔＰａｒａｍオブジェクトの中に、回転角度を示すｔｈｅｔａという変数名と、ｔｈｅｔａには０という値が格納されているということを表している。同様に、ｐｏｓＸは描画領域の左上を基準点とした時のｘ座標、ｐｏｓＹは描画領域の左上を基準点とした時のｙ座標、ｗｉｄｔｈは描画領域の横幅、ｈｅｉｇｈｔは描画領域の縦幅を表している。尚、本実施形態では、説明を簡単にするため、オブジェクトパラメータは必要最小限であるが、その他のパラメータ（平行移動量、拡大倍率等）を追加し、描画時やレンダリング時に利用できることは明らかである。
【００８６】
Ｓ５１０で、ＣＰＵ１００は、スクリプト層２１７で、ＢＡＳＥ６４データを、生成したオブジェクトパラメータを基に、描画領域１２０６に画像として表示する。尚、本実施形態では、説明を簡単にするために、スタンプを１つ選択した場合を例に挙げているが、複数個のスタンプを選択できることは言うまでもない。また、本実施形態では、スタンプに予め用意した画像を利用しているが、Ｃｏｎｔｅｘｔオブジェクトを利用して描画物をスクリプト層で生成する方法を用いても良い。
【００８７】
＜スタンプ特定の詳細＞
図３のＳ２４のスタンプ特定の詳細について、図７を用いて説明する。
【００８８】
Ｓ６０１で、ＣＰＵ１００は、ネイティブ層２１８で、ディスプレイ１０４上でタッチされた座標を取得し、スクリプト層２１７に送信する。
【００８９】
Ｓ６０２で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８から受信した座標と、図５のＳ５０９で生成したオブジェクトパラメータの情報より、図３のＳ２３で追加したスタンプがタッチされたかどうかを判断する。追加したスタンプにおいて、オブジェクトパラメータは初期値のままである。そのため、上記のオブジェクトパラメータの一例に従えば、スタンプは、描画領域１２０６の左上を（０，０）とし、そこからｘ方向に１００、ｙ方向に１００の領域に描画されていることになる。これより、受信した座標の座標（ｘ，ｙ）の内、」ｘ座標から描画領域１２０６のｘ座標分を差し引いた値が０〜１００の範囲、かつ、ｙ座標から描画領域１２０６のｙ座標分を差し引いた値が０〜１００の範囲であれば、スタンプはタッチされたと判断できる。スタンプがタッチされたと判断された場合、そのスタンプは、操作受付状態となる。以降の説明では、Ｓ２３で追加したスタンプがタッチされたものとして説明する。
【００９０】
Ｓ６０３で、ＣＰＵ１００は、スクリプト層２１７で、判断結果に応じて、スタンプを操作受付状態に設定する。ここで、操作受付状態に設定することは、タッチされたスタンプのＩＤを注目スタンプＩＤとして、一時的にスクリプト層２１７に記録しておくことである。これは、データ保持部２０４には、画像とＩＤが対となって記憶されているため、ＩＤさえ把握しておけば一意な画像を特定できるためである。
【００９１】
＜スタンプ操作の詳細＞
図３のＳ２５のスタンプ操作の詳細について、図８を用いて説明する。
【００９２】
Ｓ７０１で、ＣＰＵ１００は、スクリプト層２１７で、スタンプのオブジェクトパラメータのｒｏｔａｔｅの値を更新する。例えば、図１２のスライドバー１２０４で設定した値に更新する。Ｓ７０２で、ＣＰＵ１００は、スクリプト層２１７で、オブジェクトパラメータを用いて、図７のＳ６０３で操作受付状態に設定されたスタンプを描画領域１２０６に再描画する。例えば、スタンプ画像の描画をＨＴＭＬのＣａｎｖａｓで行っている場合、ＣａｎｖａｓのＣｏｎｔｅｘｔオブジェクトのｒｏｔａｔｅメソッドを利用することで、Ｃａｎｖａｓ内の画像を回転することが可能である。
【００９３】
尚、本実施形態では、スタンプの操作は回転のみであるが、当然、拡大・縮小、平行移動等の他の操作も考えられる。また、写真画像に対してオブジェクトパラメータを持たせれば、スタンプ操作と同様の操作が可能となることも、明らかである。
【００９４】
＜プリンタ設定の詳細＞
図３のＳ２６のプリンタ設定の詳細について、図９を用いて説明する。
【００９５】
Ｓ８０１で、ＣＰＵ１００は、スクリプト層２１７からネイティブ層２１８へデバイス情報としてのプリンタ情報取得を依頼する。これは、外部デバイス１１２と通信を行うためのスクリプト層２１７からの要求にあたる。依頼の方法は、画像選択時と同様に、バインディング機能によりスクリプトからネイティブ固有のＡＰＩを呼び出す。ネイティブ層２１８には、スクリプト層２１７から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆる、ラッパーが予め用意してある。例えば、ＧｅｔＰｒｉｎｔｅｒＩｎｆｏというネイティブ関数を用意しておき、スクリプト側からその関数を呼び出す。このように、ネイティブ層はスクリプトからの外部デバイスとの通信の要求を取得する。
【００９６】
通常、スクリプト層２１７からはセキュリティ上の制限で外部デバイスと直接通信することはできない。そのため、上記のように、スクリプト層２１７から、一旦、ネイティブ層２１８へ外部デバイス情報の取得を依頼し、ネイティブ層２１８を介して外部デバイスと通信を行う。ここで、ネイティブ層２１８は、ＯＳ層２１９を介して、外部デバイスと通信する機能を備えている。
【００９７】
Ｓ８０２で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７からの依頼に従って、プリンタ情報取得のための関数を呼び出し、プリンタの検知、いわゆる、ディスカバリを行う。この検知には、例として、同一の無線ＬＡＮルータで接続しているプリンタを検知するという方法がある。ここでは、通信可能なプリンタの検知を行うため、例えば、Ｂｏｎｊｏｕｒ等のプロトコルにより、ブロードキャストやマルチキャスト等の方法で応答の要求を行い、プリンタからの応答を待機することでプリンタを検知する。
【００９８】
Ｓ８０３で、外部デバイス１１２であるプリンタは、情報処理装置１１５のプリンタの検知要求を受け付けると、それに対して、応答する。この応答では、外部デバイス１１２は、自身を識別するための情報として、例えば、ＩＰアドレスを含める。
【００９９】
Ｓ８０４で、ＣＰＵ１００は、ネイティブ層２１８で、外部デバイス１１２からの応答に含まれるＩＰアドレスを記憶する。Ｓ８０５で、ＣＰＵ１００は、ネイティブ層２１８で、記憶したＩＰアドレスに対応する外部デバイス１１２へ、デバイス情報取得コマンドとしてプリンタ情報取得コマンドを送信する。ここで、応答した外部デバイス１１２が複数である場合、全ての外部デバイス１１２に対して、プリンタ情報取得コマンドを送信する。プリンタ情報取得コマンドとは、プリンタの動作を指定する命令であり、その一例としては、以下のようなＸＭＬで表現される。
【０１００】
----------------------------------------------
01:      ＜?xml version="1.0" encoding="utf-8" ?＞
02:      ＜cmd xmlns:trans="http://www.xxxx/yyyyy/"＞
03:            ＜contents＞
04:                  ＜operation＞GetInformation＜/operation＞
05:            ＜/contents＞
06:      ＜/cmd＞
----------------------------------------------
【０１０１】
上記各行の左側に書かれている「０１：」等の数値は説明を行うために付加した行番号であり、本来のＸＭＬ形式のテキストには記載されない。
【０１０２】
１行目はヘッダであり、ＸＭＬ形式で記述していることを表している。
【０１０３】
２行目のｃｍｄはコマンドの開始を意味する。ｘｍｌｎｓで名前空間を指定し、コマンドの解釈の定義を指定している。尚、６行目の＜／ｃｍｄ＞でコマンドの終了を示している。
【０１０４】
３行目は以後に内容を記載する宣言であり、５行目でその終了を示している。
【０１０５】
４行目には要求する命令が記載されており、＜ｏｐｅｒａｔｉｏｎ＞と＜／ｏｐｅｒａｔｉｏｎ＞の間に実際の命令文言が存在する。命令文言であるＧｅｔＩｎｆｏｒｍａｔｉｏｎは、外部デバイスであるプリンタの情報を取得する命令である。例えば、プリンタが対応している用紙種類、サイズ、縁なし印刷機能の有無、印刷品位、等のケーパビリティ情報を提供するよう要求する。
【０１０６】
尚、プリンタ情報取得コマンドの生成は、例えば、ＲＯＭ１０１に予め記憶した固定のテキストを読み込んでも構わない。また、ＸＭＬ等のテキスト形式に限らず、バイナリ形式で記述し、それに沿ったプロトコルで通信しても良い。また、生成したプリンタ情報取得コマンドは、ＨＴＴＰ等のプリンタが対応している通信プロトコルに従った形式で、外部デバイス通信部２１３を介して外部デバイス１１２へ送信される。
【０１０７】
また、通信方法はこれに限定されるものではない。Ｗｉ−Ｆｉ（登録商標）ダイレクトやＢｌｕｅｔｏｏｔｈ（登録商標）、赤外線通信、電話回線、有線ＬＡＮ、ＵＳＢを用いた接続でも良く、その方法に沿ったプロトコルで通信を行えば同様の効果を得ることができる。
【０１０８】
図９では、ネイティブ層２１８で、プリンタ情報取得コマンドを生成する構成としているが、スクリプト層２１７で、プリンタ情報取得コマンドを生成する構成でも、同様の効果が得られる。その場合、スクリプト層２１７で、例えば、上記のＸＭＬ形式の命令文を含むプリンタ情報取得コマンドを作成し、ネイティブ層２１８へ渡す。それを受けて、ネイティブ層２１８は、通信プロトコルに従った形式で外部デバイス１１２へプリンタ情報取得コマンドを送信する。
【０１０９】
Ｓ８０６で、外部デバイス１１２は、情報処理装置１１５からプリンタ情報取得コマンドを受信すると、デバイス情報であるプリンタ情報をＸＭＬ形式で通信プロトコルに沿って、情報処理装置１１５へ送信する。以下に、プリンタの情報の一例を示す。
【０１１０】
----------------------------------------------
01:      ＜?xml version="1.0" encoding="utf-8" ?＞
02:      ＜cmd xmlns:trans="http://www.xxxx/yyyyy/"＞
03:            ＜contents＞
04:                  ＜device id=”Printer001” /＞
05:                  ＜mode = 1＞
06:                        ＜media＞GlossyPaper＜/media＞
07:                        ＜size＞A4＜/size＞
08:                        ＜quality＞1＜/quality＞
09:                        ＜border＞no＜/border＞
10:                  ＜/mode＞
11:                  ＜mode = 2＞
〜中略〜
＜/mode＞
＜mode = 3＞
〜中略〜
＜/mode＞
〜中略〜
＜/contents＞
＜/cmd＞
----------------------------------------------
【０１１１】
１行目はヘッダであり、ＸＭＬ形式で記述していることを表している。
２行目のｃｍｄはコマンドの開始を意味する。ｘｍｌｎｓで名前空間を指定し、コマンドの解釈の定義を指定している。尚、最下行の＜／ｃｍｄ＞でコマンドの終了を示している。
【０１１２】
３行目は以後に内容を記載する宣言であり、下の＜／ｃｏｎｔｅｎｔｓ＞までその内容は継続する。
【０１１３】
４行目でデバイスＩＤを示している。ここでは、外部デバイス１１２としてのプリンタの機種名が「Ｐｒｉｎｔｅｒ００１」であることを表している。
【０１１４】
５行目以降は外部デバイス１１２が有する各モードについての記述である。＜ｍｏｄｅ＞から＜／ｍｏｄｅ＞までで、１つのモードにおける情報が記述されている。５行目では、モードの番号が１である。以降の＜ｍｅｄｉａ＞は印刷用紙の種類、＜ｓｉｚｅ＞は用紙サイズ、＜ｑｕａｌｉｔｙ＞は印刷品位、＜ｂｏｒｄｅｒ＞は縁あり／なしの情報をそれぞれ記述している。
【０１１５】
１１行目以降は他のモードであるモード２についての情報が記述されている。このように、外部デバイス１１２であるプリンタの機種名と、そのプリンタが対応している全てのモードがこのＸＭＬに記述されている。
【０１１６】
尚、プリンタ情報の記述方法はこれに限定されることはなく、タグ形式でないテキストや、バイナリ形式等の他の形式であっても構わない。また、Ｓ８０５とＳ８０６とでは、プリンタの印刷機能の情報を受け渡ししているが、それに限定されることではない。例えば、プリンタが処理可能な画像処理や解析処理、印刷時に発生する音を低減するモード（サイレントモード）の有無、メモリカードの利用有無、インク残量等のステータス等の情報でも良い。画像処理の例としては、モノクロやセピア、彩度強調等の色変換、複数画像のレイアウト、ホワイトバランス補正、ノイズ除去、その他、自動で写真を好ましい色や輝度に補正する処理等が挙げられる。
【０１１７】
Ｓ８０７で、ＣＰＵ１００は、ネイティブ層２１８で、外部デバイス１１２からプリンタ情報を受信する。ＣＰＵ１００は、ネイティブ層で、受信したプリンタ情報から、例えば、外部デバイス１１２が有する全てのモードにおける印刷用紙の種類、サイズ、印刷品位、縁あり／なしの項目と項目数を取得することができる。
【０１１８】
Ｓ８０８で、ＣＰＵ１００は、ネイティブ層２１８で、受信したプリンタ情報をスクリプト層２１７が解釈できる形式に変換して、スクリプト層２１７へ送信する。つまり、外部デバイス１１２であるプリンタとの通信によって得られた情報をスクリプト層２１７へ渡す。具体的には、ネイティブ関数を設けておき、バインディング機能を用いる。スクリプト層２１７からそのネイティブ関数を呼び出し、戻り値として情報を受け渡す。取得するモード等を引数とし、スクリプト層２１７はそのモードの戻り値を受け取るようにしても良い。その他の例として、受け取ったＸＭＬ形式のプリンタ情報で送信したり、タグなしのテキスト形式に変えて送信する等の方法がある。加えて、上述のＪＳＯＮ文字列を用いた受け渡しや、データ変換部２０７及び２０３を用いてＢＡＳＥ６４等の文字列で受け渡しを行ってもよい。
【０１１９】
Ｓ８０９で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８から受信したプリンタ情報に基づいて、プリンタで利用できる機能を含む設定画面（図１３）を形成し、表示する。これを、本実施形態では、表示制御と呼ぶ。ここで、接続可能なプリンタが複数ある場合は、プリンタ名を表示し、ユーザに印刷するプリンタを選択させるための表示画面を生成する（表示内容を制御する）。尚、プリンタの選択は、上記に限らず、一番早く応答してきたプリンタや、より機能が多いプリンタ、印刷ジョブが混んでいないプリンタを選択する、等の方法も考えられる。
【０１２０】
このように、ＣＰＵ１００は、スクリプト層２１７で、印刷用紙の種類・サイズ、印刷品位、縁あり／なし等のプリンタで利用できる機能を選択させる設定画面１３０１（図１３）を表示する。設定画面の形成方法の一例として、以下に、ＨＴＭＬ記述のサンプルを示す。
【０１２１】
------------------------------------------------
＜!DOCTYPE html＞
＜head＞
＜title＞印刷設定 ＜/title＞
＜script＞
＜!-- 用紙サイズ --＞
var PaperSizeNum = GetPaperSizeNum();
var p = document.getElementById("PaperList");
var i;
for(i=0; i＜PaperSizeNum; i++){
p.options[i] = new Option(GetPaperSizeT(i), GetPaperSizeV(i));
}
＜!-- 用紙種類--＞
var MediaTypeNum = GetMediaTypeNum();
var m = document.getElementById("MediaList");
var j;
for(j=0; j＜MediaTypeNum; j++){
m.options[i] = new Option(GetMediaTypeT(j), GetMediaTypeV(j));
}
＜!-- 印刷品位 --＞
var QualityNum = GetQualityNum();
var q = document.getElementById("QualityList");
var k;
for(k=0; k＜ QualityNum; k++){
q.options[i] = new Option(GetQualityT(k), GetQualityV(k));
}
＜!-- 縁あり/なし--＞
var BorderNum = GetBorderNum();
var b = document.getElementById("BorderList");
var l;
for(l=0; l＜BorderNum; l++){
b.options[i] = new Option(GetBorderT(l), GetBorderV(l));
}
＜!-- 印刷関数--＞
function printer() {
SetPrint(document.getElementById("PaperList").value,
document.getElementById("MediaList").value,
document.getElementById("QualityList").value,
document.getElementById("BorderList").value);
}
＜/script＞
＜/head＞
＜!-- 表示部 --＞
＜body＞
用紙サイズ  ＜select id="PaperList"＞＜/select＞＜br /＞
用紙種類    ＜select id="MediaList"＞＜/select＞＜br /＞
印刷品位    ＜select id="QualityList"＞＜/select＞＜br /＞
縁あり/なし ＜select id="BorderList"＞＜/select＞＜br /＞
＜br /＞
＜button id="btn1" onclick="printer()"＞設定完了＜/button＞
＜/body＞
＜/html＞
------------------------------------------------
【０１２２】
上記のＧｅｔＰａｐｅｒＳｉｚｅＮｕｍ（  ）、ＧｅｔＭｅｄｉａＴｙｐｅＮｕｍ（  ）、ＧｅｔＱｕａｌｉｔｙＮｕｍ（  ）、ＧｅｔＢｏｒｄｅｒＮｕｍ（  ）はネイティブ関数であり、それぞれの項目数を取得する機能を備える。例えば、プリンタが対応している用紙サイズがＡ４、Ａ５、Ｂ５、Ｌ判の４種類である場合、ＧｅｔＰａｐｅｒＳｉｚｅＮｕｍ（  ）は４を返す。
【０１２３】
ＧｅｔＰａｐｅｒＳｉｚｅＴ（ｎ）、ＧｅｔＭｅｄｉａＴｙｐｅＴ（ｎ）、ＧｅｔＱｕａｌｉｔｙＴ（ｎ）、ＧｅｔＢｏｒｄｅｒＴ（ｎ）もネイティブ関数であり、引数ｎの値番目の文字列を返す。例えば、用紙サイズのテキストを返す関数のＧｅｔＰａｐｅｒＳｉｚｅ（０）の返り値は「Ａ４」、ＧｅｔＰａｐｅｒＳｉｚｅ（１）の返り値は「Ａ５」となる。これらの値は、プリンタから受信するプリンタ情報からネイティブ関数が取り出す。
【０１２４】
ＧｅｔＰａｐｅｒＳｉｚｅＶ（ｎ）、ＧｅｔＭｅｄｉａＴｙｐｅＶ（ｎ）、ＧｅｔＱｕａｌｉｔｙＶ（ｎ）、ＧｅｔＢｏｒｄｅｒＶ（ｎ）もネイティブ関数であり、引数ｎの値に対応する値を返す。例えば、用紙種類のテキストを返す関数のＧｅｔＭｅｄｉａＴｙｐｅＴ（０）の返り値は「光沢紙」のように、表示してユーザに示す文言である。一方、ＧｅｔＭｅｄｉａＴｙｐｅＶ（０）の返り値は「ＧｌｏｓｓｙＰａｐｅｒ」と、プリンタが解釈できる文言となっている。これらの文言は、プリンタ情報と結び付けてネイティブ関数が決定する。例えば、プリンタ情報より取り出した値が「ＧｌｏｓｓｙＰａｐｅｒ」である場合、表示するテキストは「光沢紙」と決定する。決定方法として、ネイティブ関数はこれらの対応表を予め保持しておき、その対応表に沿ってテキストを決定すれば良い。
【０１２５】
尚、上記では、例として、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定を行う仕様であるが、これに限定されるものではない。他の例として、両面／片面、カラー／モノクロ、画像補正のオン／オフ等の他の設定項目が挙げられることは言うまでもない。また、印刷機能のみではなく、プリンタが処理可能な画像処理や解析処理、サイレントモードの有無、メモリカードの利用有無、インク残量等のステータス等の情報を表示しても良い。
【０１２６】
Ｓ８１０で、ＣＰＵ１００は、スクリプト層２１７で、設定画面１３０１に対するユーザ操作に基づいて、プリンタに設定する機能を選択する。上記の例で示したＨＴＭＬ記述を、レンダリング部２１６を用いてレンダリングしてディスプレイ１０４に表示した例が、図１３の設定画面１３０１である。ネイティブ層２１８を介してプリンタ情報を要求し、プリンタ情報から、上記のネイティブ関数を用いて取得した情報を基に設定画面１３０１が形成されている。
【０１２７】
尚、上記では、ＨＴＭＬ記述はスクリプト層２１７で形成する構成で説明しているが、これに限定されるものではない。例えば、ネイティブ層２１８でＨＴＭＬ記述を形成し、スクリプト層２１７でそれをレンダリングしてディスプレイ１０４に表示するようにしても良い。
【０１２８】
また、設定画面１３０１の用紙サイズ等の設定項目はそれぞれプルダウンメニューになっており、ユーザ操作によって各設定項目を選択することができる。ここで、設定画面１３０１は、プルダウンメニューによって、用紙サイズの設定項目として選択可能な項目の一覧が表示されている状態を示しており、ユーザ操作によってＡ４やＡ５等の用紙サイズを選択することができる。
【０１２９】
Ｓ８１１で、ＣＰＵ１００は、スクリプト層２１７で、設定完了ボタン１３０２に対するユーザ操作を検知すると、ユーザ操作によって選択された設定項目を含む設定情報を作成して、ネイティブ層２１８へ送信する。上記ＨＴＭＬ記述の例にあるＳｅｔＰｒｉｎｔ（  ）もバインディング機能を有するネイティブ関数である。上記の例では、ＳｅｔＰｒｉｎｔ（  ）を用いて、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定を文字列としてネイティブ層２１８へ渡している。
【０１３０】
Ｓ８１２で、ＣＰＵ１００は、ネイティブ層２１８で、バインディング機能によりスクリプト層２１７から設定情報を受信する。ネイティブ層２１８では、後に、受信した設定情報を基に、外部デバイス１１２であるプリンタの通信プロトコルに従って、プリントコマンドを生成して、外部デバイス通信部２１３を介して外部デバイス１１２へ送信することになる。
【０１３１】
＜レンダリングの詳細＞
図３のＳ２７のレンダリングの詳細について、図１０を用いて説明する。
【０１３２】
Ｓ９０１で、ＣＰＵ１００は、スクリプト層２１７で、インジケータを起動して、ディスプレイ１０４に表示する。Ｓ９０２で、ＣＰＵ１００は、スクリプト層２１７で、Ｓ８１１で作成した設定情報で設定されている用紙サイズに対応する出力サイズを決定し、描画領域をＲＡＭ１０２に確保する。Ｓ９０３で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８に写真画像の取得を依頼する。この際、スクリプト層２１７は、写真画像のＩＤと、依頼する写真画像の横サイズ・縦サイズをネイティブ層２１８に送信する。
【０１３３】
Ｓ９０４で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信したＩＤを基に対応する写真画像（ＲＧＢ画像）を特定する。Ｓ９０５で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信した写真画像の横サイズ・縦サイズに写真画像をリサイズする。Ｓ９０６で、ＣＰＵ１００は、ネイティブ層２１８で、リサイズされた写真画像をスクリプト層２１７で解釈できる形式（例えば、ＪＰＥＧ形式）のデータに変換する。Ｓ９０７で、ＣＰＵ１００は、ネイティブ層２１８で、ＪＰＥＧ形式のデータをＢＡＳＥ６４データに変換し、スクリプト層２１７へ送信する。
【０１３４】
Ｓ９０８で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８から受信したＢＡＳＥ６４データに基づいて、Ｓ９０２で確保した描画領域に写真画像を描画する。ここで、ＣＰＵ１００は、スクリプト層２１７で、Ｓ３０９で確保した描画領域とＳ９０２で決定した出力サイズより、縦と横の拡大倍率（アスペクト比）を計算する。その後、Ｓ９０９で、ＣＰＵ１００は、スクリプト層２１７で、縦と横の拡大倍率、スタンプ画像のＩＤをネイティブ層２１８に送信し、スタンプ画像の取得を依頼する。
【０１３５】
Ｓ９１０で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信したＩＤを基に対応するスタンプ画像（ＲＧＢ画像）を特定する。Ｓ９１１で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信したスタンプ画像の横・縦の拡大倍率に合わせて、スタンプ画像をリサイズする。Ｓ９１２で、ＣＰＵ１００は、ネイティブ層２１８で、リサイズされたスタンプ画像をスクリプト層で解釈できる形式（例えば、ＪＰＥＧ形式）に変換する。Ｓ９１３で、ＣＰＵ１００は、ネイティブ層２１８で、ＪＰＥＧ形式のデータをＢＡＳＥ６４データに変換し、スクリプト層２１７へ送信する。
【０１３６】
Ｓ９１４で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８からＢＡＳＥ６４データを受信した後、Ｓ５０９で生成したオブジェクトパラメータを基に、スタンプ画像の操作（回転）を行う。Ｓ９１５で、ＣＰＵ１００は、スクリプト層２１７で、回転したスタンプ画像を、Ｓ９０２で確保した描画領域に描画する。Ｓ９１６で、ＣＰＵ１００は、スクリプト層２１７で、描画領域に描画されているデータをＢＡＳＥ６４データとして取得し、ネイティブ層２１８へ送信する。ここで、ＢＡＳＥ６４データとして取得する方法として、ＨＴＭＬのＣａｎｖａｓのメソッドであるｔｏＤａｔａＵＲＬが利用できる。
【０１３７】
Ｓ９１７で、ＣＰＵ１００は、ネイティブ層２１８で、スクリプト層２１７から受信したＢＡＳＥ６４データをデコードする。Ｓ９１８で、ＣＰＵ１００は、ネイティブ層２１８で、ＢＡＳＥ６４データをＲＧＢ画像に変換する。Ｓ９１９で、ＣＰＵ１００は、ネイティブ層２１８で、インジケータの停止をスクリプト層２１７へ依頼する。
【０１３８】
Ｓ９２０で、ＣＰＵ１００は、スクリプト層２１７で、インジケータを停止して、ディスプレイ１０４の表示から消去する。
【０１３９】
＜プリントの詳細＞
図３のＳ２８のプリントの詳細について、図１１を用いて説明する。
【０１４０】
Ｓ１００１で、ＣＰＵ１００は、ネイティブ層２１８で、Ｓ８１１で作成した設定情報を基に、Ｓ９１８で変換したＲＧＢ画像を外部デバイス１１２であるプリンタで利用可能な形式に変換する。プリンタが利用可能な形式は、ＲＧＢやＪＰＥＧ、ＣＭＹＫ、ＰＤＦ等のプリンタベンダーの独自フォーマット等の画像データである。Ｓ１００２で、ＣＰＵ１００は、ネイティブ層２１８で、設定情報とＳ１００１で変換した画像を基に、プリンタへ送信するコマンドを生成する。設定情報は、例えば、ユーザ操作によって設定画面１３０１で設定した用紙サイズ、用紙種類、印刷品位、縁あり／なし、等の情報である。Ｓ１００３で、ＣＰＵ１００は、ネイティブ層２１８で、プリンタの利用できる通信プロトコルに則り、Ｓ１００２で生成したコマンドを、Ｓ８０４で記憶したＩＰアドレスに対応する外部デバイス１１２に対し、外部デバイス通信部２１３を利用して送信する。
【０１４１】
Ｓ１００４で、外部デバイス１１２は、情報処理装置１１５から受信したコマンドに従って、プリントを実行する。
【０１４２】
以上説明したように、本実施形態によれば、通常、外部デバイスとの通信ができないスクリプト層がネイティブ層を介在させることにより、外部デバイスとの通信を行うことが可能となる。スクリプト層から情報提供の要求を行い、デバイス情報（プリンタ情報）を取得すること、及び、スクリプト層からコマンドを生成して、プリンタで印刷を行うことが可能となる。
【０１４３】
＜実施形態２＞
実施形態１では、外部デバイス１１２がプリンタである場合を例に挙げて説明しているが、実施形態２では、外部デバイス１１２がデジタルカメラである場合を例に挙げて説明する。尚、実施形態２では、実施形態１と同様のハードウェア構成とソフトウェア構成を備える。よって、説明の簡略化のため実施形態１との差異部分のみ説明する。
【０１４４】
図１４は情報処理装置とデジタルカメラとの間で実行する処理を示すフローチャートである。本実施形態は、ユーザが、アプリケーション（不図示）のボタン操作等で、デジタルカメラでの補正を指示することで開始される。尚、図１４において、Ｓ１４０１〜Ｓ１４１１の処理はそれぞれ、図９のＳ８０１〜Ｓ８１１における処理対象を、プリンタ情報に代えて、デジタルカメラのカメラ情報に置き換えることで説明できるので、その詳細については省略する。
【０１４５】
ここで、カメラ情報には、外部デバイス１１２であるデジタルカメラが有する機能の情報であり、例えば、自動写真補正、赤目補正、肌補正、モノクロ化、セピア化等の画像処理機能に関する情報がある。ここで、自動写真補正は、写真画像を、人物顔検出やシーン解析部を用いて自動で解析し、適切な明るさ・ホワイトバランス調整を行う機能である（例えば、特開２０１０−２７８７０８号公報参照）。また、赤目補正は、画像中から自動で赤目画像を検出して補正する機能である（例えば、特開２００６−３５０５５７号公報参照）。また、肌補正は、写真画像から人物の顔を検出して、該顔の肌領域を好適に加工する機能である（例えば、特開２０１０−１０９３８号公報参照）。また、モノクロ化は公知のモノクロ変換、セピア化は公知のセピア色変換を意味している。
【０１４６】
尚、これらのカメラ情報は、一例に過ぎず、デジタルカメラに関する様々な情報をカメラ情報とすることができる。例えば、カメラ情報は、デジタルカメラが有するＧＰＳ機能やバッテリ残量、メモリ使用率等の情報とすることができる。
【０１４７】
このようなカメラ情報によって、例えば、Ｓ１４０９では、デジタルカメラが有する画像処理の機能である、自動写真補正、赤目補正、肌補正、モノクロ化、セピア化等の設定項目を有する選択させるカメラ設定画面を形成することができる。また、カメラ設定画面での設定項目の設定に加えて、画像処理対象となる画像を選択させる構成を備えていても良い。その場合、図４の処理と同様、スクリプト層２１７からネイティブ層２１８へ画像取得の依頼を行い、ネイティブ層２１８側で処理を行えば良い。
【０１４８】
Ｓ１４１２で、ＣＰＵ１００は、ネイティブ層２１８で、バインディング機能によりスクリプト層から設定情報を受信する。そして、ＣＰＵ１００は、ネイティブ層２１８で、外部デバイス通信部２１３を介して、外部デバイス１１２（デジタルカメラ）へ設定情報及び、画像処理対象の画像を送信する。送信は、外部デバイス１１２が対応するプロトコルに沿って行う。
【０１４９】
Ｓ１４１３で、外部デバイス１１２は、情報処理装置１１５から設定情報と画像を受信する。Ｓ１４１４で、外部デバイス１１２は、受信した画像に対して、設定情報で設定されている機能の画像処理を施す。Ｓ１４１５で、外部デバイス１１２は、ネイティブ層２１８へデータを送信する。ここでのデータは、Ｓ１４１４で画像処理が施された画像を含むデータである。また、データの送信は、外部デバイス１１２が対応するプロトコルに沿って行い、外部デバイス通信部２１３を介してネイティブ層２１８へ送信される。
【０１５０】
Ｓ１４１６で、ＣＰＵ１００は、ネイティブ層２１８で、画像処理を施された画像を含むデータを取得する。
【０１５１】
Ｓ１４１７で、ＣＰＵ１００は、スクリプト層２１７で、ネイティブ層２１８から受信したデータに含まれる画像をディスプレイ１０４に表示する。この受信は、上述のように、スクリプト層２１７が解釈できる形式のデータにネイティブ層２１８が変換した後に実行する。画像の表示方法も前述の通りのため割愛する。また、この後、実施形態１のように、外部デバイス１１２であるプリンタと通信を行い、表示されている画像の印刷を行うことも可能である。
【０１５２】
以上説明したように、本実施形態によれば、セキュリティ上の制約により通、常は、外部デバイスとの通信ができないスクリプト層がネイティブ層を介在させることにより、外部デバイスとの通信を行うことが可能となる。
【０１５３】
＜実施形態３＞
実施形態２では、実施形態１と同様のハードウェア構成とソフトウェア構成を備える。よって、説明の簡略化のため、実施形態１との差異部分のみ説明する。実施形態１では、スクリプト層２１７から外部デバイスであるプリンタへの要求及び命令を送信する構成となっている。これに対して、実施形態３では、通常は、通信することができない外部デバイスからスクリプト層２１７へのデータ送信及び命令を実現する構成について説明する。
【０１５４】
図１５は情報処理装置と外部デバイスとの間で実行する処理を示すフローチャートである。
【０１５５】
まず、Ｓ１５０１で、外部デバイス１１２は、外部デバイス通信部２１３を介して、ネイティブ層２１８へネットワークアクセス要求を送信する。ネットワークアクセス要求の内容は、例えば、外部デバイス１１２であるプリンタのステータス状態やお知らせ等を、ユーザがよく利用するＳＮＳ（ソーシャル・ネットワーキング・サービス）へ表示したり、インクの使用期限が切れた際の発注等である。
【０１５６】
Ｓ１５０２で、ＣＰＵ１００は、ネイティブ層２１８で、外部デバイス１１２からのネットワークアクセス要求を受信する。Ｓ１５０３で、ＣＰＵ１００は、ネイティブ層２１８で、ネットワークアクセス命令をスクリプト層２１７へ送信する。
【０１５７】
Ｓ１５０４で、ＣＰＵ１００は、スクリプト層２１７で、ネットワークアクセス命令をネイティブ層２１８から受信する。Ｓ１５０５で、ＣＰＵ１００は、スクリプト層２１７で、ネットワークアクセス命令に沿い、ＯＳ層２１９を使用して、Ｗｅｂ等へのネットワークアクセス命令が指定するアクセス先へのアクセスを行う。このアクセスには、例えば、ＳＮＳのこととして投稿したり、サーバへ状態を送信したり、ユーザへメールを送信したりする。
【０１５８】
以上説明したように、本実施形態によれば、例えば、ユーザがよく利用するＳＮＳへ投稿したり、メールを送信することにより、外部デバイス１１２本体を確認しなくても、デバイスの状態を把握することができる。この外部デバイスの状態として、外部デバイスが、例えば、プリンタである場合には、インクや印刷用紙の残量が少ない、インクの使用期限が近い、設置場所が高温すぎる等がある。また、プリンタの通信がローカルで閉じており、いわゆるＷＡＮに接続されていない状態においても、ＷＡＮを使用して通信を行うことが可能となる。
【０１５９】
＜実施形態４＞
上記実施形態では、情報処理装置１１５として、携帯型情報端末上でハイブリッド型アプリケーションを動作させる場合を例に挙げて説明しているが、これに限定されるものではない。例えば、ハイブリッド型アプリケーションが動作する環境は、スマートフォンやタブレットＰＣを始めとする情報端末の他に、ＰＣやサーバ、ゲーム機、デジタルカメラ等の他の電子機器とすることもできる。
【０１６０】
加えて、上記実施形態では、外部デバイスとしてプリンタを例に挙げて説明しているが、これに限定されるものではない。例えば、外部デバイスとして、他のスマートフォンやタブレットＰＣ、ＰＣやサーバ、ゲーム機、スキャナ等の、自身に関する情報を提供可能な他の電子機器も対象となる。例えば、スクリプト層から他の携帯型情報端末のバッテリ残量、通信状態、無線ＬＡＮの接続有無、ＧＰＳや温度、湿度、加速度等、その電子機器が有する機能等の電子機器に関する情報を取得することも可能となる。
【０１６１】
また、外部デバイスの例として、電化製品や自動車も含まれる。例えば、携帯型情報端末上のスクリプト層から外部の冷蔵庫、洗濯機、エアコン、照明、掃除機、ポット等の電化機器の情報を取得したり、その電子機器の機能のオン／オフや出力の調整等も可能となる。
【０１６２】
加えて、上記実施形態では、コンテンツ（写真画像やスタンプ画像）の描画として、ＪａｖａＳｃｒｉｐｔのＣａｎｖａｓ機能で例に挙げて説明しているが、コンテンツの描画は、これに限定されるものではない。例えば、ＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）を利用して、コンテンツを描画することも可能である。
【０１６３】
加えて、上記実施形態のプリンタは、インクジェットプリンタ、レーザープリンタ、昇華型プリンタ、ドットインパクトプリンタ等を利用することができる。これらには、プリンタ機能、スキャナ機能等を有する、単一機能ではない、いわゆる、複合機の場合もある。
【０１６４】
尚、以上の実施形態の機能は以下の構成によっても実現することができる。つまり、本実施形態の処理を行うためのプログラムコードをシステムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）がプログラムコードを実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、またそのプログラムコードを記憶した記憶媒体も本実施形態の機能を実現することになる。
【０１６５】
また、本実施形態の機能を実現するためのプログラムコードを、１つのコンピュータ（ＣＰＵ、ＭＰＵ）で実行する場合であってもよいし、複数のコンピュータが協働することによって実行する場合であってもよい。さらに、プログラムコードをコンピュータが実行する場合であってもよいし、プログラムコードの機能を実現するための回路等のハードウェアを設けてもよい。またはプログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行する場合であってもよい。
【符号の説明】
【０１６６】
２１７：スクリプト層、２１８：ネイティブ層、２１９：ＯＳ層、２１１：プリンタ制御部、２０１：画像取得部、２０７：データ変換部、２１６：レンダリング部、２０６：画像処理制御部、２０５：コンテンツ描画部、２１０：コンテンツ操作部、２０３：データ変換部、２１２：プリンタデータ生成部、２０８：画像処理部、２１５：画像データ群、２１３：外部デバイス通信部、２２０：データ保存部、２０４：データ保持部、２０２：画像読込部、２２０：通信制御部、２１４：インタプリタ、２０９：タッチイベント
【図１】
0006008897.tif 000002
【図２】
0006008897.tif 000003
【図３】
0006008897.tif 000004
【図４】
0006008897.tif 000005
【図５】
0006008897.tif 000006
【図６】
0006008897.tif 000007
【図７】
0006008897.tif 000008
【図８】
0006008897.tif 000009
【図９】
0006008897.tif 000010
【図１０】
0006008897.tif 000011
【図１１】
0006008897.tif 000012
【図１２】
0006008897.tif 000013
【図１３】
0006008897.tif 000014
【図１４】
0006008897.tif 000015
【図１５】
0006008897.tif 000016