(57)【特許請求の範囲】
【請求項１】
プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するプログラムを、前記プロセッサで実行する情報処理装置であって、
前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換手段と、
前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得手段と、
前記取得手段により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換手段と、
前記第２の変換手段により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信手段とを有することを特徴とする情報処理装置。
【請求項２】
前記コンテンツは印刷コンテンツであり、
前記変換手段は、
前記印刷コンテンツが印刷されるプリンタの印刷解像度に基いて、前記第１の記述言語で記述された印刷コンテンツの拡大率を算出する算出手段と、
前記算出手段により算出された拡大率に基いて、前記第１の記述言語の印刷コンテンツを前記第２の記述言語の印刷コンテンツに変換する第１の変換手段を含むことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記印刷解像度は、前記情報処理装置に接続されるプリンタから取得した属性情報に基づいて算出されることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記情報処理装置が動作させるオペレーティングシステムが備える翻訳手段によって前記第２の記述言語のコンテンツが翻訳されることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記コンテンツを翻訳する別の翻訳手段を前記第２のプログラム層に備えることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記情報処理装置で動作するオペレーティングシステムから描画結果が取得できない第１の記述言語で記述されたコンテンツが、前記変換手段によって、前記オペレーティングシステムから描画結果が取得可能な第２の記述言語のコンテンツに変換され、前記第２の記述言語のコンテンツを前記オペレーティングシステムに描画させる指示手段をさらに有し、
前記取得手段は、前記変換された第２の記述言語のコンテンツを描画することで得られる当該コンテンツのデータを前記オペレーティングシステムから取得することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第１の記述言語は、ＳＶＧであり、
前記第２の記述言語は、Ｃａｎｖａｓであることを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記第１のプログラム層の命令セットは、ＨＴＭＬ、ＣＳＳ、ＪａｖａＳｃｒｉｐｔのいずれか１つで記述されていることを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するプログラムを、前記プロセッサで実行する情報処理装置の処理方法であって、
前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換工程と、
前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得工程と、
前記取得工程により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換工程と、
前記第２の変換工程により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信工程とを有することを特徴とする処理方法。
【請求項１０】
ウェブ標準言語で記述された第１のプログラム層と、ウェブ標準言語とは異なるプログラム言語で記述された第２のプログラム層とを包含するプログラムを実行するコンピュータを、前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換手段と、前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得手段と、前記取得手段により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換手段と、前記第２の変換手段により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信手段として機能させるための前記コンピュータが読み取り可能なプログラム。
【請求項１１】
前記コンテンツは印刷コンテンツであり、
前記印刷コンテンツが印刷されるプリンタの印刷解像度に基いて、前記第１の記述言語で記述された印刷コンテンツの拡大率を算出する算出手段と、
前記算出手段により算出された拡大率に基いて、前記第１の記述言語の印刷コンテンツを前記第２の記述言語の印刷コンテンツに変換する第１の変換手段として前記コンピュータをさらに機能させるための請求項１０に記載のプログラム。
【請求項１２】
前記印刷解像度は、前記コンピュータに接続されるプリンタから取得した属性情報に基づいて算出されることを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記コンピュータが動作させるオペレーティングシステムが備える翻訳手段によって前記第２の記述言語のコンテンツが翻訳されることを特徴とする請求項１０乃至１２のいずれか１項に記載のプログラム。
【請求項１４】
前記コンテンツを翻訳する別の翻訳手段を前記第２のプログラム層に備えることを特徴とする請求項１３に記載のプログラム。
【請求項１５】
前記コンピュータが動作させるオペレーティングシステムから描画結果が取得できない第１の記述言語で記述されたコンテンツが、前記変換手段によって、前記オペレーティングシステムから描画結果が取得可能な第２の記述言語のコンテンツに変換され、前記第２の記述言語のコンテンツを前記オペレーティングシステムに描画させる指示手段として前記コンピュータをさらに機能させ、
前記取得手段は、前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを前記オペレーティングシステムから取得することを特徴とする請求項１０乃至１４のいずれか１項に記載のプログラム。
【請求項１６】
前記第１の記述言語は、ＳＶＧであり、
前記第２の記述言語は、Ｃａｎｖａｓであることを特徴とする請求項１０乃至１５のいずれか１項に記載のプログラム。
【請求項１７】
前記ウェブ標準言語は、ＨＴＭＬ、ＣＳＳ、ＪａｖａＳｃｒｉｐｔのいずれか１つであることを特徴とする請求項１０乃至１６のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、プリンタなどの画像出力装置に対して外部デバイスとして動作する移動体端末などの情報処理装置で実行される処理に関するものである。
【背景技術】
【０００２】
近年、カメラ機能が搭載された可搬型多機能携帯端末（以下、モバイルコンピュータ）が爆発的に普及し、デジタルカメラや従来のパーソナルコンピュータ（以下、ＰＣ）の販売台数を遥かに凌ぐ勢いで拡販されている。
【０００３】
このようなモバイルコンピュータは、基本的には３つの要素で成り立っている。即ち、コンピュータ自身であるハードウェアと、該ハードウェア上で動作するオペレーティングシステム（以下、ＯＳ）と、そのＯＳ上で動作するアプリケーションである。ユーザは、そのアプリケーションを用いて、地図やメール、インターネット上のウェブサイトの閲覧等の機能を使用することが可能である。
【０００４】
このようなモバイルコンピュータ上で動作するアプリケーションの形態としては、主に二つのものが存在する。即ち、ネイティブアプリケーションとウェブアプリケーションである。以下、それぞれの特徴を説明する。
【０００５】
まず、ネイティブアプリケーションとは、通常、ＯＳ毎に用意される開発環境、及び開発言語を用いて開発される。例えば、Ａ社が提供するＯＳ上ではＣ／Ｃ＋＋言語、Ｂ社が提供するＯＳ上ではＪａｖａ（登録商標）言語、Ｃ社が提供するＯＳ上では更に異なる開発言語を用いる、という具合である。通常、ネイティブアプリケーションは、各開発環境において予めコンパイルされ、人間が理解可能ないわゆる高水準言語から、コンピュータのＣＰＵが解釈可能なアセンブラ等の命令セット群に変換される。このように、通常のネイティブアプリケーションでは、命令をＣＰＵが直接解釈するために、高速動作が可能である、というメリットがある。
【０００６】
一方、ウェブアプリケーションとは、近年では、各コンピュータ上のＯＳに標準的に組み込まれているウェブブラウザ上で動作するアプリケーションのことである。そのアプリケーションはウェブブラウザが解釈できるよう、一般的には、ＨＴＭＬ５及びＣＳＳ、さらにＪａｖａＳｃｒｉｐｔ（登録商標）等の言語を用いて開発される。これらはウェブ標準言語であるため、これらのウェブ標準言語でウェブアプリケーションを一旦記述すれば、ウェブブラウザが動作する環境であれば、どこでも動作可能というメリットがある。
【０００７】
近年では、このようなモバイルコンピュータの普及とともに、上記ＯＳの種類も多種多様なものとなっている。そのため、それらのＯＳ上で動作するアプリケーションを如何に短期間で開発して、ユーザにスピーディに提供できるかがソフトウェア開発における重要な課題となっている。
【０００８】
このような課題を解決する方法として、クロス開発と呼ばれる手法がある。クロス開発とは、アプリケーションの大部分を、各種ＯＳに横断的に利用できる共通プログラム言語を用いて開発を行うことである。この方法は、共通プログラム言語を用いるため、各ＯＳで個別にアプリケーションを開発する場合と比較し、大幅に開発工数を削減することができ、有効なアプリケーション開発手法として知られている。
【０００９】
従って、ウェブアプリケーションは上記課題を解決する一つの方法であると言える。しかし、ウェブアプリケーションはブラウザ上で動作するため、ネイティブアプリケーションとして各ベンダが運営するアプリケーションストアから配布することができない。このため、多くの開発者は、上記ストアから配布可能なネイティブアプリケーション形式におけるクロス開発手法を求めていた。
【００１０】
そのストア配布可能なクロス開発手法の一つとして、特許文献１に記載されているようなハイブリッドアプリケーションが注目されている。ハイブリッドアプリケーションとは、アプリケーション自身は、前述したネイティブアプリケーションとしてユーザに配布される。しかし、そのユーザインタフェース（ＵＩ）の全て、あるいは大部分は、ＨＴＭＬ５、ＣＳＳ、ＪａｖａＳｃｒｉｐｔ（登録商標）といったいわゆるウェブの標準言語で記述されている。即ち、１つのアプリケーション内部に、ウェブ標準言語によるスクリプト層とネイティブ層を双方包含する構成となっている。このような構成を採用することにより、上記ネイティブアプリケーションとウェブアプリケーションの利点の双方を生かしたソフトウェアを開発することができる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１１−０８０４７０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら上述したハイブリッドアプリケーションを、写真や文書を印刷するといったプリントアプリケーションに適用しようとした場合、以下のような課題がある。
【００１３】
通常のハイブリッドアプリケーションでは、ＵＩ部はウェブ標準言語で記述され、それがテキストデータとしてアプリケーション内部に保持されている。このテキストデータをスクリプトと呼ぶ。このスクリプトは、アプリケーションが起動した際に、ＯＳが保持するスクリプトを翻訳し実行するためのエンジンに入力される。この結果、モバイルコンピュータの画面上にＵＩが表示され、ユーザが操作することが可能となる。ここでは、このエンジンのことをインタプリタと呼ぶ。
【００１４】
写真印刷アプリケーションの場合、例えば、ＵＩ上で、印刷対象となる写真を描画する。そして、写真に対して撮影日時などの日付情報を重畳し、絵文字などのスタンプを重畳し、その結果をユーザがプリントできるよう、そのソフトウェアを設計開発する必要がある。ハイブリッドアプリケーションの場合、日付情報やスタンプ等の印刷コンテンツの描画も、ウェブ標準言語を用いて記述することになる。その１つの候補が、ＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）である。以下に、ＳＶＧによる画像描画の簡単な例を示す。
【００１５】
＜?xml version="1.0" standalone="no" ?＞
＜!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"＞
＜svg width="12cm" height="12cm" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"＞
＜image id="img01" xlink:href="IMG_0001.JPG" x="48" y="33" width="215" height="148"/＞
＜image id="img02" xlink:href="IMG_0002.JPG" x="272" y="33" width="216" height="148"/＞
＜/svg＞
上記の例は、所定の領域（１２ｃｍ四方）に二つの画像を、所定の位置（ｘ，ｙ）に所定の大きさ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）で描画する例である。なお、上記の例では、ＳＶＧスクリプトをＨＴＭＬ５に組み込む部分の記述は省略している。
【００１６】
さて、ＳＶＧで記述した印刷コンテンツをレンダリングするためには、プリンタの印刷エンジンが要求する、一般的には高解像度の画像データ（いわゆるビットマップデータ）へ変換する必要がある。この処理をレンダリング処理と呼ぶ。
【００１７】
通常、印刷コンテンツは、表示状態と印刷状態が全く同一であることが望まれるため、コンテンツを解釈し、レンダリングするインタプリタは同一のものが望まれる。印刷を行うためには、上記印刷コンテンツをインタプリタを用いてレンダリングし、かつレンダリング結果の画像データを取得して、その画像データを所定の形式でプリンタに送信することになる。
【００１８】
しかしながら、このような処理を実行する際に以下の問題が生じる。
【００１９】
ＳＶＧで記述された印刷コンテンツを、上述のようにＯＳが保持するインタプリタを利用してレンダリングしたとしても、画像を表示することは可能だが、その画像に対応する画像データを取得することができない。現在、各ＯＳが保持しているインタプリタが、ＳＶＧの描画結果から画像データを生成する場合、その画像データは表示のみに使用される。
【００２０】
従って、このままではＳＶＧで記述した印刷コンテンツをＯＳが保持するインタプリタがレンダリングしてもプリンタで印刷することはできない。その結果、上述したハイブリッドアプリケーションの形態を用いて印刷することができなくなるおそれがある。
【００２１】
本発明は上記の課題を解決するためになされたものであり、ハイブリッドアプリケーションを用いて、例えば印刷アプリケーションを構築し、これを実行することが可能な情報処理装置、処理方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記の目的を達成するための本発明の情報処理装置は以下のような構成を備える。
【００２３】
即ち、プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するプログラムを、前記プロセッサで実行する情報処理装置であって、前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換手段と、前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得手段と、前記取得手段により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換手段と、前記第２の変換手段により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信手段とを有することを特徴とする。
【００２４】
また本発明を別の側面から見れば、プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層と、前記プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層とを包含するプログラムを、前記プロセッサで実行する情報処理装置の処理方法であって、前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換工程と、前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得工程と、前記取得工程により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換工程と、前記第２の変換工程により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信工程とを有することを特徴とする処理方法を備える。
【００２５】
さらに本発明を別の側面から見れば、ウェブ標準言語で記述された第１のプログラム層と、ウェブ標準言語とは異なるプログラム言語で記述された第２のプログラム層とを包含するプログラムを実行するコンピュータを、前記第１のプログラム層において第１の記述言語で記述されたコンテンツを第２の記述言語のコンテンツに変換する変換手段と、前記変換された第２の記述言語のコンテンツを描画することで得られる前記コンテンツのデータを取得する取得手段と、前記取得手段により取得された前記コンテンツの画像データをプリンタが利用可能な形式の画像データに変換する第２の変換手段と、前記第２の変換手段により変換された前記プリンタが利用可能な形式の画像データを前記プリンタに送信する送信手段として機能させるための前記コンピュータが読み取り可能なプログラムを備える。
【発明の効果】
【００２６】
従って、本発明によれば、ハイブリッドアプリケーションというソフトウェア形式を用いて、例えば、印刷アプリケーションを構築することができるという効果がある。また、そのアプリケーション開発者は、第２のコンテンツ記述言語だけではなく第１のコンテンツ記述言語を用いたとしても、印刷アプリケーションを構築することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の代表的な実施形態である情報処理装置の構成を示すブロック図である。
【図２】図１に示した情報処理装置のソフトウェアの構成を示すブロック図である。
【図３】ユーザ操作に伴う処理を示すフローチャートである。
【図４】写真画像選択の詳細を示すフローチャートである。
【図５】画像処理の詳細を示すフローチャートである。
【図６】プリンタ設定の詳細を示すフローチャートである。
【図７】レンダリングの詳細を示すフローチャートである。
【図８】プリントの詳細を示すフローチャートである。
【図９】アプリケーション画面の一例を示す図である。
【図１０】設定画面の一例を示す図である。
【図１１】プリンタ選択画面の一例を示す図である。
【図１２】画像処理機能選択画面の一例を示す図である。
【図１３】印刷コンテンツの例を示す図である。
【発明を実施するための形態】
【００２８】
以下本発明の実施の形態について添付図面を参照して詳細に説明する。特に、以下の実施形態では、情報処理装置上で、後述するハイブリッド型写真印刷アプリケーションを動作させ、ユーザが選択した画像に対して、様々な画像処理を適用した後に、その画像を印刷する構成について説明する。なお、その情報処理装置の代表例としては、携帯電話やスマートフォンやタブレット端末のような携帯型情報端末が含まれる。
【００２９】
＜ハードウェア構成の説明＞
図１は本発明の代表的な実施形態である情報処理装置１１５として、例えば、スマートフォンや携帯電話等の携帯型情報端末の構成例を説明するブロック図である。同図において、１００はＣＰＵ（中央演算装置／プロセッサ）であり、以下で説明する各種処理をプログラムに従って実行する。図中のＣＰＵ１００は１つであるが、複数のＣＰＵあるいはＣＰＵコアによって構成されていても良い。１０１はＲＯＭであり、ＣＰＵ１００により実行されるプログラムが記憶されている。１０２はＲＡＭであり、ＣＰＵ１００によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。
【００３０】
１０３はハードディスクやフラッシュメモリ等の２次記憶装置であり、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラムを記憶するための記憶媒体である。１０４はディスプレイであり、各種処理を実現するための操作を受け付けるためのＵＩ（ユーザインタフェース）や、実行された処理による処理結果等の各種情報を表示する。ディスプレイ１０４は、タッチセンサ１０５を備えても良い。
【００３１】
情報処理装置１１５は、内部撮像デバイス１１０を備えてもよい。内部撮像デバイス１１０による撮像によって得られた画像データは、所定の画像処理を経た後、２次記憶装置１０３に保存される。また、画像データは、外部Ｉ／Ｆ（インタフェース）１０８を介して接続された外部撮像デバイス１１１から読み込むこともできる。
【００３２】
情報処理装置１１５は、外部Ｉ／Ｆ（インタフェース）１０９を備え、インターネット等のネットワーク１１３を介して通信を行うことができる。情報処理装置１１５は、この通信Ｉ／Ｆ１０９を介して、ネットワーク１１３に接続されたサーバ１１４より画像データを取得することもできる。
【００３３】
情報処理装置１１５は、加速度センサ１０６を備え、情報処理装置１１５自身の位置姿勢に関する加速度情報を取得することができる。情報処理装置１１５は、外部Ｉ／Ｆ１０７を介し、プリンタ１１２と接続されており、画像データ等のデータを出力することができる。プリンタ１１２は、ネットワーク１１３にも接続されており、通信Ｉ／Ｆ１０９経由で、画像データを送受信することができる。
【００３４】
外部Ｉ／Ｆ１０７〜１０９は、有線通信と無線通信の内、少なくともいずれかの通信形態を有するインタフェースであり、利用する通信形態に応じて外部デバイス（プリンタ１１２あるいはサーバ１１４）との通信を行う。有線通信には、例えば、ＵＳＢ、イーサネット（登録商標）等があり、無線通信には、無線ＬＡＮ、ＮＦＣ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、赤外線通信等がある。また、無線通信として、無線ＬＡＮを利用する場合には、装置同士が直接接続する形態もあれば、無線ＬＡＮルータ等の中継装置を介して接続する形態もある。また、外部Ｉ／Ｆ１０７〜１０９は、図では別々に構成されているが、一体となって構成されていても良い。
【００３５】
情報処理装置１１５の動作に必要な電源は、バッテリ１１７によって供給される。情報処理装置１１５が備える各種構成要素は、制御バス／データバス１１６を介して相互に接続され、ＣＰＵ１００は、この制御バス／データバス１１６を介して、各種構成要素を制御する。
【００３６】
尚、本実施形態では、情報処理装置１１５が、情報処理装置１１５が備える制御部（ＣＰＵ１００）によって実行されるプログラム等のソフトウェアの実行場所（ソフトウェア実行環境）となる。
【００３７】
＜ソフトウェアのブロック図＞
図２は情報処理装置１１５で動作するソフトウェア構成のブロック図である。
【００３８】
情報処理装置１１５は、スクリプト層２１７、ネイティブ層２１８、及びＯＳ層２１９のプログラムを実行する。これらの各層は、ＣＰＵ１００がＲＯＭ１０１あるいは２次記憶装置１０３に記憶されている対応するプログラムを読み出し実行することにより実現される。
【００３９】
スクリプト層２１７は、ＨＴＭＬ５やＣＳＳ３、及びＪａｖａＳｃｒｉｐｔ等のウェブ標準言語を使って、テキストデータで命令セット（コンテンツの描画や画像の表示、動画の再生等）が記述されているプログラム層である。スクリプト層２１７では、アプリケーション実行環境上で、そのアプリケーション実行環境に存在するプロセッサ（例えば、ＣＰＵ１００）を用いて、テキストデータの各種命令セットを翻訳して実行することになる。その実行形態としては、実行の度に命令文を一行ずつ動的に翻訳する場合や、アプリケーションを起動したときに翻訳する場合、アプリケーションを情報処理装置１１５にインストールしたときに翻訳する場合等が考えられる。
【００４０】
以後、スクリプト層２１７で処理することや内容をスクリプトと呼ぶ。スクリプトの命令を情報処理装置１１５内で翻訳する形態の例として、ネイティブ層２１８やＯＳ層２１９が備えるインタプリタの機能を使用することが挙げられる。尚、この実施形態においては、アプリケーションのＵＩの大部分が、スクリプト層２１７で記述されていることを想定している。
【００４１】
ネイティブ層２１８は、アプリケーション実行環境以外で予め翻訳（コンパイル）された命令セットが記述されているプログラム層である。形態としては、ＣもしくはＣ＋＋といった高水準言語で記述されたコードが、予めアプリケーションの開発者のＰＣやサーバ上でコンパイルされ、ＣＰＵ１００が解釈可能な命令の集合体となっている。以後、ネイティブ層２１８で処理することや内容、後述するＯＳ層２１９の機能をネイティブ層２１８から呼び出すことを含め、ネイティブと呼ぶこととする。尚、ネイティブ層２１８の別の実装系として、Ｊａｖａが挙げられる。Ｊａｖａは、Ｃ／Ｃ＋＋と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳される。翻訳された中間コードは、各ＯＳが備えるＪａｖａ仮想環境上で動作する。本実施形態においては、このようなプログラム形態も、ネイティブ層２１８の一種に含める。
【００４２】
ＯＳ層２１９は、情報処理装置１１５のオペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）に対応する。ＯＳ層２１９は、ハードウェア機能の使用をアプリケーションに提供する役割及び固有の機能を有する。ＯＳ層２１９は、ＡＰＩを備え、スクリプト層２１７やネイティブ層２１８から機能を使用することができる。
【００４３】
この実施形態では、スクリプト層２１７からネイティブ層２１８の呼び出しを可能にすることをバインディング、もしくはバインドと呼ぶ。各種ネイティブの機能は、ＡＰＩを備え、該ＡＰＩをスクリプトが呼び出すことでネイティブの機能を使用することができる。このようなバインディング機能は、通常、各種ＯＳが標準的に備えている機能である。
【００４４】
尚、この実施形態では、スクリプト層２１７とネイティブ層２１８を含むアプリケーションのことをハイブリッド型アプリケーションと呼ぶ。
【００４５】
スクリプト層２１７の画像取得部２０１は、ネイティブ層２１８に対し画像データの取得を依頼する。取得依頼時に、画像取得部２０１は、一意なＩＤを生成し、ネイティブ層２１８に送信する。このＩＤと、ネイティブ層２１８の画像読込部２０２で読み込まれた画像データは、対となって、ネイティブ層２１８のデータ保持部２０４に記憶される。これ以外にも、例えば、絶対パスを指定する方法や、ダイアログ表示を促す方法等が挙げられる。
【００４６】
ネイティブ層２１８の画像読込部２０２は、画像データ群２１５から画像データを取得する。画像データ群２１５からの画像データの取得方法は、スクリプト層２１７の画像取得部２０１の依頼に依存する。依頼方法は、ＵＩ上に提供されているダイアログボックスから選択する、ファイルのパスから直接画像を選択する等が挙げられる。
【００４７】
ネイティブ層２１８のデータ変換部２０３は、ネイティブ層２１８のデータ（例：バイナリ形式の画像データ）をスクリプト層２１７で利用できる形式のデータ（例：テキスト形式（ＢＡＳＥ６４）の画像データ）に変換する。一方で、データ変換部２０３は、スクリプト層２１７から送られてきたデータ（例：テキスト形式（ＢＡＳＥ６４）の画像データ）をネイティブ層２１８で利用できる形式のデータ（例：バイナリ形式の画像データ）に変換する。
【００４８】
スクリプト層２１７のデータ変換部２０７は、スクリプト層２１７のデータ（例：テキスト形式の処理パラメータ）をネイティブ層２１８で利用できる形式のデータ（例：テキスト形式（ＪＳＯＮ形式）の処理パラメータ）に変換する。
【００４９】
ネイティブ層２１８のデータ保持部２０４は、画像読込部２０２で読み込んだ画像データ、画像処理部２０８で画像処理が施された画像データを保持する。保持される画像データは、例えば、ＲＧＢ画像信号に展開されており、すぐに画像処理が実行できる形式になっている。
【００５０】
スクリプト層２１７のコンテンツ描画部２０５は、プリントのためのコンテンツをウェブ標準言語を利用して記述する。この記述には、コンテンツ操作部２１０で操作されたスクリプトも反映される。コンテンツ描画部２０５で記述されたコンテンツのスクリプトは、ＯＳ層２１９のインタプリタ２１４で解釈され、ディスプレイ１０４に表示される。
【００５１】
スクリプト層２１７の画像処理制御部２０６は、画像処理に用いる補正パラメータと、補正対象となる画像を決定する。これらのデータは、必要に応じてデータ変換部２０７でネイティブ層２１８へ送信できる形式へ変換される。
【００５２】
ネイティブ層の画像処理部２０８は、画像処理制御部２０６で指定された画像に対し画像処理を施す。その際、どのような画像処理を施すかは、画像処理制御部２０６で設定されたパラメータにより決定される。画像の指定については、例えば、スクリプト層から画像のパスを受け取る方法や、画像データごと受け取る方法などが考えられる。
【００５３】
ＯＳ層２１９のタッチイベント２０９は、ディスプレイ１０４のタッチに関する情報を取得する。タッチに関する情報とは、ディスプレイ１０４のタッチ検知、タッチされた位置情報等が挙げられる。取得したタッチに関する情報は、ネイティブ層２１８経由でスクリプト層２１７のコンテンツ操作部２１０に送信される。
【００５４】
スクリプト層２１７のコンテンツ操作部２１０は、画像を操作、例えば、画像の拡大、移動、回転などを行い、その操作を反映すべく、スクリプト命令を変更する。
【００５５】
スクリプト層２１７のプリンタ制御部２１１は、レンダリング部２１６へのレンダリング開始依頼、プリンタ検知の依頼、プリンタ設定画面の表示、プリント情報の生成と送信を制御する。プリンタ設定画面では、用紙のサイズ、用紙の種類、カラー・モノクロ等のプリンタ設定がなされる。ここで設定された項目によりプリント情報が生成される。
【００５６】
ネイティブ層２１８のプリンタデータ生成部２１２は、プリンタ制御部２１１からの依頼を基に、プリンタ通信に必要なデータ、コマンドを生成する。プリンタ通信に必要なデータとは、通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャン等、プリンタの動作を決定するためのデータである。よって、プリンタデータ生成部２１２は、プリンタの動作を決定するためのコマンドを含むプリンタデータを生成する。
【００５７】
ＯＳ層２１９のプリンタ通信部２１３は、プリンタデータ生成部２１２から受信したプリンタデータを接続しているプリンタ１１２に送信する。ＯＳ層２１９のインタプリタ２１４は、スクリプト層２１７で生成されたウェブ標準言語で記述された命令を解釈・実行する。例えば、画像の描画等の命令は、インタプリタ２１４を通して実行され、ディスプレイ１０４に表示される。
【００５８】
画像データ群２１５は、画像データを保持している領域である。データ保存部２２０は、必要に応じて、データ保持部２０４が保持する画像データを画像データ群２１５に保存させるために機能する。
【００５９】
レンダリング部２１６は、コンテンツ描画部２０５、画像処理制御部２０６、及びコンテンツ操作部２１０を制御して、処理対象の画像データのレンダリングを行う。このレンダリングには、例えば、スクリプト層２１７でプリンタ１１２への出力解像度の画像を生成することが含まれる。また、スクリプト層２１７におけるレンダリング結果、及び、スクリプト層２１７が生成途中の画像はディスプレイ１０４に表示されない。レンダリング結果は、ネイティブ層２１８のデータ変換部２０３に送信され、プリンタ１１２が利用できる形式の画像データに変換される。その他、レンダリング部２１６は、ＳＶＧ形式で記述されたコンテンツをＣａｎｖａｓ形式のコンテンツに変換する変換部２０００を備える。
【００６０】
＜ユーザ操作に伴う処理＞
図３はユーザ操作を含む処理を示すフローチャートである。まず、図３を用いて、Ｓ２１からＳ２５の各処理の概要を説明し、詳細は後述する。なお、本願のフローチャートの各ステップの処理は、情報処理装置１１５のＣＰＵ１００が、ＲＯＭ１０１あるいは２次記憶装置１０３に記憶されているプログラムを実行することにより実現される。また、図３に示す各ステップは、ＵＩの１つである図９に示すアプリケーション画面９０７に対するユーザ操作に従って遷移する。アプリケーション画面９０７は、スクリプト層２１７によって生成される。アプリケーション画面９０７の操作は、例えば、タッチセンサ１０５を介して実現される。
【００６１】
Ｓ２１で、ＣＰＵ１００は、アプリケーション画面９０７の写真画像選択ボタン９０１に対するユーザ操作（タッチ操作入力も含む。以後も同様）を検知すると、その操作に応じて、任意の画像を選択する。画像を選択すると、ＣＰＵ１００は、アプリケーション画面９０７の描画領域９０６の全体に選択された画像を表示する。
【００６２】
Ｓ２２では、ＣＰＵ１００は、表示されている画像の輝度を調整するためのスライドバー９０２に対するユーザ操作を検知すると、そのユーザ操作に応じて、画像処理時に利用する補正パラメータを設定する。そして、ＣＰＵ１００は、設定した補正パラメータに従って、表示されている画像に画像処理を施し、その処理内容及び処理結果を描画領域９０６に表示する。
【００６３】
Ｓ２３で、ＣＰＵ１００は、プリントボタン９０５に対するユーザ操作を検知すると、プリントに必要な情報を設定するための設定画面１００１（図１０）を表示する。プリントに必要な情報とは、例えば、図１０の設定画面１００１に示されるように、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定項目がある。これ以外にも、両面／片面、モノクロ・カラー等、使用するプリンタが有する機能に応じて、設定可能な設定項目が構成される。
【００６４】
Ｓ２４で、ＣＰＵ１００は、設定画面１００１の設定完了ボタン１００２に対するユーザ操作を検知すると、描画領域９０６に表示されている画像を、プリンタに出力するためのプリント解像度に変換するためのレンダリングを実行する。
【００６５】
Ｓ２５で、ＣＰＵ１００は、プリントの解像度に変換された画像を、プリンタ制御のコマンドと共にプリンタ１１２に送信する。以上の処理により、ユーザにより選択された画像がプリンタ１１２でプリントされる。
【００６６】
尚、図３に示す処理は一例であり、処理内容はこれに限定されず、ステップ群の処理順序もこれに限定されるものではない。また、この実施形態において、プロセッサで翻訳され実行されるための命令セットを含む第１のプログラム層をスクリプト層２１７、プロセッサ以外で予め翻訳された命令セットを含む第２のプログラム層をネイティブ層２１８と定義する。そして、これらの第１のプログラム層と第２のプログラム層とを包含するプログラムがハイブリッド型アプリケーションを実現する。文字列データ（テキストデータ）を第１の形式、バイナリデータを第２の形式と定義する。なお、スクリプト層２１７は、テキスト形式のデータを保持することが可能であり、ネイティブ層２１８は、バイナリ形式のデータを保持することが可能である。
【００６７】
＜プリンタの選択＞
最初に、ユーザ操作によって、図３に示す処理を実現するアプリケーションが起動される際には、アプリケーションは、まず、接続可能な外部デバイス（プリンタ１１２）のディスカバリ処理（不図示）を行う。ディスカバリ処理とは、情報処理装置１１５が存在するネットワーク１１３内において、接続可能なプリンタ１１２のＩＰアドレスを特定する処理のことである。
【００６８】
情報処理装置１１５は、ディスカバリ処理によって取得したＩＰアドレス（場合によっては、複数個）に対して、各種プリンタの属性情報取得の命令を送信して、その返信を取得することができる。
【００６９】
より具体的には、ネイティブ層２１８において、各プリンタの情報を取得するためのコマンドを生成する。コマンドとは、プリンタの動作を指定する命令であり、下記のようなＸＭＬで表現される。
【００７０】
＜?xml version="1.0" encoding="utf-8" ?＞
＜cmd xmlns:trans="http://www.trans/example/"＞
＜contents＞
＜operation＞GetInformation＜/operation＞
＜/contents＞
＜/cmd＞
生成されたコマンドは、プリンタの通信プロトコルに従った形式で、ネットワーク上のネットワーク機器（例えば、Ｗｉ−Ｆｉ（登録商標）接続されたルータ）に対しブロードキャストされる。ここで、通信方法は、Ｗｉ−Ｆｉダイレクトや電話回線を利用する形態が考えられるが、これに限定されるものではない。コマンドの送信の結果、ネイティブ層２１８は、プリンタからの応答を受信する。受信する応答の例としては、下記のようなＸＭＬで表現される。
【００７１】
＜?xml version="1.0" encoding="utf-8" ?＞
＜cmd xmlns:trans="http://www.trans/example/"＞
＜contents＞
＜PrinterName＞PrinterA＜/PrinterName＞
＜ImageProcGrp＞A＜/ImageProcGrp＞
＜ResolutionX＞400＜/ResolutionX＞
＜ResolutionY＞400＜/ResolutionY＞
＜/contents＞
＜/cmd＞
上記は、簡単な例であるが、ＰｒｉｎｔｅｒＮａｍｅタグによって、それぞれのプリンタ名称を取得することができる。また、ＩｍａｇｅＰｒｏｃＧｒｐタグによって、それぞれのプリンタが利用可能な画像処理グループを取得することもできる。この画像処理グループにより、図１２の１２０１に表示される選択肢が決まる。また、ＲｅｓｏｌｕｔｉｏｎＸおよびＲｅｓｏｌｕｔｉｏｎＹは、このプリンタのエンジンが必要とする画像の解像度であり、例えば単位はｄｐｉである。
【００７２】
ネイティブ層２１８で取得された機種名は、スクリプト層２１７に伝達されて、以下の仮想コードにより、プリンタのリストとして表示される。
【００７３】
＜form name=”frmPrinter”＞
＜select name=”selPrinter”＞
＜/select＞
＜/form＞
＜script type=”text/javascript”＞
Function fAddPrinter(PrinterName, count){
var sObj=document.forms[“frmPrinter”].elements[“selPrinter”];
for (var i=0;i＜count;i++){
var idx=sObj.length;
sObj.options[idx]=new Option(PrinterName[i]);
}
}
＜/script＞
上記において、ｓｅｌｅｃｔタグは、リストを表示するための記述であり、ｓｃｒｉｐｔタグ内に記載したＪａｖａＳｃｒｉｐｔコードによって、リストに取得したプリンタの名称（ＰｒｉｎｔｅｒＮａｍｅに配列として格納）を追加することができる。
【００７４】
図１１は、スクリプト層２１７において生成した仮想コードがインタプリタ２１４で解釈され、ディスプレイ１０４で表示されたプリンタのリストを含むプルダウンメニュー１１０１を示している。ユーザが所望のプリンタを選択すると、スクリプト層２１７が何番目のリストを選択したかというＩＤを取得することができる。プリンタを選択すると、次に、ユーザは、写真画像の選択操作に遷移する。
【００７５】
＜写真画像選択とその画像処理の詳細＞
次に以上のような構成の情報処理装置において実行する写真画像選択とそれに伴う画像処理について説明する。従って、これらの場合、情報処理装置１１５は画像処理装置として機能することになる。
【００７６】
ユーザが図９に示した写真画像選択ボタン９０１を押下することでＳ２１が開始する。ここで、図３のＳ２１の写真画像選択の詳細について、図４を用いて説明する。なお、Ｓ３０１〜Ｓ３０２、Ｓ３０７〜Ｓ３０８はＣＰＵがスクリプト層のプログラムを用いて実行する処理であり、Ｓ３０３〜Ｓ３０６はＣＰＵがネイティブ層のプログラムを用いて実行する処理である。
【００７７】
Ｓ３０１で、ＣＰＵ１００は、一意なＩＤを生成する。このＩＤは、数値、文字列等、スクリプト層２１７からネイティブ層２１８へ送信できる形式であればどのような形でも良い。Ｓ３０２で、ＣＰＵ１００は、写真画像選択ボタン９０１に対するユーザ操作に応じて画像選択をネイティブ層２１８に依頼する。Ｓ３０２では、Ｓ３０１で生成されたＩＤもネイティブ層２１８に送信される。その依頼では、バインディング機能によりスクリプト層２１７からネイティブ層２１８固有の画像選択ＡＰＩを直接呼び出す。しかしながら、直接ネイティブ層固有の画像選択ＡＰＩを呼び出せないのであれば、ネイティブ層２１８にスクリプト層２１７から直接呼び出せる関数を用意し、その関数内にネイティブ層固有の画像選択ＡＰＩを呼び出す関数を記述しておけばよい。これは、ラッパを予め用意しておく方法である。また、そのＡＰＩは、前記ＩＤを、例えば、引数として渡す仕組みを備える。このようにしてネイティブ層２１８へＩＤが渡される。
【００７８】
Ｓ３０３で、ＣＰＵ１００は、デバイス固有の画像選択ＵＩをディスプレイ１０４に表示する。表示された画像選択ＵＩに対するユーザ操作に基づいて、任意の画像を１枚選択する。この実施形態はデバイス内の画像フォルダから画像を１枚選択しているが、画像の選択は、インターネット上の画像を選択したり、脱着可能な記憶媒体内の画像を選択したり、又はデバイスのカメラ機能を利用しその場で画像を撮影しても良い。
【００７９】
Ｓ３０４で、ＣＰＵ１００は、選択された画像を取得する。Ｓ３０５で、ＣＰＵ１００は、取得した画像をＲＧＢ空間に展開する。Ｓ３０６で、ＣＰＵ１００は、展開したＲＧＢ画像を、スクリプト層２１７から取得したＩＤと関連付けてネイティブ層が利用可能な記憶領域（例えば、データ保持部２０４）に保持する。関連付け方法は、例えば、ＩＤとＲＧＢ画像を有するオブジェクトを作成することで、ＩＤによりＲＧＢ画像の特定を可能にするという方法が考えられる。この関連付け方法は、これに限らず、ＩＤと選択された画像のアクセス先であるパスや、ＩＤとＲＧＢ展開に応じて実行される関数やクラス等も考えられる。また、画像ファイルをオープンした際に、ＯＳ層２１９より画像のパス情報（保存している場所やファイル名）が取得できるため、Ｓ３０６ではそのパス情報をネイティブ層２１８からスクリプト層２１７に返却する。
【００８０】
Ｓ３０７で、ＣＰＵ１００は、返却されたパス情報を用いて、公知のＪａｖａＳｃｒｉｐｔ（登録商標）によるＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）操作により、下記のようなＳＶＧスクリプトを生成する。具体的には、スクリプト層のレンダリング部が生成する。
【００８１】
＜?xml version="1.0" standalone="no" ?＞
＜!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"＞
＜svg width="1600" height="1200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"＞
＜image id="img01" xlink:href="/images/IMG_0001.JPG" x="10" y="10" width="780" height="1180"/＞
＜image id="img02" xlink:href="/images/IMG_0002.JPG" x="810" y="10" width="780" height=”1180"/＞
＜/svg＞
なお、上記スクリプトにおいて、数値の単位は画素である。また、「/images/IMG_000x.jpg」が選択した画像のパス情報を示している。
【００８２】
図１３は上記スクリプトで描画する印刷コンテンツの例を示す図である。この実施形態では、選択した２枚の画像をこのように、１ページ内に２枚配置する例を示しているが、本発明はこれに限定されるものではない。例えば、その他どのような配置、レイアウト等で描画しても構わない。
【００８３】
上記Ｓ３０７で生成されたＳＶＧスクリプトは、ＨＴＭＬ５によって記述される内容にｉｎｎｅｒＨＴＭＬとして取り込まれる。ＳＶＧを取り込んだＨＴＭＬスクリプトは、図２に示すインタプリタ２１４によって解釈され、その画像がディスプレイ１０４で表示される。そして、Ｓ３０８でＣＰＵ１００は補正パラメータを生成し、初期化する。補正パラメータとは、Ｓ２２の画像処理の内容を決定するパラメータ群を保持するオブジェクトである。ネイティブ層２１８でどのような画像処理が施されるかは、補正パラメータによって決定される。
【００８４】
＜画像処理の詳細＞
ユーザが図９に示したスライドバー９０２を変化させることでＳ２２が開始する。ここでは、図３のＳ２２の画像処理の詳細について、図５を用いて説明する。なお、Ｓ４０１〜Ｓ４０３、Ｓ４０９、Ｓ４１１は、ＣＰＵがスクリプト層のプログラムを用いて実行する処理であり、Ｓ４０４〜Ｓ４０８はＣＰＵがネイティブ層のプログラムを用いて実行する処理である。
【００８５】
Ｓ４０１で、ＣＰＵ１００は、補正パラメータを設定する。ここでは、図３のＳ３０８で生成した補正パラメータのｂｒｉｇｈｔｎｅｓｓの値を、スライドバー９０２に対するユーザ操作に応じて設定される値に設定する。Ｓ４０２で、ＣＰＵ１００は、インジケータを起動し、ディスプレイ１０４に表示する。ここで、インジケータとは、アプリケーション内部でなんらかの処理が進行中である旨を伝えるＵＩ表示のことである。例えば、プログレスバーや、時計マーク、図形の点滅や回転などがそれに相当する。レンダリング処理には通常、数秒から数１０秒の時間を要することが考えられるため、このようなインジケータの表示は必須である。
【００８６】
Ｓ４０３で、ＣＰＵ１００は、Ｓ４０１にて設定された補正パラメータをネイティブ層２１８で利用できるＪＳＯＮ文字列の形式に変換する。ここで、補正パラメータはオブジェクトの形態を取っており、そのままではネイティブ層２１８で利用できないため、設定した補正パラメータをＪＳＯＮ文字列に変換する。そして、ＣＰＵ１００は、ＪＳＯＮ文字列に変換された補正パラメータを、図３のＳ３０１で生成したＩＤと共にネイティブ層２１８へ転送する。
【００８７】
Ｓ４０４で、ＣＰＵ１００は、ＪＳＯＮ文字列に変換された補正パラメータをデコードし、補正パラメータを取得する。より具体的には、補正パラメータ内のｂｒｉｇｈｔｎｅｓｓが取得されることになる。
【００８８】
Ｓ４０５で、ＣＰＵ１００は、スクリプト層２１７から取得したＩＤを基に、図３のＳ３０５で展開されたＲＧＢ画像を特定する。
【００８９】
Ｓ４０６で、ＣＰＵ１００は、取得した補正パラメータから施すべき画像処理を判断し、ＲＧＢ画像に対して画像処理を行う。
【００９０】
Ｓ４０７で、ＣＰＵ１００は、画像処理が施されたＲＧＢ画像をスクリプト層２１７で利用可能な形式（サポート可能な形式）の、例えば、ＪＰＥＧ形式のデータを生成し、これをテンポラリファイルとして保存する。Ｓ４０８で、ＣＰＵ１００は、スクリプト層２１７にインジケータの停止を依頼する。これは、ネイティブ層２１８から、スクリプト層２１７で定義されているインジケータ停止の関数を呼び出すことで実現する。
【００９１】
Ｓ４０９で、ＣＰＵ１００は、インジケータを停止して、ディスプレイ１０４の表示からインジケータを消去する。
【００９２】
一方、Ｓ４１０で、ＣＰＵ１００は、テンポラリファイルとして保存した画像のパス情報をネイティブ層より取得し、その画像が画面で表示されるように、前述したＳＶＧスクリプトの内容を書き換える。その書き換えは公知のＤＯＭ操作によって行われる。書き換えられたＳＶＧスクリプトは、最終的にはインタプリタ２１４に送られて解釈され、その結果がディスプレイ１０４で表示される。
【００９３】
また、この実施形態においては、図１２に示すように、プルダウンメニュー１２０１によって、利用可能な画像処理の一覧を表示し、ユーザが所望の処理を選択することができる。
【００９４】
ここで、プルダウンメニュー１２０１中の「ＩｍａｇｅＦｉｘ」とは、写真画像を、人物顔検出やシーン解析部を用いて自動で解析し、適切な明るさ・ホワイトバランス調整を行う機能（顔検出機能）である（特開２０１０−２７８７０８号公報参照）。また、「ＲｅｄｅｙｅＦｉｘ」とは、画像中から自動で赤目画像を検出して補正する機能（赤目検出機能）である（特開２００６−３５０５５７号公報参照）。また、「ＳｍａｒｔＳｋｉｎ」とは、写真画像から人物の顔を検出して、該顔の肌領域を好適に加工する機能である（特開２０１０−０１０９３８号公報参照）。また、「Ｍｏｎｏ」は、公知のモノクロ変換を行うモノクロ化処理機能である。「Ｓｅｐｉａ」は公知のセピア色変換を行うセピア化処理機能である。尚、画像処理機能の種類は、図１２に示すものに限定されるものではなく、用途や目的に応じて、様々な画像処理を利用することができる。
【００９５】
この時に、この実施形態の特徴として、ＪａｖａＳｃｒｉｐｔからバインド機能によってＯＳ層２１９が通常備えているシステム関数を呼び出し、そのシステム関数からＣＰＵ１００のクロック速度Ｃｌｋ［ＭＨｚ］を取得する。
【００９６】
この実施形態では、そのクロック速度Ｃｌｋから、予め定められた閾値Ｔｈ１を用いて画像処理グループを特定する。グループ特定のための仮想コードの例は、以下の通りである。
【００９７】
If ( Clk ＞ Th1 )  ImageProcGrp = “A”;
Else  ImageProcGrp = “B”
なお、上記判定は、通常、アプリケーションが起動した際に、スクリプト層２１７において行われる。
【００９８】
画像処理グループを特定後、スクリプト層２１７において、以下のコードによって利用可能な画像処理の表示用スクリプトを制御する。
【００９９】
＜form name=”frmIProc”＞
＜select name=”selIProc”＞
＜/select＞
＜/form＞
＜script type=”text/javascript”＞
Function fAddImageProc(Grp){
var sObj=document.forms[“frmIProc”].elements[“selIProc”];
if( Grp =”A” ){
var idx=sObj.length;
sObj.options[idx]=new Option(“ImageFix”); 
var idx=sObj.length;
sObj.options[idx]=new Option(“RedEyeFix”);
var idx=sObj.length;
sObj.options[idx]=new Option(“SmartSkin”);
var idx=sObj.length;
sObj.options[idx]=new Option(“Mono”);
var idx=sObj.length;
sObj.options[idx]=new Option(“Sepia”);
}
Else if (Grp=”B”){
var idx=sObj.length;
sObj.options[idx]=new Option(“Mono”);
var idx=sObj.length;
sObj.options[idx]=new Option(“Sepia”);
}
}
＜/script＞
上記スクリプト操作では、情報処理装置１１５のＣＰＵ１００のクロック数がある閾値より大きく、複雑な画像処理を実施可能と判断した場合には（Ｇｒｐ＝Ａ）、より多くの画像処理機能を選択可能なものとしている。逆に、ＣＰＵ１００のクロック数がある閾値以下の場合には、処理としては負荷の軽いモノクロ変換、セピア変換という処理しか選択できないようになる。
【０１００】
当然のことながら、上記スクリプトはＯＳ層２１９が保持するインタプリタ２１４で翻訳され、画面上に表示される。図１２はその描画された様子を示している。
【０１０１】
ユーザが所望の画像処理機能を選択すると、ＨＴＭＬの機能によって選択された画像処理ＩＤが判別できる。その画像処理ＩＤがネイティブ層２１８に伝達され、画像処理部２０８は選択した機能に相当する画像処理を適用して実行する。なお、ここでは各画像処理の詳細に関する説明は割愛する。
【０１０２】
＜プリンタ設定の詳細＞
ユーザが、図９に示したプリントボタン９０５を押下することで図３のＳ２３の処理が開始する。ここでは、図３のＳ２３のプリンタ設定の詳細について、図６を用いて説明する。なお、Ｓ６０１、Ｓ６０７〜Ｓ６０９は、ＣＰＵ１００がスクリプト層２１７のプログラムを用いて実行する処理であり、Ｓ６０２〜Ｓ６０６、Ｓ６１０はＣＰＵ１００がネイティブ層２１８のプログラムを用いて実行する処理である。
【０１０３】
Ｓ６０１で、ＣＰＵ１００は、スクリプト層２１７からネイティブ層２１８へデバイス情報としてのプリンタ情報取得を依頼する。これは、プリンタ１１２と通信を行うためのスクリプト層２１７からの要求にあたる。依頼の方法は、画像選択時と同様に、バインディング機能によりスクリプトからネイティブ固有のＡＰＩを呼び出す。ネイティブ層２１８には、スクリプト層２１７から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆる、ラッパが予め用意されている。例えば、ＧｅｔＰｒｉｎｔｅｒＩｎｆｏというネイティブ関数を用意しておき、スクリプト側からその関数を呼び出す。このようにして、ネイティブ層はスクリプト層からの外部デバイスとの通信の要求を取得する。
【０１０４】
通常、スクリプト層２１７からはセキュリティ上の制限で外部デバイスと直接通信することはできない。そのため、上記のように、スクリプト層２１７から、一旦、ネイティブ層２１８へ外部デバイス情報の取得を依頼し、ネイティブ層２１８を介して外部デバイスと通信を行う。ここで、ネイティブ層２１８は、ＯＳ層２１９を介して、外部デバイス（例えば、プリンタ１１２）と通信する機能を備えている。
【０１０５】
Ｓ６０２で、ＣＰＵ１００は、ネイティブ層２１８が該関数を呼び出されると、プリンタの検出、いわゆるディスカバリーを行う。そして、Ｓ６０３では、通信可能なプリンタの検出を行うため、例えば、Ｂｏｎｊｏｕｒ（登録商標）などのプロトコルにより、ブロードキャストやマルチキャスト等の方法を用いて応答のあったプリンタのＩＰアドレスを検知して記憶する。例えば、同一無線ＬＡＮルータで繋がっているプリンタを検出する。
【０１０６】
Ｓ６０４で、ＣＰＵ１００は、応答のあったプリンタのＩＰアドレスへプリンタ情報の提供を要求する。応答のあったプリンタが複数の場合、ＣＰＵ１００は、全てのプリンタに対して情報の提供を要求する。そのために、ＣＰＵ１００はネイティブ層で、プリンタの情報を取得するためのコマンドを生成する。そのコマンドとは、プリンタの動作を指定する命令であり、その一例としては、以下のようなＸＭＬで表現される。
【０１０７】
----------------------------------------------
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＞
------------------------------------------------
上記のＧｅｔＰａｐｅｒＳｉｚｅＮｕｍ（  ）、ＧｅｔＭｅｄｉａＴｙｐｅＮｕｍ（  ）、ＧｅｔＱｕａｌｉｔｙＮｕｍ（  ）、ＧｅｔＢｏｒｄｅｒＮｕｍ（  ）はネイティブ関数であり、それぞれの項目数を取得する機能を備える。例えば、プリンタが対応している用紙サイズがＡ４、Ａ５、Ｂ５、Ｌ判の４種類である場合、ＧｅｔＰａｐｅｒＳｉｚｅＮｕｍ（  ）は４を返す。
【０１２４】
ＧｅｔＰａｐｅｒＳｉｚｅＴ（ｎ）、ＧｅｔＭｅｄｉａＴｙｐｅＴ（ｎ）、ＧｅｔＱｕａｌｉｔｙＴ（ｎ）、ＧｅｔＢｏｒｄｅｒＴ（ｎ）もネイティブ関数であり、引数ｎの値番目の文字列を返す。例えば、用紙サイズのテキストを返す関数のＧｅｔＰａｐｅｒＳｉｚｅ（０）の返り値は「Ａ４」、ＧｅｔＰａｐｅｒＳｉｚｅ（１）の返り値は「Ａ５」となる。これらの値は、プリンタから受信するプリンタ情報からネイティブ関数が取り出す。
【０１２５】
ＧｅｔＰａｐｅｒＳｉｚｅＶ（ｎ）、ＧｅｔＭｅｄｉａＴｙｐｅＶ（ｎ）、ＧｅｔＱｕａｌｉｔｙＶ（ｎ）、ＧｅｔＢｏｒｄｅｒＶ（ｎ）もネイティブ関数であり、引数ｎの値番目の値を返す。例えば、用紙種類のテキストを返す関数のＧｅｔＭｅｄｉａＴｙｐｅＴ（０）の返り値は「光沢紙」のように、表示してユーザに示す文言である。これに対して、ＧｅｔＭｅｄｉａＴｙｐｅＶ（０）の返り値は「ＧｌｏｓｓｙＰａｐｅｒ」と、プリンタが解釈できる文言となっている。これらの文言は、プリンタから送られてきた情報と結び付けてネイティブが決定する。例えば、プリンタから送られてきた情報より取り出した値が「ＧｌｏｓｓｙＰａｐｅｒ」であった場合、表示するテキストは「光沢紙」と決定する。決定の方法として、ネイティブはこれらの対応表を予め保持しておき、その対応表に沿ってテキストを決定すれば良い。
【０１２６】
尚、上記では、例として、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定を行う仕様であるが、これに限定されるものではない。他の例として、両面／片面、カラー／モノクロ、画像補正のオン／オフ等の他の設定項目が挙げられることは言うまでもない。また、前述したように印刷機能のみではなく、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を表示しても良い。
【０１２７】
Ｓ６０８で、ＣＰＵ１００は、スクリプト層２１７で、設定画面１００１に対するユーザ操作に基づいて、プリンタに設定する機能を選択する。上記の例で示したＨＴＭＬを、レンダリング部２１６を用いてディスプレイ１０４に表示した例が図１０に示す１００１である。ネイティブ層２１８を介してプリンタ情報を要求し、プリンタ情報から上記のネイティブ関数を用いて取得した情報を基に設定画面１００１が形成されている。尚、上記ＨＴＭＬはスクリプト層２１７、ネイティブ層２１８のいずれで形成しても良い。
【０１２８】
また、図１０に示す用紙サイズ等の設定項目はそれぞれプルダウンメニューになっており、ユーザ操作によって項目を選択する事ができる。ここで、設定画面１００１は、プルダウンメニューによって、用紙サイズの設定項目として選択可能な項目の一覧が表示されている状態を示しており、ユーザ操作によってＡ４やＡ５等の用紙サイズを選択することができる。
【０１２９】
Ｓ６０９で、ＣＰＵ１００は、設定完了ボタン１００２に対するユーザ操作を検知すると、ユーザ操作によって選択された設定項目を含む設定情報を作成して、ネイティブ層２１８へ送信する。上記ＨＴＭＬ記述の例にあるＳｅｔＰｒｉｎｔ（  ）もバインディング機能を有するネイティブ関数である。上記の例では、ＳｅｔＰｒｉｎｔ（  ）を用いて、用紙サイズ、用紙種類、印刷品位、縁あり／なしの設定を文字列としてネイティブ層２１８へ渡している。
【０１３０】
Ｓ６１０で、ＣＰＵ１００は、バインディング機能によりスクリプト層２１７から設定情報を受信する。ネイティブ層２１８では、後に、受信した設定情報、印刷対象の画像データ、さらにはスタンプの画像データとを基に、プリンタ１１２の通信プロトコルに従って、プリントコマンドを生成する。そして、プリンタコマンドは、プリンタ通信部２１３を介してプリンタ１１２へ送信されることになる。
【０１３１】
＜レンダリングの詳細＞
ユーザが、図１０に示した設定画面１００１の設定完了ボタン１００２を押下することで図３のＳ２４のレンダリング処理が開始する。印刷処理を行うには、ＳＶＧで記述した印刷コンテンツを、プリンタ固有のプリント解像度画像データに変換する必要がある。この変換処理のことをレンダリングと呼ぶ。この実施形態では、このレンダリング処理をインタプリタ２１４で実行する。このように、表示と印刷用レンダリングを同じインタプリタを用いて行うことは、両者の一致を確保する上で重要である。
【０１３２】
ここでは、図３のＳ２４のレンダリングの詳細について、図７を用いて説明する。Ｓ７０１〜Ｓ７０５、Ｓ７０８〜７０９は、ＣＰＵ１００がスクリプト層２１７のプログラムを用いて実行する処理である。一方、Ｓ７０６〜Ｓ７０７はＣＰＵ１００がＯＳ層２１９のインタプリタ２１４を用いて実行する処理である。
【０１３３】
まず、Ｓ７０１では、ＣＰＵ１００は、インジケータを起動する。ここで、インジケータとはアプリケーション内部でなんらかの処理が進行中であることを示すＵＩ（ユーザインタフェース）表示のことである。例えば、プログレスバーなどがそれに相当する。レンダリング処理には通常、数秒から数１０秒の時間がかかることが考えられるため、このようなインジケータの表示は必須である。
【０１３４】
次に、Ｓ７０２では、ＣＰＵ１００はユーザがＳ６０８で選択した用紙種別情報と、「ＧｅｔＩｎｆｏｒｍａｔｉｏｎ」で取得した「ＲｅｓｏｌｕｔｉｏｎＸ」の値と「ＲｅｓｏｌｕｔｉｏｎＹ」の値とから、レンダリングに必要な解像度情報を算出する。例えば、このアプリケーションにおいては、スクリプト層２１７で、以下のような対応表を保持しているものとする。
【０１３５】
＜表１＞
・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・
｜用紙サイズ｜  ＰａｐｅｒＨ［ｍｍ］  ｜  ＰａｐｅｒＷ［ｍｍ］  ｜
・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・
｜  ４×６  ｜    １０１．６          ｜    １５２．４          ｜
・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・
｜  Ａ４    ｜    ２９７              ｜    ２１０              ｜
・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・
｜  Ｌ判    ｜      ８９              ｜    １２７              ｜
・−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−・。
【０１３６】
表１において、ＰａｐｅｒＨは用紙の高さ、ＰａｐｅｒＷは用紙幅を示している。レンダリングに必要な解像度情報ＲｅｓＸおよびＲｅｓＹ（単位は画素）は、以下の式によって算出することができる。即ち、
ＲｅｓＸ＝ＰａｐｅｒＨ／２５．４×ＲｅｓｏｌｕｔｉｏｎＸ
ＲｅｓＹ＝ＰａｐｅｒＷ／２５．４×ＲｅｓｏｌｕｔｉｏｎＹ
である。
【０１３７】
次に、Ｓ７０３では、上記解像度情報に基づいて、ＳＶＧコンテンツの拡大率を算出する。その拡大率（ＥｘｐＸ，ＥｘｐＹ）を次式によって算出する。即ち、
ＥｘｐＸ＝ＲｅｓＸ／ＳｖｇＸ
ＥｘｐＹ＝ＲｅｓＹ／ＳｖｇＹ
を用いて算出する。上式において、上述したＳＶＧコンテンツによれば、ＳｖｇＸ＝１６００、ＳｖｇＹ＝１２００である。
【０１３８】
拡大率の算出後、その値を用いて、Ｓ７０４では、ＣＰＵ１００は拡大命令が記述されたＳＶＧスクリプトの描画コマンドを、Ｃａｎｖａｓ命令に変換し、Ｃａｎｖａｓ領域にそのコンテンツを記述する。ここでは、コンテンツを記述しているＳＶＧスクリプト（ＳＶＧのｉｍａｇｅ命令）を以下のようなものとする。なお、Ｓ７０４の処理は、ＣＰＵ１００が、スクリプト層の変換部２０００を用いることで実現される。
【０１３９】
＜?xml version="1.0" standalone="no" ?＞
＜!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"＞
＜svg width="1600" height="1200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"＞
＜image id="img01" xlink:href="/images/IMG_0001.JPG" x="10" y="10" width="780" height="1180"/＞
＜image id="img02" xlink:href="/images/IMG_0002.JPG" x="810" y="10" width="780" height=”1180"/＞
＜/svg＞
上記の例では印刷コンテンツの中に２つのＳＶＧの画像要素が含まれている。この時、この実施形態では、ＳＶＧの画像要素に対応する以下のようなＪａｖａＳｃｒｉｐｔの関数を用意しおき、ＳＶＧのｉｍａｇｅ命令をＣａｎｖａｓ命令に置換する。
【０１４０】
function drawSVGImage( imageID, ctx , ExpX, ExpY){
var image = document.getElementById(imageID);
var x   = image.getAttribute("x")
var y   = image.getAttribute("y")
var width   = image.getAttribute("width");
var height   = image.getAttribute("height");
var href   = image.getAttribute("xlink:href")
img = new Image();
img.src = href ;  
ctx.drawImage(img, 0,0,width, height, 
x*ExpX, y*ExpY, width*ExpX, height*ExpY);
}
上記関数は、ＳＶＧの画像要素から、「ｇｅｔＡｔｔｒｉｂｕｔｅ」関数を用いて、画像の配置位置や配置サイズを取得する。そして、Ｃａｎｖａｓ用の画像要素に画像のパス情報を設定して、Ｃａｎｖａｓのコンテキストｃｔｘの「ｄｒａｗＩｍａｇｅ」関数を利用して、画像を描画する例である。「ｄｒａｗＩｍａｇｅ」の引数では、Ｓ７０３で算出した拡大率（ＥｘｐＸ，ＥｘｐＹ）を用いて、描画する画像データの位置と領域を拡大している。なお、Ｃａｎｖａｓのｃｔｘについては、予め、ＲｅｓＸおよびＲｅｓＹという必要解像度の大きさで確保されている。この実施形態では、画像は２つ存在するため、「ｉｍａｇｅＩＤ」に、「ｉｍｇ０１」，「ｉｍｇ０２」をそれぞれ設定して、Ｓ７０５では上記関数を２回呼び出す。
【０１４１】
Ｓ７０４で記述されたＣａｎｖａｓによる描画情報は、ＯＳ層２１９が保持するインタプリタ２１４に入力され、インタプリタ２１４において実際にレンダリング処理が行われることになる。そのため、Ｓ７０５でＣＰＵ１００は、ＯＳ層２１９にレンダリング処理を実行させるためにレンダリング関数を呼び出す。
【０１４２】
Ｓ７０６では、ＣＰＵ１００はインタプリタ２１４の内部において、画像を描画するためのメモリ領域を確保する。その大きさは、Ｃａｎｖａｓのｃｔｘのサイズ分となる。そして、Ｓ７０７でＣＰＵ１００は、インタプリタ２１４を用いてＣａｎｖａｓで記述された描画情報に対するレンダリング処理を行う。このレンダリング処理により得られた画像データが、Ｓ７０６で確保されたメモリ領域に記憶される。
【０１４３】
次に、Ｓ７０８では、ＣＰＵ１００は、Ｓ７０７のレンダリング処理により生成された画像データを取得し、Ｓ７０９でインジケータを停止する。なお、Ｓ７０７でメモリに保存された画像データは、Ｃａｎｖａｓの「ｔｏＤａｔａＵＲＬ」関数を用いることで画像データとして取得される。また、スクリプト層２１７では、ＲＧＢ画像のデータ配列をそのまま利用できないため、画像データはスクリプト層２１７で解釈可能な形式（つまりＢａｓｅ６４形式）に変換される。よって、Ｓ７０８で取得される画像データはＢａｓｅ６４形式の画像データである。以上の処理により、元々ＳＶＧで記述していた描画コンテンツを一度、Ｃａｎｖａｓ命令を用いて描画し直すことにより、ＯＳ層のインタプリタによるレンダリング結果をスクリプト層が画像データとして取得することが可能となる。
【０１４４】
なお、この実施形態では、説明を簡単化するために、ＳＶＧの画像要素のみについて説明したが、本発明はこれに限定されるものではない。例えば、ＳＶＧの描画命令にはその他、矩形描画命令「ｒｅｃｔ」、円形描画命令「ｃｉｒｃｌｅ」、直線描画命令「ｌｉｎｅ」、テキスト描画命令「ｔｅｘｔ」など数多くの命令が存在する。従って、これらそれぞれに対応するＣａｎｖａｓによる描画関数を用意すれば、上記画像要素と同様に、ＳＶＧで記述した命令を全てＣａｎｖａｓ命令に置換することが可能である。
【０１４５】
レンダリング処理に成功したなら、Ｓ７０８ではインジケータの停止依頼をスクリプト層２１７に送信し、Ｓ７０９では、ＣＰＵ１００はインジケータを停止して、ディスプレイ１０４の表示からインジケータを消去する。
【０１４６】
＜プリントの詳細＞
図３のＳ２５ではレンダリングした後の画像データを用いてプリント処理を実行する。実際には、図７のＳ７０７の処理が終了し、スクリプト層がＳ７０８で取得した画像データをネイティブ層に送信することでＳ２５の処理が開始される。ここでは、図３のＳ２５のプリントの詳細について、図８を用いて説明する。なお、図８のＳ８０１〜Ｓ８０３は、ＣＰＵ１００がネイティブ層２１８のプログラムを用いて実行し、Ｓ８０４はプリンタ側で実行される処理である。
【０１４７】
Ｓ８０１で、ＣＰＵ１００は、スクリプト層からネイティブ層に送信された画像データをプリンタ１１２で利用可能な形式に変換する。プリンタが利用可能な形式は、ＲＧＢやＪＰＥＧ、ＣＭＹＫに加え、ＰＤＦ等のプリンタベンダーの独自フォーマット等もある。ここではそれらのうち、どのような形式であっても構わない。
【０１４８】
Ｓ８０２で、ＣＰＵ１００は、前記設定情報とＳ８０１で変換された画像データを基に、プリンタ１１２へ送信するコマンドを生成する。Ｓ８０３で、ＣＰＵ１００は、プリンタの利用できる通信プロトコルに則り、Ｓ８０２で生成したコマンドを、Ｓ６０３で記憶したＩＰアドレスに対応するプリンタ１１２に対し、プリンタ通信部２１３を利用して送信する。
【０１４９】
Ｓ８０４で、プリンタ１１２は、情報処理装置１１５から受信したコマンドに従って、プリントを実行する。
【０１５０】
従って以上説明した実施形態によれば、印刷コンテンツを第１のコンテンツ記述言語（例えば、ＳＶＧ形式）で記述したとしても、そのコンテンツ情報を第２のコンテンツ記述言語（例えば、Ｃａｎｖａｓ形式）に変換してレンダリング処理を行うことができる。ここで、第２の記述言語で描画した画像データは、例えば、ＲＧＢ各成分値を取得することができ、そのＲＧＢ画像データをプリンタが利用可能な所定のフォーマットに変換して、プリンタに送信することでプリントアプリケーションを構築することが可能となる。
【０１５１】
［別の実施形態］
上述の実施形態では、ＳＶＧで描画されるよう指示した画像のパス情報をＣａｎｖａｓのｉｍｇ．ｓｒｃにセットしてＣａｎｖａｓのコンテキストに描画する例を説明した。ここではＪａｖａＳｃｒｉｐｔ関数によって、ＳＶＧの画像要素をＣａｎｖａｓに描画する例について説明する。
【０１５２】
説明のために、以下のようなＪａｖａＳｃｒｉｐｔ関数を例として説明する。
【０１５３】
function drawSVGImage( imageID, ctx , ExpX, ExpY){
var image = document.getElementById(imageID);
var x   = image.getAttribute("x")
var y   = image.getAttribute("y")
var width   = image.getAttribute("width");
var height   = image.getAttribute("height");
var href   = image.getAttribute("xlink:href")
img = new Image();
img.src = getBase64Data( href );  
ctx.drawImage(img, 0,0,width, height, 
x*ExpX, y*ExpY, width*ExpX, height*ExpY);
}
上記プログラムコードでは、ｉｍｇ．ｓｒｃにセットする情報を独自に定義した「ｇｅｔＢａｓｅ６４Ｄａｔａ（ｈｒｅｆ）」関数によって取得をしている。この関数は、「ｈｒｅｆ」で指示されたパス情報が示す画像データをネイティブ層でオープンし、展開後のＲＧＢ画素値をＢａｓｅ６４形式に変換してスクリプト層で取得するための関数を意味している。この関数はネイティブ層で用意されるが、前述したＪａｖａＳｃｒｉｐｔとネイティブ層のバインド機能によって、スクリプト層から呼び出すことが可能である。
【０１５４】
以上のように、この実施形態では、ファイル指定で画像データをオープンするのではなく、ネイティブ層でＢａｓｅ６４形式に変換した情報をＣａｎｖａｓに描画する構成を採用する。これにより以下の効果を達成することができる。
【０１５５】
即ち、Ｃａｎｖａｓではパス情報から直接画像データを描画する方法を用いると、特定のＯＳによっては、描画した結果の画像データをその後、「ｔｏＤａｔａＵＲＬ」関数を用いて取得することができないという問題がある。この問題はＣａｎｖａｓの汚染問題と言われている。一方、以上説明した実施形態に従えば、レンダリングする際のみネイティブ層でＢａｓｅ６４形式に変換した画像データを取得してＣａｎｖａｓに張り付けるため、この汚染問題を回避しインタプリタからレンダリング結果の画像データを取得することができる。
【０１５６】
［さらに別の実施形態］
前述の実施形態では、拡大後の解像度情報に応じたＣａｎｖａｓのコンテキスト（ｃｔｘ）を生成し、そのＣａｎｖａｓにＳＶＧコンテンツを描画する際に、画像の位置やサイズ情報に拡大率を乗じて描画する例について説明した。しかし、本発明はこれに限定されるものではない。例えば、ＳＶＧデータそのものは印刷解像度に拡大せず、そのままＣａｎｖａｓ命令に置換する。なぜなら、Ｃａｎｖａｓ描画命令の中にもｓｃａｌｅというコンテンツの拡大命令があるため、Ｃａｎｖａｓのｓｃａｌｅ命令で所望の解像度（ＲｅｓＸ，ＲｅｓＹ）に拡大することも可能であるからである。
【０１５７】
具体的には、図７のＳ７０４において、ＳＶＧスクリプトをＣａｎｖａｓ命令で描画後に、Ｃａｎｖａｓのコンテキストが備えるｓｃａｌｅ命令を用いて、コンテキスト（ｃｔｘ）の拡大を行う。具体的には以下のように記述する。
【０１５８】
ctx.scale( ExpX, ExpY );
ここで、ＥｘｐＸ，ＥｘｐＹは、上述のように拡大率を示している。拡大命令を含んだＣａｎｖａｓスクリプトは、Ｓ７０５においてインタプリタ２１４に入力される。そして、インタプリタ２１４において、上述のように、レンダリング結果の画像データ（ＲＧＢ値）を取得するのである。
【０１５９】
さて、以上説明した実施形態では、アプリケーションを起動した最初にプリンタを選択するとして説明したが、本発明はこれによって限定されるものではない。例えば、印刷設定を行う過程において、プリンタ設定を行い、そのプリンタにＸＭＬによる情報取得コマンドを送信するようにしてもよい。
【０１６０】
また、以上説明した実施形態では、スクリプト層の命令を翻訳・実行するためのインタプリタを１つだけ利用する例を示したが、本発明はこれに限定されるものではない。例えば、ディスプレイ表示用にはインタプリタ２１４を利用するが、画像のレンダリング用には別途ネイティブ層に別のインタプリタを備え、これを用いて、描画命令の解釈を行っても良い。
【０１６１】
さらに、以上説明した実施形態で記載したコードは、あくまでも仮想コード（ｐｓｅｕｄｏ  ｃｏｄｅｓ）である。従って、ＨＴＭＬ５、ＳＶＧ、ＪａｖａＳｃｒｉｐｔといった公知の言語を用いて別の形態で実施することも可能である。
【０１６２】
またさらに、以上説明した実施形態では、第１のコンテンツ記述言語をＳＶＧ、第２のコンテンツ記述言語をＣａｎｖａｓとした例について説明した。しかしながら、第１の記述言語がＳＶＧに限定されるものではないことは言うまでもない。例えば、別のＸＭＬ形式によるＳＶＧに類似した独自技術言語であっても構わない。その場合には、以上説明した実施形態と同様、各描画命令をＣａｎｖａｓに変換する構成を取ることで、本発明の目的を達成できる。
【０１６３】
またさらに、以上説明した実施形態では、２つのコンテンツ記述言語のみを扱う例について説明したが、本発明はこれによって限定されるものではなく、３つ以上の記述言語を介してレンダリング処理を行っても良い。例えば、当初ＳＶＧで記述したコンテンツを一度別の形態に変換し、それをさらにＣａｎｖａｓ形式に変換するという構成を用いたとしても、本発明が実現されることは言うまでもない。
【０１６４】
またさらに、以上説明した実施形態では、レンダリング後の画像データを所定の形式に変換して、プリンタに送信する例について説明したが、本発明はこれによって限定されるものではない。例えば、レンダリング後の画像データを、汎用的な形式（ＪＰＥＧ等）に変換し、それを、プログラムが動作する情報処理装置に保存してもよい。また、その汎用形式の画像をネットワーク１１３を介して接続された別のサーバ、例えば、ソーシャルネットワークを構築するサーバに送信してもよい。このように、レンダリング後に得られた画像データは、他のいかなる用途に用いたとしても、そのような構成が本発明の範疇に含まれることは言うまでもない。
【０１６５】
また、図１で示した情報処理装置の例は、携帯可能なモバイルコンピュータを想定したハードウェアとなっているが、本発明はそれに限定されない。例えば、据え置き型のパーソナルコンピュータやゲーム機等のハードウェア上においても、同様の構成を実現することは可能である。
【０１６６】
また、以上説明した実施形態では写真を２枚並べた印刷コンテンツのみを例示したが、本発明はそれに限定されるものではない。例えば、写真以外の画像コンテンツを写真の上に重畳したり、日付などのテキスト情報を重畳するという記述も、当業者であれば実現可能であることは言うまでもない。このように、写真以外のコンテンツを描画することも本発明の範囲に含まれるものである。
【０１６７】
さらに、表１で示したような情報は、アプリケーション内部に予め保持されていてもよいし、プリンタ本体に含まれており、それを「ＧｅｔＩｎｆｏｒｍａｔｉｏｎ」コマンドで取得するようにしてもよい。或いは、その情報が図１で示したようなサーバ１１４に保持されており、アプリケーションが起動した際に、そのサーバからウェブの標準的な通信プロトコルに従って表１に示したような情報を取得するようにしてもよい。
【０１６８】
加えて、上記実施形態のプリンタは、インクジェットプリンタ、レーザープリンタ、昇華型プリンタ、ドットインパクトプリンタ等を利用することができる。これらには、プリンタ機能、スキャナ機能等を有する、単一機能ではない、いわゆる、複合機（マルチファンクションプリンタ）の場合もある。
【０１６９】
尚、以上の実施形態の機能は以下の構成によっても実現することができる。つまり、本実施形態の処理を行うためのプログラムコードをシステムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）がプログラムコードを実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することとなり、またそのプログラムコードを記憶した記憶媒体も本実施形態の機能を実現することになる。
【０１７０】
また、本実施形態の機能を実現するためのプログラムコードを、１つのコンピュータ（ＣＰＵ、ＭＰＵ）で実行する場合であってもよいし、複数のコンピュータが協働することによって実行する場合であってもよい。さらに、プログラムコードをコンピュータが実行する場合であってもよいし、プログラムコードの機能を実現するための回路等のハードウェアを設けてもよい。またはプログラムコードの一部をハードウェアで実現し、残りの部分をコンピュータが実行する場合であってもよい。
【符号の説明】
【０１７１】
２０１：画像取得部、２０２：画像読込部、２０３：データ変換部、
２０４：データ保持部、２０５：コンテンツ描画部、２０６：画像処理制御部、
２０７：データ変換部、２０８：画像処理部、２１０：コンテンツ操作部、
２１１：プリンタ制御部、２１２：プリンタデータ生成部、２１３：プリンタ通信部、
２１４：インタプリタ、２１５：画像データ群、２１６：レンダリング部、
２１７：スクリプト層、２１８：ネイティブ層、２１９：ＯＳ層、２２０：データ保存部
【図１】
0006381319.tif 000002
【図２】
0006381319.tif 000003
【図３】
0006381319.tif 000004
【図４】
0006381319.tif 000005
【図５】
0006381319.tif 000006
【図６】
0006381319.tif 000007
【図７】
0006381319.tif 000008
【図８】
0006381319.tif 000009
【図９】
0006381319.tif 000010
【図１０】
0006381319.tif 000011
【図１１】
0006381319.tif 000012
【図１２】
0006381319.tif 000013
【図１３】
0006381319.tif 000014