特許第6799396号(P6799396)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧

特許6799396情報処理装置、情報処理方法およびプログラム
<>
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000002
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000003
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000004
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000005
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000006
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000007
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000008
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000009
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000010
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000011
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000012
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000013
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000014
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000015
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000016
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000017
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000018
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000019
  • 特許6799396-情報処理装置、情報処理方法およびプログラム 図000020
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6799396
(24)【登録日】2020年11月25日
(45)【発行日】2020年12月16日
(54)【発明の名称】情報処理装置、情報処理方法およびプログラム
(51)【国際特許分類】
   G06F 3/12 20060101AFI20201207BHJP
【FI】
   G06F3/12 344
   G06F3/12 310
   G06F3/12 329
   G06F3/12 331
   G06F3/12 332
   G06F3/12 343
   G06F3/12 345
   G06F3/12 346
   G06F3/12 347
   G06F3/12 350
   G06F3/12 353
   G06F3/12 356
   G06F3/12 392
【請求項の数】17
【全頁数】41
(21)【出願番号】特願2016-132015(P2016-132015)
(22)【出願日】2016年7月1日
(65)【公開番号】特開2018-5575(P2018-5575A)
(43)【公開日】2018年1月11日
【審査請求日】2019年6月21日
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(72)【発明者】
【氏名】鈴木 智博
(72)【発明者】
【氏名】鷲見 尚紀
(72)【発明者】
【氏名】梅田 清
(72)【発明者】
【氏名】酒井 洋行
(72)【発明者】
【氏名】大曲 勇気
【審査官】 白石 圭吾
(56)【参考文献】
【文献】 特開2016−015538(JP,A)
【文献】 特開2004−304664(JP,A)
【文献】 特開2007−058783(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/09 − 3/12
(57)【特許請求の範囲】
【請求項1】
所定の描画処理を実行する描画部を備えるコンピュータを、
印刷対象のコンテンツと所定の要素との描画を前記描画部に指示する指示手段、
前記指示手段による指示に対応し且つ前記指示に対する描画の完了に関わらず行われた前記描画部からの通知に基づいて、描画が行われたデータを前記描画部から取得する取得手段、
前記取得手段により取得されたデータに基づく印刷を印刷装置に実行させる制御手段、
として機能させ、
前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれる場合、前記制御手段、当該取得されたデータに基づいて、前記印刷対象のコンテンツの印刷を実行させ、
前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれない場合、前記取得手段が前記描画部から再度データを取得し、前記制御手段は、前記取得手段により再度取得され且つ前記所定の要素を含む当該データに基づいて、前記印刷対象のコンテンツの印刷を実行させる
ことを特徴とするプログラム。
【請求項2】
前記プログラムは、アプリケーションの実行の際に前記コンピュータが実行可能に翻訳されて実行されるスクリプト命令で構成された第1の層と、前記コンピュータが実行可能な予め翻訳された命令で構成された第2の層と、を有するハイブリッドアプリケーションであり、
前記コンピュータは、前記第1の層により、ユーザの指示を受け付ける画面をディスプレイに表示し、
前記コンピュータは、前記画面における前記ユーザの指示に応じて、前記第2の層により、前記指示手段と前記取得手段と前記制御手段として機能することを特徴とする請求項1に記載のプログラム。
【請求項3】
前記コンピュータは、前記第2の層により、印刷装置から情報を取得し、
前記コンピュータは、前記第1の層により、前記印刷装置から取得された前記情報に基づいて前記画面を表示することを特徴とする請求項2に記載のプログラム。
【請求項4】
前記コンピュータは、前記第2の層により、前記印刷装置から取得された前記情報を、前記第1の層により解釈可能な形式に変換し、
前記コンピュータは、前記第1の層により、前記変換が行われた後の前記情報に基づいて、前記画面を表示することを特徴とする請求項3に記載のプログラム。
【請求項5】
前記コンピュータは、前記第2の層により、前記情報を所定のテキスト形式に変換することを特徴とする請求項4に記載のプログラム。
【請求項6】
前記コンピュータは、前記第2の層により、画像データを前記所定のテキスト形式に変換し、
前記コンピュータは、前記第1の層により、前記変換が行われた後の前記画像データに基づいて、前記ディスプレイに画像を表示することを特徴とする請求項5に記載のプログラム。
【請求項7】
前記コンピュータを、
前記取得手段により取得されたデータに前記所定の要素が含まれ、前記制御手段により当該取得されたデータに基づいて前記印刷対象のコンテンツの印刷が実行される場合、当該取得されたデータを前記描画部から削除するための処理を実行する削除手段、
としてさらに機能させることを特徴とする請求項1乃至のいずれか1項に記載のプログラム。
【請求項8】
前記所定の要素は、前記描画部が前記描画を行う際に最後に描画される要素であることを特徴とする請求項1乃至のいずれか1項に記載のプログラム。
【請求項9】
前記コンピュータを、
前記所定の要素を前記印刷対象のコンテンツに付加するための処理を実行する付加手段、
としてさらに機能させることを特徴とする請求項1乃至のいずれか1項に記載のプログラム。
【請求項10】
前記付加手段は、前記印刷対象のコンテンツの外部に前記所定の要素を付加するための処理を実行し、
前記制御手段は、前記印刷装置に前記印刷対象のコンテンツの印刷を実行させ、前記所定の要素の印刷を実行させない、
ことを特徴とする請求項に記載のプログラム。
【請求項11】
前記指示手段は、前記印刷対象のコンテンツの単位領域ごとに前記描画部に描画を実行させ、単位領域ごとに異なる前記所定の要素の描画を前記描画部に指示することを特徴とする請求項1乃至のいずれか1項に記載のプログラム。
【請求項12】
前記指示手段は、前記印刷対象のコンテンツの単位領域ごとに前記描画部に描画を実行させ、
前記描画部は、前記単位領域のサイズに対応した、当該描画の実行領域を確保し、当該確保された実行領域において、前記コンテンツの単位領域分を描画する、
ことを特徴とする請求項1乃至11のいずれか1項に記載のプログラム。
【請求項13】
前記取得手段により取得されたデータに前記所定の要素が含まれない場合、前記取得手段は、前記所定の要素を含む描画されたデータが取得されるまで、前記取得を繰り返すことを特徴とする請求項1乃至12のいずれか1項に記載のプログラム。
【請求項14】
前記コンピュータを、
SVG(Scalable Vector Graphics)により前記印刷対象のコンテンツを生成する生成手段、
としてさらに機能させることを特徴とする請求項1乃至13のいずれか1項に記載のプログラム。
【請求項15】
前記コンピュータは、OSを実行することで、前記描画部として前記印刷対象のコンテンツと前記所定の要素を描画することを特徴とする請求項1乃至14のいずれか1項に記載のプログラム。
【請求項16】
所定の描画処理を実行する描画部を備える情報処理装置であって、
印刷対象のコンテンツと所定の要素との描画を前記描画部に指示する指示手段と、
前記指示手段による指示に対応し且つ前記指示に対する描画の完了に関わらず行われた前記描画部からの通知に基づいて、描画が行われたデータを前記描画部から取得する取得手段と、
前記取得手段により取得されたデータに基づく印刷を印刷装置に実行させる制御手段と、
を有し、
前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれる場合、前記制御手段、当該取得されたデータに基づいて、前記印刷対象のコンテンツの印刷を実行させ、
前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれない場合、前記取得手段が前記描画部から再度データを取得し、前記制御手段は、前記取得手段により再度取得され且つ前記所定の要素を含む当該データに基づいて、前記印刷対象のコンテンツの印刷を実行させる
ことを特徴とする情報処理装置。
【請求項17】
所定の描画処理を実行する描画部を備える情報処理装置により実行される情報処理方法であって、
印刷対象のコンテンツと所定の要素との描画を前記描画部に指示する指示工程と、
前記指示工程における指示に対応し且つ前記指示に対する描画の完了に関わらず行われた前記描画部からの通知に基づいて、描画が行われたデータを前記描画部から取得する取得工程と、
前記取得工程において取得されたデータに基づく印刷を印刷装置に実行させる制御工程と、
を有し、
前記取得工程においてデータが取得され且つ当該データに前記所定の要素が含まれる場合、前記制御工程において、当該取得されたデータに基づいて、前記印刷対象のコンテンツの印刷を実行させ、
前記取得工程においてデータが取得され且つ当該データに前記所定の要素が含まれない場合、前記取得工程において前記描画部から再度データを取得し、前記制御工程において、前記取得工程において再度取得され且つ前記所定の要素を含む当該データに基づいて、前記印刷対象のコンテンツの印刷を実行させる
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、レンダリングを実行可能な情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【0002】
近年、カメラ機能が搭載された可搬型多機能携帯端末(以下、モバイルコンピュータ)が普及している。このようなモバイルコンピュータは、基本的には3つの要素で成り立っている。即ち、コンピュータ自身であるハードウェアと、該ハードウェア上で動作するオペレーティングシステム(以下、OS)と、OS上で動作するアプリケーションである。ユーザは、アプリケーションを用いて、地図やメール、インターネット上のウェブサイトの閲覧等、の機能を使用することが可能である。
【0003】
このようなモバイルコンピュータ上で動作するアプリケーションの形態としては、主に2つのものが存在する。即ち、ネイティブアプリケーションとウェブアプリケーションである。以下、それぞれの特徴を説明する。
【0004】
ネイティブアプリケーションは、通常、OS毎に用意される開発環境、及び開発言語を用いて開発される。例えば、A社が提供するOS上ではC/C++言語、B社が提供するOS上ではJava(登録商標)言語、C社が提供するOS上では更に異なる開発言語が用いられて開発される。通常、ネイティブアプリケーションは、各開発環境において予めコンパイルされ、人間が理解可能ないわゆる高水準言語から、コンピュータのCPUが解釈可能なアセンブラ等の命令セット群に変換される。このように、通常のネイティブアプリケーションでは、命令をCPUが直接解釈するために、高速動作が可能である、という特徴がある。
【0005】
ウェブアプリケーションは、各コンピュータ上のOSに標準的に組み込まれているウェブブラウザ上で動作するアプリケーションである。ウェブアプリケーションは、ウェブブラウザが解釈できるよう、一般的には、HTML5及びCSS、さらにJavaScript(登録商標)等の言語を用いて開発される。これらはウェブ標準言語であるため、これらのウェブ標準言語でウェブアプリケーションを一旦記述すれば、ウェブブラウザが動作する環境であれば、どこでも動作可能という特徴がある。
【0006】
近年、ネイティブアプリケーションとウェブアプリケーションの利点を双方保持した、ハイブリッドアプリケーションの形態が注目されている。ハイブリッドアプリケーションでは、そのユーザインタフェース(UI)の全て、あるいは大部分が、HTML5、CSS3、JavaScriptといったウェブの標準言語で記述される。また、ウェブ標準言語で記述された内容から、ネイティブ言語で記述された機能を利用することができる。即ち、1つのアプリケーション内部に、ウェブ標準言語によるスクリプト層とネイティブ層とを包含する構成となっている。このような構成により、上記のネイティブアプリケーションとウェブアプリケーションの利点を双方保持したソフトウェア構成とすることができる。
【0007】
また、印刷コンテンツを印刷するためには、プリンタの印刷エンジンが要求する、一般的には高解像度画像データ(いわゆるビットマップデータ)へ変換する必要がある。この処理をレンダリング処理と呼ぶ。
【0008】
特許文献1では、OSが、データを一時的に記憶するメモリ領域であるクリップボードに記憶された印刷対象データから印刷データを生成することが記載されている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2013−137622号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
ハイブリッドアプリケーションの場合、このような印刷コンテンツの描画も、ウェブ標準言語を用いて記述することになる。例えばHTML5のSVG(Scalable Vector Graphics)で上記のような印刷コンテンツを生成する。ここで、SVGとは、Web標準言語で利用可能な、グラフィックを表示するための記述方法の一つである。
【0011】
上記印刷コンテンツをビットマップデータに変換するために、ハイブリッドアプリケーションにおいては、オフスクリーンの画面にSVGを生成するとする。そして、例えば特許文献1のように、OSが印刷対象の印刷データを生成するとする。
【0012】
しかしながら、その構成は、キャプチャ(画像データの取得)に関するミスが発生してしまう可能性を含んでいる。各OSは、SVGの読み込みが完了すると、OS固有の読み込み完了通知を発行する。しかしながら、OSの提供する読み込み完了通知が、SVGデータを読み込み終わったという通知である場合、SVGの内容を画面に描画完了したというタイミングとは異なる。そのため、該通知があったタイミングまたは該通知の直後のタイミングでは、OSが該通知に対応する読み込みで読み込まれたSVGデータについて、描画が完了していないことがある。この場合、OSが描画を行ったデータが書き込まれるメモリ領域においては、該通知に応じてキャプチャを行うべきデータとは異なるデータが格納されている。そのため、このタイミングにキャプチャを行ってしまうと、本来キャプチャを行うべきデータとは異なるデータを出力対象としてキャプチャしてしまう。
【0013】
本発明の目的は、このような従来の問題点を解決することにある。上記の点に鑑み、本発明は、ハイブリッドアプリケーションが通知に応じて描画データを取得する構成において、該通知が描画の完了に関わらず行われたとしても、該データを印刷対象とするか適切に判定することができる情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
上記課題を解決するため、本発明に係るプログラムは、所定の描画処理を実行する描画部を備えるコンピュータを、印刷対象のコンテンツと所定の要素との描画を前記描画部に指示する指示手段、前記指示手段による指示に対応し且つ前記指示に対する描画の完了に関わらず行われた前記描画部からの通知に基づいて、描画が行われたデータを前記描画部から取得する取得手段、前記取得手段により取得されたデータに基づく印刷を印刷装置に実行させる制御手段、として機能させ、前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれる場合、前記制御手段、当該取得されたデータに基づいて、前記印刷対象のコンテンツの印刷を実行させ、前記取得手段によりデータが取得され且つ当該データに前記所定の要素が含まれない場合、前記取得手段が前記描画部から再度データを取得し、前記制御手段は、前記取得手段により再度取得され且つ前記所定の要素を含む当該データに基づいて、前記印刷対象のコンテンツの印刷を実行させる、ことを特徴とする。
【発明の効果】
【0015】
本発明によれば、ハイブリッドアプリケーションが通知に応じて描画データを取得する構成において、該通知が描画の完了に関わらず行われたとしても、該データを印刷対象とするか適切に判定することができる。
【図面の簡単な説明】
【0016】
図1】情報処理装置のハードウェア構成を示す図である。
図2】情報処理装置のソフトウェア構成を示す図である。
図3】写真画像の印刷処理を示すフローチャートである。
図4】写真画像選択の処理を示すフローチャートである。
図5】画像処理を示すフローチャートである。
図6】スタンプ追加の処理を示すフローチャートである。
図7】プリンタ設定の処理を示すフローチャートである。
図8】レンダリング及びプリントの処理を示すフローチャートである。
図9】アプリケーション画面を示す図である。
図10】印刷設定画面を示す図である。
図11】分割が行われたブロック画像を示す図である。
図12】バンド単位で分割された画像を取得する様子を示す図である。
図13】マーカーを追加した様子を示す図である。
図14】レンダリング及びプリントの処理を示すフローチャートである。
図15】縁ありの場合と縁なしの場合を示す図である。
図16】縁なし印刷における印刷領域を示す図である。
図17】レンダリング及びプリントの処理を示すフローチャートである。
図18】SVGコンテンツを示す図である。
図19】SVGコンテンツを示す図である。
【発明を実施するための形態】
【0017】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成要素には同一の参照番号を付して、説明を省略する。
【0018】
本実施形態では、ハイブリッドアプリケーションにおける写真印刷アプリケーションに関して記載する。例えば該写真印刷アプリケーションのUI上で、印刷対象となる写真を描画し、絵文字などのスタンプを重畳し、その結果をユーザがプリンタにプリントさせる。ハイブリッドアプリケーションの場合、このような印刷コンテンツの描画も、ウェブ標準言語を用いて記述することになる。例えばSVGで上記のような印刷コンテンツを生成する場合、まず写真を選択し、その上にテキストやスタンプを重畳していくことになる。
【0019】
上記のような、「写真追加」、「スタンプ追加」を実行した後のSVGの一例として、下記のような記述がある。
<svg width=”印刷コンテンツの横幅” height=”印刷コンテンツの縦幅”>
<image xlink:href=”画像ファイルの指定”
width=”写真の横幅”
height=”写真の縦幅”
x=”写真のx座標”
y=”写真のy座標”/>
<image
xlink:href=”スタンプファイルの指定”
width=”写真の横幅”
height=”写真の縦幅”

x=”スタンプのx座標”
y=”スタンプのy座標”/>
</svg>
上記のように、SVGは、グラフィックの描画コマンドが列挙された文字列であり、これがインタプリタで解釈されることにより、UIに表示される。上記の印刷コンテンツを印刷するためには、プリンタの印刷エンジンが要求する、一般的には高解像度画像データ(いわゆるビットマップデータ)へ変換する必要がある。
【0020】
しかしながら、OSの提供する読み込み完了通知が、SVGデータを読み込み終わったという通知である場合、本来キャプチャすべきデータとは異なるデータがキャプチャされてしまうことがある。
【0021】
そこで、タイマー機能を利用し、一定時間の経過後にキャプチャするという方法も考えられる。ただ、どのタイミングで描画が完了するかはデバイス性能に依存し、差がある。そのため、タイマー機能を利用するのであれば、十分に長い時間を設定しなくてはならず、ユーザビリティを著しく低下させてしまう。また、タイマー機能により待機するだけでは、キャプチャの不確実性は解消されていないので、本質的に上記の課題を解決していない。
【0022】
本実施形態では、OSからのSVGデータのロード完了通知をハイブリッドアプリケーションが受け取った場合に、描画済みデータに所定の要素が含まれるか判定することで、該データを出力対象(例えば印刷対象)とするか否かを決定する技術について、以下詳細に説明する。
【0023】
[第1の実施形態]
以下、携帯型情報端末上で、本実施形態におけるハイブリッド型写真印刷アプリケーション(後述)を動作させ、ユーザが選択した画像に対して、様々な画像処理を適用した後に、プリントコンテンツを印刷する手順について説明する。
【0024】
[ハードウェア構成]
図1は、本実施形態の情報処理装置115として、例えば、スマートフォンや携帯電話等の携帯型情報端末の構成例を示すブロック図である。同図において、CPU100(中央演算装置/プロセッサ)は、情報処理装置115を統括的に制御し、以下で説明する各種処理をプログラムに従って実行する。図中のCPU100は1つであるが、複数のCPUあるいはCPUコアによって構成されていても良い。ROM101は、汎用的なROMであり、例えば、CPU100により実行されるプログラムが記憶されている。RAM102は、汎用的なRAMであり、例えば、CPU100によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。ハードディスクやフラッシュメモリ等の2次記憶装置103は、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラムを記憶するための記憶媒体である。ディスプレイ104は、各種処理を実現するためのユーザ操作を受け付けるためのUI(ユーザインタフェース)や、実行された処理の結果等の各種情報を表示する。タッチセンサ105は、ディスプレイ104上に表示されたタッチパネル上のタッチ操作を検出する。
【0025】
内部撮像デバイス110による撮像によって得られた画像データは、所定の画像処理が実行された後、2次記憶装置103に保存される。また、画像データは、外部I/F(インタフェース)108を介して接続された外部撮像デバイス111から読み込む場合もある。情報処理装置115は、外部I/F(インタフェース)109を備え、インターネット等のネットワーク113を介して外部と通信する。情報処理装置115は、例えば、通信I/F109を介して、ネットワーク113に接続されたサーバ114から画像データを取得する。情報処理装置115は、加速度センサ106を備え、情報処理装置115自身の位置姿勢に関する加速度情報を取得する。情報処理装置115は、外部I/F107を介し、プリンタ112と接続されており、画像データ等を出力する。プリンタ112は、ネットワーク113にも接続されており、通信I/F109経由で、プリント処理に必要なデータを送受信する。
【0026】
外部I/F107、108、109は、有線通信と無線通信の内、少なくともいずれかの通信形態を有するインタフェースであり、用いられる通信形態に応じて外部デバイス(プリンタ112あるいはサーバ114)との通信を行う。有線通信には、例えば、USB、イーサネット(登録商標)等があり、無線通信には、無線LAN、NFC(Near Field Communication)、Bluetooth(登録商標)、赤外線通信等がある。また、無線通信として、無線LANを利用する場合には、装置同士が直接接続する形態もあれば、無線LANルータ等の中継装置を介して接続する形態もある。また、外部I/F107、108、109は、図1では別々に構成されているが、一体として構成されていても良い。情報処理装置115の動作に必要な電源は、バッテリ117によって供給される。情報処理装置115が備える各種構成要素は、制御バス/データバス116を介して相互に接続され、CPU100は、制御バス/データバス116を介して、各種構成要素を制御する。
【0027】
尚、本実施形態では、情報処理装置115が、例えばコントローラボードに搭載されたCPU100によって実行されるプログラム等の各ソフトウェアの実行環境となる。
【0028】
[ソフトウェア構成]
図2は、情報処理装置115で動作するソフトウェア構成のブロック図である。情報処理装置115は、スクリプト層217、スクリプト層217の下層のネイティブ層218、及び、ネイティブ層218の下層のOS層219を含むプログラムを実行する。これらの各層の構成は、CPU100がROM101あるいは2次記憶装置103に記憶されているプログラムを読み出して実行することにより実現される。
【0029】
スクリプト層217は、HTML5やCSS3、及びJavaScript等のウェブ標準言語を使って、テキストデータでスクリプト命令セット(コンテンツの描画や画像の表示や動画の再生等の命令セット)が記述されているプログラム層である。スクリプト層217では、アプリケーション実行環境上で、そのアプリケーション実行環境に存在するプロセッサ、例えばCPU100が、テキストデータの各種命令セットを翻訳して実行する。その実行形態としては、例えば、実行の度に命令文を一行ずつ動的に翻訳する場合や、アプリケーションを起動したときに翻訳する場合、アプリケーションを情報処理装置115にインストールしたときに翻訳する場合がある。以後、スクリプト層217で処理することや内容を「スクリプト」と呼ぶ。スクリプトの命令を情報処理装置115内で翻訳する形態として、例えば、ネイティブ層218やOS層219が備えるインタプリタの機能を用いる構成がある。尚、本実施形態においては、アプリケーションのUIの大部分が、スクリプト層217で記述されているものとする。
【0030】
ネイティブ層218は、アプリケーション実行環境以外で予め翻訳(コンパイル)された命令セットが記述されているプログラム層である。形態としては、CもしくはC++といった高水準言語で記述されたコードが、予めアプリケーション開発者のPCやサーバ上でコンパイルされ、CPU100が解釈可能な命令の集合体とされた構成がある。以後、ネイティブ層218で処理することや内容、後述するOS層219の機能をネイティブ層218から呼び出すことを含め、「ネイティブ」と呼ぶ。尚、ネイティブ層218の別の実装系として、Javaが挙げられる。Javaは、C/C++と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳される。翻訳された中間コードは、各OSが備えるJava仮想環境上で動作する。本実施形態においては、このようなプログラム形態も、ネイティブ層218の一種に含まれる。
【0031】
OS層219は、情報処理装置115のオペレーティングシステム(OS)に対応する。OS層219は、ハードウェア機能をアプリケーションに提供する役割及び固有の機能を有する。OS層219はAPIを備え、スクリプト層217やネイティブ層218からOS層219の機能を使用可能である。
【0032】
本実施形態では、スクリプト層217からネイティブ層218の呼び出しを可能にすることをバインディング、もしくはバインドと呼ぶ。各種ネイティブの機能は、APIを備え、該APIをスクリプトが呼び出すことでネイティブの機能を使用可能である。このようなバインディング機能は、通常、各種OSが標準的に備えている機能である。尚、本実施形態では、スクリプト層217とネイティブ層218とが階層構造とされ、各層が連携して所定の機能を実行するアプリケーションのことをハイブリッドアプリケーションと呼ぶ。
【0033】
以上がソフトウェアの構成に関する説明である。以後、各ブロックについて説明する。
【0034】
スクリプト層217の画像取得部201は、ネイティブ層218に対し、画像データの取得を依頼する。画像取得部201の依頼として、例えば、画像データのパスを指定する方法や、ダイアログ表示を促す方法がある。
【0035】
ネイティブ層218の画像読込部202は、画像データ群215から画像データを取得する(読み込む)。画像データ群215からの画像データの取得方法は、スクリプト層217の画像取得部201の依頼に依存する。依頼方法として、UI上に提供されているダイアログボックスから選択する、画像データのパスで直接指定する等がある。画像読み込み時、画像データに対して一意なIDが割り当てられる。スクリプト層217から、ネイディブ層218の画像データを指定する場合に、上記IDが用いられる。
【0036】
ネイティブ層218のデータ変換部203は、ネイティブ層218のデータ、例えばバイナリ形式の画像データやパラメータを、スクリプト層217で処理可能な形式のデータ、例えばテキスト形式(BASE64)の画像データやJSONに変換する。JSON(JavaScript Object Notation)とは、JavaScriptで利用可能なデータ形式である。一方、データ変換部203は、スクリプト層217から送られてきたデータ、例えばテキスト形式(BASE64)の画像データやJSONを、ネイティブ層218で処理可能な形式のデータ、例えばバイナリ形式の画像データやパラメータに変換する。
【0037】
スクリプト層217のデータ変換部207は、スクリプト層217のデータ、例えばテキスト形式の処理パラメータを、ネイティブ層218で処理可能な形式のデータ、例えばバイナリ形式の画像データやパラメータに変換する。一方、データ変換部207は、ネイティブ層218から送られてきたデータ、例えばバイナリ形式の画像データやパラメータを、スクリプト層217で処理可能な形式のデータ、例えばテキスト形式の処理パラメータに変換する。
【0038】
ネイティブ層218のデータ保持部204は、画像読込部202により読み込まれた画像データ、画像処理部208で画像処理が実行された画像データ、分割された画像群を保持する。保持される画像データは、例えば、RGB画像データに展開されており、直ちに画像処理が実行可能な形式になっている。
【0039】
スクリプト層217のコンテンツ描画部205は、プリントのためのコンテンツ(印刷コンテンツ)をウェブ標準言語により記述する。この記述には、コンテンツ操作部210で操作された内容も反映される。コンテンツ描画部205で記述されたコンテンツのスクリプトは、OS層219のインタプリタ214で解釈され、ディスプレイ104に表示される。
【0040】
スクリプト層217の画像処理制御部206は、画像処理に用いる補正パラメータと、処理対象となる画像データを決定し、ネイティブ層218の画像処理部208に画像処理を依頼する。補正パラメータは、データ変換部207でネイティブ層218へ送信できる形式へ変換された後、処理対象となる画像データのIDと共にネイティブ層218へ送信される。
【0041】
ネイティブ層218の画像処理部208は、画像処理制御部206で指定された画像データに対し、画像処理を施す。その際、どのような画像処理を実行するかは、画像処理制御部206で設定されたパラメータにより決定される。画像データの指定では、先述のIDを用いる方法や、スクリプト層217から画像データのパスを受け取る方法などが用いられる。
【0042】
OS層219のタッチイベント209は、ディスプレイ104上のタッチ操作に関する情報を取得する。タッチ操作に関する情報とは、ディスプレイ104上のタッチ操作検知、タッチされた位置情報等が挙げられる。取得したタッチ操作に関する情報は、ネイティブ層218経由でスクリプト層217のコンテンツ操作部210に送信される。
【0043】
スクリプト層217のコンテンツ操作部210は、例えば、画像取得依頼の結果としてネイティブ層218から画像データが返却された際、その画像データへの操作内容の反映を行うために、スクリプト命令を変更する。
【0044】
スクリプト層217のプリンタ制御部211は、プリンタ検知の依頼、プリンタ設定画面の表示、プリント情報の生成及び送信、などを行う。後述するプリンタ設定画面では、用紙のサイズ、用紙の種類、カラー・モノクロ等のプリンタ設定が行われる。ここで設定された項目に基づいて、プリンタデータ生成部212でプリンタデータが生成される。
【0045】
ネイティブ層218のプリンタデータ生成部212は、プリンタ制御部211からの依頼に基づいて、プリンタ通信に必要なデータやコマンドを生成する。プリンタ通信に必要なデータとは、プリンタ112との間での通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャン等、プリンタの動作を決定するためのデータである。つまり、プリンタデータ生成部212は、プリンタの動作を決定するためのコマンドを含むプリンタデータを生成する。
【0046】
ネイティブ層218の外部デバイス通信部221は、プリンタ112などの、情報処理装置115と接続している外部デバイスとの通信を行うためのインタフェース(IF)である。ここでは、プリンタデータ生成部212から受け取ったデータを送信したり、プリンタ112からの情報を受信する。本実施形態ではOS層219の通信制御部213を介して通信するが、外部デバイス通信部221が直接、外部IF107へデータを送信してもよい。OS層219の通信制御部213が外部デバイスが用いる通信プロトコルに対応していれば、その機能が用いられて通信が行われる。一方、通信制御部213が外部デバイスが用いる通信プロトコルに対応していなければ、外部デバイス通信部221がその通信プロトコルに従って通信する。
【0047】
OS層219のインタプリタ214は、スクリプト層217で生成されたウェブ標準言語で記述された命令を解釈・実行する。例えば、画像描画等の命令は、インタプリタ214を通して実行され、ディスプレイ104に表示される。
【0048】
画像データ群215は、画像データを保持している領域である。データ保存部220は、必要に応じて、データ保持部204が保持する画像データを画像データ群215に保存する。
【0049】
スクリプト層217のレンダリング依頼部222は、ネイティブ層218のレンダリング216にレンダリングの依頼をする。その際、コンテンツ描画部205で記述されている内容をデータ変換部207で変換してからレンダリング部216に受け渡す。レンダリング部216に受け渡す前に必要な処理があれば、コンテンツ操作部210により、コンテンツ記述を編集する場合もある。また、コンテンツ記述を直接編集するとUIに影響がある場合、編集操作はコンテンツ記述の複製を作成して、作成された複製に対して行われる。
【0050】
レンダリング部216は、レンダリング依頼部217から受け取った内容から、プリンタ112へ送信する画像データを生成するためのレンダリングを行う。このレンダリングには、例えば、スクリプト層217で、プリンタ112への出力解像度で画像を生成することも含まれる。また、オフスクリーン画面が生成される場合には、ネイティブ層218におけるレンダリング結果、及び、生成途中の画像は、ディスプレイ104には表示されない。
【0051】
OS層219の状態検知部223は、デバイスの状態、アプリケーションの実行状況の変化を検知する。例えば、アプケーションを実行している状態で、着信などの他の通知があった場合、そのイベントの発生や状態変化をネイティブ層218へ送信する。
【0052】
[写真画像のプリント処理]
図3は、写真画像のプリント処理を示すフローチャートである。図3を用いて、S31からS35の各処理の概要を説明し、詳細は後述する。なお、以下のフローチャートの各処理は、情報処理装置115のCPU100が、ROM101あるいは2次記憶装置103に記憶されているプログラムを実行することにより実現される。アプリケーション画面900は、スクリプト層217によって生成される。アプリケーション画面900上のユーザ操作は、例えばタッチセンサ105を介して受け付けられる。
【0053】
S31では、CPU100は、アプリケーション画面900の写真画像選択ボタン901に対するユーザ操作(タッチ操作入力も含む。以下同様)を検知すると、その操作に応じた画像データを選択する。画像データが選択されると、CPU100は、ネイティブ層218で特定の処理を実行した後、アプリケーション画面900の描画領域906に選択された画像データの画像を表示する。
【0054】
S32では、CPU100は、表示されている画像の輝度を調整するためのスライドバー902に対するユーザ操作を検知すると、そのユーザ操作に応じて、画像処理時に用いる補正パラメータを設定する。そして、実行開始の指示操作により、CPU100は、設定した補正パラメータに従って画像データに画像処理を実行し、特定の処理を行った後、その処理内容及び処理結果を描画領域906に表示する。
【0055】
S33では、CPU100は、スタンプ追加ボタン903に対するユーザ操作を検知すると、スタンプを表示する。CPU100は、スタンプ一覧に対するユーザ操作によってスタンプの選択を検知すると、描画領域906に、選択されたスタンプを追加・表示する。さらに、スタンプにタッチイベント(タップ、スワイプ)検知機能を付与することで、スタンプの拡大・縮小、移動などが行われても良い。この検知機能は、Web標準言語に標準として備えられているものであり、addEventListener関数が相当する。スタンプがタッチされた時の動作を示す記述例を下記に示す。
var stamp = 対象のスタンプ;
stamp.addEventListener(“touchstart”, function(e){
//スタンプがタッチされた時に行いたい処理をここに記述
}, false);
S34では、CPU100は、プリントボタン905に対するユーザ操作を検知すると、プリントに必要な情報を設定するための図10の設定画面1001を表示する。プリントに必要な情報とは、例えば、図10の設定画面1001に示されるように、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定項目である。これ以外にも、両面/片面、モノクロ・カラー等、使用するプリンタが有する機能に応じて、設定可能な設定項目が表示される。
【0056】
S35では、CPU100は、設定画面1001の設定完了ボタン1002に対するユーザ操作を検知すると、描画領域906に表示されている画像を、プリンタ112に出力するためのデータへ変換するためのレンダリングを実行する。
【0057】
レンダリングによってプリンタデータが作成された後、CPU100は、プリンタデータを、プリンタ制御のコマンドと共にプリンタ112に送信する。以上の処理により、ユーザにより選択された画像がプリンタ112でプリントされる。
【0058】
尚、図3に示す処理は一例であり、処理内容はこれに限定されず、図3の各処理の処理順序もこれに限定されるものではない。また、本実施形態において、プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層(第1の層)をスクリプト層217、プロセッサ以外で予め翻訳された命令セットを含む第2のプログラム層(第2の層)をネイティブ層218と定義する。本実施形態では、これらの第1のプログラム層と第2のプログラム層とが階層構造とされたプログラムがハイブリッドアプリケーションを実現する。
【0059】
[写真画像選択]
次に、以上のような構成の情報処理装置115において実行する写真画像選択とそれに伴う画像処理について説明する。これらの処理を実行する場合、情報処理装置115は、画像処理装置として機能する。
【0060】
図9の写真画像選択ボタン901のユーザ操作を検出することにより、S31が開始する。ここで、図3のS31の写真画像選択の詳細について、図4を用いて説明する。なお、S401、S411は、CPU100がスクリプト層217のプログラムを用いて実行する処理であり、S402〜S410は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。
【0061】
S401では、CPU100は、スクリプト層217において、写真画像選択ボタン901に対するユーザ操作に応じて、画像選択をネイティブ層218に依頼する。その依頼では、バインディング機能によりスクリプト層217から、ネイティブ層218固有の画像選択APIが直接呼び出される。ここで、直接ネイティブ層218固有の画像選択APIを呼び出せない場合には、ネイティブ層218にスクリプト層217から直接呼び出せる関数を用意しておき、その関数内にネイティブ層218固有の画像選択APIを呼び出す関数を記述しておいても良い。これは、ラッパを予め用意しておく方法である。また、他に、画像選択UIを独自に実装するという構成としても良い。
【0062】
S402では、CPU100は、ネイティブ層218において、画像選択UIをディスプレイ104に表示する。そして、表示された画像選択UIに対するユーザ操作に基づいて、任意の画像を1枚選択する。なお、本実施形態ではデバイス内の画像フォルダから画像を1枚選択しているが、それに限定されるものではない。例えば、インターネット上の画像や、脱着可能な記憶媒体内の画像が選択されても良いし、デバイスのカメラ機能を利用して画像を撮影し、それが選択されるようにしても良い。
【0063】
S403では、CPU100は、ネイティブ層218において、一意なIDを生成する。このIDは、数値、文字列等、ネイティブ層218からスクリプト層217へ送信できる形式であれば、どのような形式でも良い。ここで、IDの生成は、ネイティブ層218で実行される構成に限られず、スクリプト層217で生成してネイティブ層218に送る構成でも良い。
【0064】
S404では、CPU100は、ネイティブ層218において、選択された画像を取得する。例えば、選択された画像が画像ファイルの状態であれば、CPU100は、ファイルを開き、その内容を読み取って取得する。
【0065】
S405では、CPU100は、ネイティブ層218において、取得した画像をRGB空間に展開する。ここでは、RGBデータをネイティブ層218に保持しているが、これに限定されるものではない。例えば、JPEG(Joint Photography Expert Group)、PNG(Portable Network Graphics)、RGBA形式などで保持するようにしても良い。ここで、RGBA形式とは、画像データのRGB(赤、緑、青)成分に、透明度としてAを組み合わせたデータ形式である。
【0066】
S406では、CPU100は、ネイティブ層218において、展開したRGBデータを分割し、小領域毎のRGBデータを作成する。ここで、小領域毎のRGBデータを「ブロック画像」と呼ぶ。ブロック画像は、タイル状と帯状(バンド状)のどちらでも良い。タイル状とは、図11(a)に示すように、ブロック画像の横幅・縦幅が、両方とも分割元データの横幅・縦幅に満たない場合をいう。対して、帯状とは、図11(b)に示すように、ブロック画像の横幅・縦幅のどちらか一方のみが、分割元データに対して満たない場合をいう。
【0067】
本実施形態では、ブロック画像は、本来の画像データを帯状に二分割する方法を採用するものとする。分割の個数は、特定の個数を指定する方法や、一つのブロック画像が特定の画素数未満になるようにするなど、どのような方法でも良い。また、ブロック画像のサイズは一律同じである必要はない。例えば、3000px(ピクセル)×2000pxの画像を2分割する際、3000px×1500pxと3000px×500pxのような分割であっても良い。
【0068】
S407では、CPU100は、ネイティブ層218において、展開したRGBデータと生成したブロック画像群を、S403で生成したIDと関連付けてデータ保持部204に保持する。ここで、関連付ける方法として、例えば、IDとRGBデータ、ブロック画像群を有するオブジェクトを作成し、IDによりRGBデータとブロック画像群を特定可能にするという方法が用いられる。IDの関連付け方法は、これに限られず、IDからRGB画像、ブロック画像群を特定できるのであれば他の方法が用いられても良い。
【0069】
また、RGBデータ、ブロック画像群はオンメモリで保持しても良いし、ファイルとして保存しても良い。本実施形態では、ブロック画像群を、スクリプト層217が処理可能なDIB(Device Independent Bitmap)フォーマットに変換してファイルに保存しておくこととする。この場合、IDとの関連付けは「block1_ID.bmp」、「block2_ID.bmp」のように、決められた名前にIDを追記することで実現される。また、画像フォーマットとして、DIB以外のフォーマットが用いられても良い。
【0070】
S408では、CPU100は、ネイティブ層218において、RGBデータからUIで用いるための縮小RGBデータを作成する。縮小には、OSの機能が用いられても良いし、独自の実装で行われても良い。スクリプトは、返却された画像が大きい場合には、画像をUIの大きさ、ディスプレイ104の解像度に合わせて縮小処理を行う。UIに対して過多な画素数の画像をスクリプトで扱うと、CPU100に処理負荷が掛かり、かつ、大容量のメモリが必要となる。本実施形態では、縮小処理を実行するので、メモリの大容量化を回避することができる。縮小処理の目安としては、例えば、ディスプレイ104の表示サイズやUIで画像を表示する箇所のサイズを上限とし、それを越える画素数を持つ画像に対して縮小処理を行うよう制御する。画像に対して画像処理を実行する場合には、元の画像(RGB展開した画像データ)に対して画像処理を実行し、上記の縮小処理を実行後に縮小された画像をスクリプト層217に引き渡す。
【0071】
S409では、CPU100は、ネイティブ層218において、S408で作成した縮小RGBデータをスクリプト層217で処理可能な形式(サポート可能な形式)の画像データに変換する。本実施形態では、変換するデータ形式をJPEG(Joint Photography Expert Group)とする。
【0072】
S410で、CPU100は、ネイティブ層218において、JPEG形式のデータをBASE64データに変換し、スクリプト層217へ送信する。これは、ネイティブ層218で扱うJPEGデータは、スクリプト層217では直接処理できない形式であるからである。BASE64とは、バイナリデータを文字列データとして扱うためのエンコード方式であり、JavaScript(商標登録)で処理可能なデータ形式となっている。スクリプト層217で画像を扱う方法として、ネイティブ層218でJPEGを一旦ファイルに保存したのち、その保存パスを利用する方法もあるが、本実施形態では、BASE64データを利用する方法を用いるものとして説明する。
【0073】
S411で、CPU100は、スクリプト層217において、ネイティブ層218で変換されたBASE64データを受信し、描画領域に画像を描画する。例えば、CPU100は、スクリプト層217で指定されたBASE64データをOS層219のインタプリタ214に送信する。そして、インタプリタ214がBASE64データのスクリプトを解釈し、描画領域に画像として表示する。以下、描画領域にBASE64データを反映させるサンプルコードの一例を示す。
--------------------------------------------------
var base64Data = ネイティブ層からのBASE64データ;
var ID = ネイティブ層で生成された一意なID;
//画像の反映させたい領域を指定
var svg = “http://www.w3.org/2000/svg”;
var xlink = “http://www.w3.org/1999/xlink”;
var img = document.createElementNS(svg, "image");
img.setAttributeNS(xlink, “href”, base64Data);
img.setAttribute(“id”, ID);
img.setAttribute(“width”, 200);
img.setAttribute(“height”, 200);
var target = document.getElementById(“追加先のSVGのID”);
target.appendChild(img);
--------------------------------------------------
上記では、描画領域906に対しSVGが動的に追加可能な方法を示している。後述するスタンプに関しても同様の操作で描画領域906に追加することが可能である。
【0074】
[画像処理]
図9のスライドバー902を変化させる操作が行われることにより、S32が開始する。ここでは、図3のS32の画像処理の詳細について、図5を用いて説明する。なお、S501〜S503、S510、S512は、CPU100がスクリプト層217のプログラムを用いて実行する処理であり、S504〜S507、S509は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。ここでは、画像の明るさを変更する画像処理を実行することとし、その変化度合は、ユーザが操作したスライドバー902の設定値に対応するものとする。
【0075】
S501では、CPU100は、スクリプト層217において、補正パラメータを設定する。補正パラメータは、スライドバー902の値に対応する。S502では、CPU100は、スクリプト層217において、インジケータを起動し、ディスプレイ104に表示する。ここで、インジケータとは、ユーザに処理中である旨を伝えるための表示であり、プログレスバーや、時計マーク、図形の回転等である。インジケータは、実行時間のかかる処理を行う場合に用いられる。また、本実施形態では、スクリプト層217でインジケータの起動と停止を行っているが、ネイティブ層218でインジケータの起動と停止を行うようにしても良い。
【0076】
S503で、CPU100は、スクリプト層217において、S501で設定された補正パラメータと、画像処理を実行する画像のID(S403で生成した画像のID)を、JSON形式としてネイティブ層218へ送信する。JSON(JavaScript Object Notation)とは、JavaScriptで利用可能なデータ記述方法であり、ネイティブ層218と送受信可能なデータフォーマットの一つである。例えば、IDと輝度補正の値を送信する記述例を以下に示す。
----------------------------------------------------
var json = {
ID : 画像処理対象の画像ID,
Brightness : 20
};
----------------------------------------------------
S504では、CPU100は、ネイティブ層218において、スクリプト層217から取得したIDに基づいて、図4のS405で展開されたRGBデータを特定する。
【0077】
S505では、CPU100は、ネイティブ層218において、取得した補正パラメータに基づいて、RGBデータに対して明るさ補正を実行する。本実施形態では、スライドバー902に設定された20の値に基づいて、全ての画素のRGB値に20を加算する処理を行うとする。画像処理については、補正パラメータに他の画像処理情報を追加することで、実行する画像処理を増やすようにしても良い。例えば、モノクロ変換、セピア色変換、「ImageFix」、「RedeyeFix」、「SmartSkin」などを追加するようにしても良い。
【0078】
ここで、「ImageFix」とは、写真画像を、人物顔検出やシーン解析部を用いて自動で解析し、適切な明るさ・ホワイトバランス調整を行う機能(顔検出機能)である。また、「RedeyeFix」とは、画像中から自動で赤目画像を検出して補正する機能(赤目検出機能)である。また、「SmartSkin」とは、写真画像から人物の顔を検出して、その顔の肌領域を加工する機能である。なお、画像処理機能の種類は、これらに限定されるものではなく、用途や目的に応じて、様々な画像処理を利用可能である。さらに、画像処理において、OS層219が提供する機能が用いられても良い。
【0079】
S506では、CPU100は、ネイティブ層218において、S505で画像処理が実行されたRGBデータからS406と同様の処理でブロック画像群を作成する。ここで、S407でIDと関連付けたブロック画像群は、S506で作成したブロック画像群と置き換わり、S406で作成されたブロック画像群は破棄される。
【0080】
S507では、CPU100は、ネイティブ層218において、S505で画像処理の実行されたRGBデータから、UIで用いるための縮小RGBデータを作成する。S508では、CPU100は、ネイティブ層218において、S507で作成された縮小RGBデータをスクリプト層217でサポート可能な形式のデータに変換する。ここでは、S409と同様に、JPEG形式のデータに変換される。
【0081】
S509では、CPU100は、ネイティブ層218において、スクリプト層217にインジケータの停止を依頼する。これは、ネイティブ層218から、スクリプト層217で定義されているインジケータ停止の関数を呼び出すことで実現される。
【0082】
S510では、CPU100は、スクリプト層217において、インジケータを停止して、ディスプレイ104の表示からインジケータを消去する。一方、S511では、CPU100は、ネイティブ層218において、変換されたJPEG形式のデータをBASE64データに変換し、スクリプト層217へ送信する。
【0083】
S512では、CPU100は、スクリプト層217において、ネイティブ層218で変換されたBASE64データを受信し、それに従って、S411で描画した内容を変更する。例えば、CPU100は、スクリプト層217で指定されたBASE64データをOS層のインタプリタ214に送信する。そして、インタプリタ214がBASE64データのスクリプトを解釈し、既にある描画領域に画像データの描画結果を表示する。以上の処理により、補正パラメータに基づく画像処理が適用された画像データが表示される。
【0084】
本実施形態では、図9に示すようなスライドバー902の変化に応じて画像処理が開始されるが、その開始方法はこれに限定されるものではない。例えば、画面にプラスボタン、マイナスボタンが配置されており、そのボタンが押下されるごとに明るさが調整されるという構成であっても良い。他にも、画像の右半分がタッチされたら明るさを増す、左半分がタッチされたら暗くするなど、タッチイベントと連動させた処理によって実現されても良い。また、ユーザ操作で補正パラメータだけ変化させておいて、画像処理の実行指示があった時に、全ての画像処理が一括して行われるというように構成されても良い。
【0085】
[スタンプ追加]
図9のスタンプ追加ボタン903が押下され、ハートスタンプ908が選択されることにより、S33の処理が開始する。ここでは、図3のS33のスタンプ追加の処理について、図6を用いて説明する。以下の説明では、ユーザ操作によって、図9のアプリケーション画面900のスタンプ追加ボタン903が押下されてスタンプ一覧が表示された後、ハートスタンプ908が選択された場合を例として説明する。なお、スタンプ追加は、CPU100がスクリプト層217のプログラムを用いて実行する処理である。また、用いられるスタンプは、アプリケーションが予めリソースファイルとして保持しているとする。
【0086】
S601では、CPU100は、スクリプト層217において、スタンプとして用いられる画像データが保存されているパスを取得する。スタンプは予め決まったファイルを読み込む処理により取得されるので、例えば、ハートスタンプ908がタップされると、ハートスタンプが保存されているパスが返却される構成とする。
【0087】
S602では、CPU100は、スクリプト層217において、スタンプ描画用のオブジェクトを作成する。S603では、CPU100は、スクリプト層217において、作成したスタンプ描画用オブジェクトに、S601で取得したパスの情報をセットする。S602及びS603の処理は、S411で画像を追加する場合とほぼ同様の方法で実現可能である。S411との違いは、画像の情報元がBASE64の画像データではなく、スタンプのパスとなっている点である。また、スタンプに対してタッチイベントを付与するようにしても良い。タッチイベントを付与すると、スタンプがタップされたか、スワイプされたか等のタッチ操作に関する情報を取得可能になる。この情報を用いることでスタンプを移動したり、拡大縮小を行うなどの操作が可能となる。
【0088】
S604では、CPU100は、S603の内容をインタプリタ214で解釈させ、描画領域906にスタンプが追加される。
【0089】
[プリンタ設定]
図9に示したプリントボタン905が押下されることにより、図3のS34の処理が開始する。ここでは、図3のS34のプリンタ設定の詳細について、図7を用いて説明する。S701、S709〜S711は、CPU100がスクリプト層217のプログラムを用いて実行する処理である。また、S702、S704、S705、S707、S708、S712は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。また、S703とS706は、プリンタ112が実行する処理である。
【0090】
S701では、CPU100は、スクリプト層217において、ネイティブ層218へデバイス情報としてのプリンタ情報取得を依頼する。これは、プリンタ112と通信を行うための、スクリプト層217からの要求である。依頼の方法は、画像選択時と同様に、バインディング機能によりスクリプトからネイティブ固有のAPIを呼び出すことで行われる。ネイティブ層218には、スクリプト層217から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆるラッパが予め用意されている。例えば、GetPrinterInfoというネイティブ関数を用意しておき、スクリプト側からその関数を呼び出す。このようにして、ネイティブ層218は、スクリプト層217からの外部デバイスとの通信要求を取得する。
【0091】
通常、スクリプト層217からはセキュリティ上の制限により、外部デバイスと直接通信することはできない。そのため、上記のように、スクリプト層217から、一旦、ネイティブ層218へ外部デバイス情報の取得を依頼し、ネイティブ層218を介して外部デバイスとの通信が行われる。ネイティブ層218は、OS層219を介して、外部デバイス、例えばプリンタ112と通信する機能を備えている。
【0092】
S702では、ネイティブ層218で該関数が呼び出されると、CPU100は、ネイティブ層218において、プリンタの検出、いわゆるディスカバリを行う。例えば、同一無線LANルータで繋がっているプリンタを検出する。ここでは、通信可能なプリンタの検出を行うため、例えば、CPU100は、Bonjour(登録商標)などのプロトコルにより、ブロードキャストやマルチキャスト等の方法を用いてプリンタ112に対して通信を試みる。S703では、プリンタ112は、ネイティブ層218からの要求に応じて応答する。
【0093】
S704では、CPU100は、ネイティブ層218において、応答のあったプリンタ112のIPアドレスを取得して記憶する。さらに、S705では、CPU100は、応答のあったプリンタ112のIPアドレスへプリンタ情報の提供を要求する。応答のあったプリンタが複数の場合、CPU100は、全てのプリンタに対して情報の提供を要求する。そのために、CPU100は、ネイティブ層218で、プリンタ112の情報を取得するためのコマンドを生成する。そのコマンドとは、プリンタ112の動作を指定する命令であり、以下に、XMLで記述された一例を示す。
----------------------------------------------
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形式のテキストには記述されない。1行目は、ヘッダであり、XML形式で記述していることを表している。2行目のcmdは、コマンドの開始を意味する。xmlnsで名前空間が指定され、コマンドの解釈の定義が指定されている。尚、6行目の</cmd>は、コマンドの終了を示している。3行目は、以降に内容を記載する宣言であり、5行目は、その終了を示している。4行目には、要求する命令が記述されており、<operation>と</operation>の間に実際の命令文言が存在する。命令文言であるGetInformationは、外部デバイスであるプリンタの情報を取得するための命令である。例えば、プリンタが対応している用紙種類、サイズ、縁なし印刷機能の有無、印刷品位、等のケーパビリティ情報の要求である。
【0094】
尚、プリンタ情報取得コマンドの生成は、例えば、ROM101に予め記憶した固定のテキストを読み込むことで行われても良い。また、XML等のテキスト形式に限らず、バイナリ形式で記述し、それに従ったプロトコルで通信しても良い。また、生成したプリンタ情報取得コマンドは、HTTP等のプリンタ112が対応している通信プロトコルに従った形式で、外部デバイス通信部221を介してプリンタ112へ送信される。また、通信方法はこれに限定されるものではない。Wi−Fi(登録商標)ダイレクトやBluetooth(登録商標)、赤外線通信、電話回線、有線LAN、USBを用いた接続でも良く、その方法に従ったプロトコルで通信を行えば同様の効果を得ることができる。
【0095】
図7では、ネイティブ層218でコマンドを生成する構成としているが、スクリプト層217で、コマンドを生成する構成でも、同様の効果が得られる。その場合、スクリプト層217で、例えば、上記のXML形式の命令文を含むコマンドを作成し、ネイティブ層218へ渡す。それを受けて、ネイティブ層218は、通信プロトコルに従った形式でプリンタ112へそのコマンドを送信する。
【0096】
S706では、プリンタ112は、情報処理装置115からコマンドを受信すると、デバイス情報であるプリンタ情報をXML形式で通信プロトコルに従って、情報処理装置115へ送信する。以下に、プリンタ情報の一例を示す。
----------------------------------------------
01: <?xml version="1.0" encoding="utf-8" ?>
02: <cmd xmlns:trans="http://www.xxxx/yyyyy/">
03: <contents>
04: <device id=”Printer001” />
05: <memory receive= 7680000 />
06: <mode = 1>
07: <media>GlossyPaper</media>
08: <size>A4</size>
09: <quality>1</quality>
10: <border>no</border>
11: <dpi x=1200 y=1200 />
12: </mode>
13: <mode = 2>
〜中略〜
</mode>
<mode = 3>
〜中略〜
</mode>
〜中略〜
</contents>
</cmd>
----------------------------------------------
1行目は、ヘッダであり、XML形式で記述していることを表している。2行目のcmdは、コマンドの開始を意味する。xmlnsで名前空間が指定され、コマンドの解釈の定義が指定されている。尚、最下行の</cmd>は、コマンドの終了を示している。3行目は、以降に内容を記載する宣言であり、下の</contents>までその内容は継続する。4行目は、デバイスIDを示している。ここでは、プリンタ112の機種名が「Printer001」であることを表している。5行目については、本実施形態では用いられないが、他の実施形態で説明する。6行目以降は、プリンタ112が有する各モードについての記述である。<mode>から</mode>までで、1つのモードにおける情報が記述されている。6行目では、モードの番号が1である。以降の<media>は印刷用紙の種類、<size>は用紙サイズ、<quality>は印刷品位、<border>は縁あり/なしの情報をそれぞれ記述している。11行目の<dpi>は出力解像度を表しており、横方向が1200[dpi]、縦方向が1200[dpi]である。
【0097】
13行目以降は、他のモードであるモード2についての情報が記述されている。このように、プリンタ112の機種名と、そのプリンタ112が対応している全てのモードが記述されている。尚、プリンタ情報の記述方法は、これに限定されることはなく、タグ形式でないテキストや、バイナリ形式等の他の形式で実現されても良い。
【0098】
また、上記はプリンタ112の印刷機能の情報を受け渡しする例であるが、これに限定されるものではない。例えば、プリンタ112が処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を受け渡しするようにしても良い。画像処理の例としては、モノクロやセピア、彩度強調などの色変換、複数画像のレイアウト、ホワイトバランス補正、ノイズ除去、その他自動で写真を好ましい色や輝度に補正する処理などが挙げられる。
【0099】
S707では、CPU100は、ネイティブ層218において、プリンタ112からプリンタ情報を取得する。CPU100は、ネイティブ層218で、受信したプリンタ情報から、例えば、プリンタ112が有する全てのモードにおける印刷用紙の種類、サイズ、印刷品位、縁あり/なしの項目と項目数等を取得する。
【0100】
S708では、CPU100は、ネイティブ層218において、受信したプリンタ情報をスクリプト層217が解釈可能な形式に変換して、スクリプト層217へ送信する。つまり、CPU100は、プリンタ112との通信によって得られた情報をスクリプト層217へ渡す。これは、例えば、ネイティブ関数を設けておき、バインディング機能を用いることで行われる。また、受け取ったXML形式のプリンタ情報で送信したり、タグなしのテキスト形式に変更して送信する等の方法が用いられても良い。加えて、スクリプト層217から特定のネイティブ関数を呼び出す毎に、その戻り値として情報を取得するようにしても良い。また、ネイティブ関数に取得するモードなどの引数を渡し、その戻り値として情報を取得するようにしても良い。さらに、上述のJSON文字列を用いた受け渡しや、データ変換部207及び203を用いて、BASE64等の文字列で受け渡しを行うようにしても良い。
【0101】
S709では、CPU100は、スクリプト層217において、ネイティブ層218から受信したプリンタ情報に基づいて、プリンタ112で利用可能な機能を含む図10に示す設定画面を生成して表示する。ここで、接続可能なプリンタが複数ある場合には、プリンタ名を表示し、設定画面1001を表示する前にユーザに印刷するプリンタを選択させるための表示画面を生成する。そして、CPU100は、選択されたプリンタに対応するプリンタ情報を用いて、選択されたプリンタの設定画面を表示する。尚、プリンタの選択は、上記に限らず、最も早く応答してきたプリンタや、より機能が多いプリンタ、印刷ジョブが混雑していないプリンタを選択する等の方法によって行われても良い。
【0102】
このように、CPU100は、印刷用紙の種類・サイズ、印刷品位、縁あり/なし等のプリンタ112で利用可能な機能を選択させる設定画面1001を表示する。設定画面の生成方法の一例として、以下に、HTML記述のサンプルを示す。
------------------------------------------------
<!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[j] = new Option(GetMediaTypeT(j), GetMediaTypeV(j));
}
<!-- 印刷品位 -->
var QualityNum = GetQualityNum();
var q = document.getElementById("QualityList");
var k;
for(k=0; k< QualityNum; k++){
q.options[k] = new Option(GetQualityT(k), GetQualityV(k));
}
<!-- 縁あり/なし-->
var BorderNum = GetBorderNum();
var b = document.getElementById("BorderList");
var l;
for(l=0; l<BorderNum; l++){
b.options[l] = 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>
------------------------------------------------
上記のGetPaperSizeNum()、GetMediaTypeNum()、GetQualityNum()、GetBorderNum()は、ネイティブ関数であり、それぞれの項目数を取得する機能を備える。例えば、プリンタが対応している用紙サイズがA4、A5、B5、L判の4種類である場合、GetPaperSizeNum()は4を返す。
【0103】
GetPaperSizeT(n)、GetMediaTypeT(n)、GetQualityT(n)、GetBorderT(n)もネイティブ関数であり、引数nの値番目の文字列を返す。例えば、用紙サイズのテキストを返す関数のGetPaperSize(0)の返り値は「A4」、GetPaperSize(1)の返り値は「A5」となる。これらの値は、プリンタから受信するプリンタ情報からネイティブ関数が取り出す。
【0104】
GetPaperSizeV(n)、GetMediaTypeV(n)、GetQualityV(n)、GetBorderV(n)もネイティブ関数であり、引数nの値番目の文字列を返す。例えば、用紙種類のテキストを返す関数のGetMediaTypeT(n)の返り値は「光沢紙」のように、ユーザに表示する際の文言である。これに対して、GetMediaTypeV(0)の返り値は「GlossyPaper」とプリンタが解釈可能な表現となっている。
【0105】
これらの文言や表現は、プリンタ112から送られてきた情報と関連付けてネイティブが決定する。例えば、プリンタ112から送られてきた情報から取り出した値が「GlossyPaper」であった場合、表示するテキストは「光沢紙」と決定される。決定の方法として、例えば、ネイティブは、予め保持されたこれらの対応テーブルに従って、表示するテキストを決定する。
【0106】
尚、上記では、例として、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定を行う仕様であるが、これに限定されるものではない。他の例として、両面/片面、カラー/モノクロ、画像補正のオン/オフ等の他の設定項目でも良い。また、前述のように印刷機能のみではなく、プリンタ112が処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を表示するようにしても良い。
【0107】
S710では、CPU100は、スクリプト層217において、設定画面1001に対するユーザ操作に基づいて、プリンタ112に設定する機能を選択する。上記の例で示したHTMLを、レンダリング部216を用いてディスプレイ104に表示した例が、図10に示す設定画面1001である。ネイティブ層218を介してプリンタ情報を要求し、プリンタ情報から上記のネイティブ関数を用いて取得した情報に基づいて、設定画面1001が生成されている。尚、上記HTMLは、スクリプト層217、ネイティブ層218のいずれで生成されても良い。
【0108】
また、図10に示す用紙サイズ等の設定項目は、それぞれプルダウンメニューになっており、ユーザ操作によって項目を選択することができる。ここで、設定画面1001は、プルダウンメニューによって、用紙サイズの設定項目として選択可能な項目の一覧が表示されている状態を示しており、ユーザ操作によってA4やA5等の用紙サイズの選択を受け付けることができる。
【0109】
S711では、CPU100は、設定完了ボタン1002に対するユーザ操作を検知すると、スクリプト層217において、ユーザ操作によって選択された設定項目を含む設定情報を生成して、ネイティブ層218へ送信する。上記HTML記述の例にあるSetPrint()もバインディング機能を有するネイティブ関数である。上記の例では、SetPrint()を用いて、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定を文字列としてネイティブ層218へ渡している。
【0110】
S712では、CPU100は、ネイティブ層218において、バインディング機能によりスクリプト層217から設定情報を受信する。ネイティブ層218では、受信した設定情報に基づいて、プリンタ112の通信プロトコルに従って、プリントコマンドが生成される。そして、生成されたプリントコマンドは、通信制御部213を介してプリンタ112へ送信される。
【0111】
[レンダリング及びプリント]
図10に示した設定画面1001の設定完了ボタン1002が押下されることにより、図3のS35のレンダリング及びプリント処理が開始する。ここでは、図3のS35のレンダリング及びプリントの詳細について、図8を用いて説明する。本実施形態では、レンダリング及びプリントに関しては、アプリケーションがバックグランドに入っても処理を継続するように記述されていることとする。例えば、iOSであれば、beginBackgroundTaskWithExpirationHandlerなどの機能を利用することで、バックグランドでの処理継続が可能となる。
【0112】
S801では、CPU100は、スクリプト層217において、インジケータ起動依頼をOS層219に送信し、S802では、CPU100は、OS層219において、インジケータを表示する。
【0113】
S803では、CPU100は、スクリプト層217において、UI表示に用いていた印刷対象となる印刷コンテンツをネイティブ層218へ送信する。なお、S804、S805、S806など、スクリプト層217でも実行可能な処理は、スクリプト層217で実行されるようにしても良い。
【0114】
本実施形態では、印刷コンテンツは、写真1枚、スタンプ1つのSVG(Scalable Vector Graphics)を例として説明する。写真1枚、スタンプ1つのSVGコンテンツの記述例を以下に示す。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”640” height=”480” viewBox=”0 0 640 480”>
<image width=”640” height=”480” x=”0” y=”0”
xlink:href=”画像データ” id=”画像ID”></image>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
-------------------------------------------------------------------------------
以後、上記のSVG記述に基づいて、レンダリングについて説明する。但し、上記SVGは概略を説明するためのものであるので、設定の詳細な記述については省略している。
【0115】
S804では、CPU100は、ネイティブ層218において、印刷情報からプリンタ112へ送信する出力解像度を取得し、そのサイズへSVGを変更する。例えば、プリンタ112から取得した出力解像度のサイズが4000px×3000pxであれば、SVGは下記のように書き換えられる。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4000” height=”3000” viewBox=”0 0 640 480”>
<image width=”640” height=”480” x=”0” y=”0”
xlink:href=”画像データ” id=”imageID”></image>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
-------------------------------------------------------------------------------
上記では、SVGの横幅、縦幅がプリンタ112へ送信する画像サイズに合わせて変更されている。
【0116】
S805では、CPU100は、ネイティブ層218において、上記SVGの画像に関する記述を、ブロック画像群を用いた記述へと変更する。ここで、S407、S506において、RGBデータが上半分、下半分に二分割されたブロック画像群が作成され、「imageID_above.bmp」、「imageID_below.bmp」でアクセス可能な状態で保存されているものとする。SVGの画像に関する記述を上記の2つのブロック画像群を用いた記述へ変更したSVGは、以下となる。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
-------------------------------------------------------------------------------
上記では、画像に関する記述箇所が、ブロック画像群を用いた記述へ変更されている。ブロック画像群を用いた記述では、ファイル保存されたデータをパスで指定する方法が用いられても良いし、BASE64として画像データの実体を入れ込む方法が用いられても良い。
【0117】
S806では、CPU100は、ネイティブ層218において、SVGに対して特定のマーカー要素(以下、マーカーという)を付与する。本実施形態では、CPU100は、印刷コンテンツの描画を行う際、描画完了のタイミングを判断するために、その印刷コンテンツに対して、判断基準となる要素を特定する。本実施形態で特定されるマーカーは、赤帯であり、SVGコンテンツの右端に付与される。本実施形態では、一例として赤帯を用いているが、これに限られず、付与された情報が判別できるものであればどのようなものでも良い。
【0118】
赤帯を付与したSVGは以下となる。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”100%” fill=”red”/>
</svg>
-------------------------------------------------------------------------------
上記では、4000px×3000pxの領域を示すSVGが、4005px×3000pxの領域のSVGとされている。それらのサイズの差分となる領域は、赤帯が付与される領域となる。赤帯が付与されたSVG例を図13に示す。ここで、マーカーとなる赤帯は、描画を最後に実行させるために、SVGの最後の要素として追加される。赤帯については、S815で後述する。
【0119】
S807では、CPU100は、ネイティブ層218により、アプリケーションがフォアグランドで動作しているか、バックグランドで動作しているかを判定する(端末状態の判断)。モバイル端末においては、着信や、別のアプリケーションを立ち上げるなどの処理が入ると、実行中のアプリケーションは、バックグランドにまわされる。アプリケーションがバックグランドにまわったにも関わらず、負荷の高い処理を続けていると、他のアプリケーションに対して影響を及ぼしてしまう。本実施形態では、これを回避するために、CPU100は、アプリケーションの実行状況を判断し、アプリケーションがバックグランド状態である場合は、そのアプリケーションの処理負荷を低減させる。その動作については後述する。
【0120】
S808では、CPU100は、ネイティブ層218において、SVGコンテンツから特定の単位領域分をレンダリングするためのSVGを作成する。アプリケーションにおいて、4000px×3000pxのサイズを一括でレンダリングすることはメモリ的に負荷が高い。これを、例えば4000px×1500pxのレンダリング2回に分けることができれば、メモリ使用量を減らすことができる。この省メモリ化を目的としたのが、特定の単位領域分をレンダリングするためのSVGであり、以後、この特定の単位領域分をレンダリングするためのSVGをバンドSVGと呼ぶ。ここで、S808では、アプリケーションがフォアグランドで動作していると判定されたとして説明する。
【0121】
S808では、CPU100は、ネイティブ層218において、例えば以下のような記述により一つ目のバンドを作成する。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg x=”0” y=”0”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”3000” fill=”red” />
</svg>
</svg>
上記では、SVGに対しx座標、y座標を操作するための情報が付与されている。このx、y座標の値を変更することで、描画されるSVGの領域を変更することが可能となる。一つ目のバンドとしては、x、y座標ともに0である。
【0122】
S809では、CPU100は、ネイティブ層218により、OS層219に対してバンドサイズ用の画面生成を依頼する。本実施形態では、一つ目のバンドSVGから4005px×1500pxの領域を取得する。そのような構成により、4005px×3000pxを一括でレンダリングする場合に比べて、メモリの使用量を低減することができる。
【0123】
S810では、CPU100は、OS層219において、バンドSVG用の画面生成(4005px×1500px)を実行する。ここで生成される画面領域は、描画の実行領域となる。バンドSVGのサイズに関する情報は、バンドSVG自体ではなく、ネイティブ層218が保持している。また、生成する画面は、UIに表示されないオフスクリーン画面として生成される。
【0124】
S811では、CPU100は、ネイティブ層218において、一つ目のバンドSVGをS810で生成した画面に描画するようにOS層219に依頼する描画依頼の制御を行う。S812では、CPU100は、OS層219において、バンドSVGの情報をロードして描画を実行する。バンドSVGの情報がロードできたタイミングで、ネイティブ層218は、ロード完了の通知を受け取ることができる。この通知は、OSに標準的に備わっているものが用いられる。例えばiOSアプリ作成で利用するObjective−C言語であればwebViewDidFinishLoad関数である。また、Androidアプリを作成で利用するJava言語であれば、onPageFInished関数などが相当する。また、この通知は、S812における描画の完了に関わらず行われる。そのため、ネイティブ層218がこの通知を受け取ったタイミングにおいて、S811で依頼された描画が完了していないことが起こり得る。
【0125】
S813では、CPU100は、ネイティブ層218において、OS層219に対し画像情報を依頼する。ここでの画像情報とは、オフスクリーン画面に表示されているRGBAデータのことである。言い換えれば、画面キャプチャを実行するということである。
【0126】
S814では、CPU100は、OS層219において、画面キャプチャを実行し、取得したRGBAデータをネイティブ層217へ送信する。ここで、バンドSVGには、4005px×3000pxの情報が記述されている。しかしながら、実際のOS層219で確保された描画の実行領域は4005px×1500pxしかない。この場合、確保した実行領域からはみ出した部分に関しては描画が実行されない。そのため、4005px×1500pxの領域を確保することで、バンドSVGの上半分のみが描画され、結果として、ネイティブ層218は、上半分の情報のみを取得することが可能となる。この方法により、4005px×1500pxの領域に、y座標を変化させた下記のバンドSVGを読み込ませることで、SVGコンテンツの下半分のみを取得することが可能となる。
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg x=”0” y=”-1500”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”3000” fill=”red”/>
</svg>
</svg>
SVGで記述されたサイズより小さい実行領域にロードする例を図12(a)に示し、y座標をずらし、かつ、SVGで記述されたサイズより小さい実行領域にロードする例を図12(b)に示す。
【0127】
S815では、CPU100は、ネイティブ層218において、取得したRGBAデータの右端が赤色になっているかを確認する。S812でOS層219からロード完了の情報が送られてきているが、これはSVGデータ読み込み完了のタイミングであり、SVGの描画が完了したタイミングというわけではない。つまり、SVGデータ読み込み完了と描画完了との間にはタイムラグがあり、この間に画面キャプチャを実行してしまうと、所望の画像を得ることができない。そのため、本実施形態では、上記のように、ロードさせるSVGデータに、所定の要素として、描画が最後に行われる赤帯のマーカー要素を付与し、SVGコンテンツの描画が完了したか否かの判断基準としている。
【0128】
S816では、CPU100は、ネイティブ層218において、赤帯の有無を判定する。赤帯がないと判定された場合は、S813の処理から繰り返す。その場合、所定時間経過してからS813から繰り返すことにより、CPU100の負荷を低減するようにしても良い。赤帯があると判定された場合、CPU100は、S815において取得されたデータを出力対象(印刷対象)であると判定し、処理がS817へ進む。
【0129】
S817では、CPU100は、ネイティブ層218において、オフスクリーン画面のリセットをOS層219に依頼する。
【0130】
S818では、CPU100は、OS層219において、オフスクリーン画面の破棄を行う。この画面破棄には二つの理由がある。一つ目の理由は、次のバンドSVGをロードしたときに、前回の赤帯が残ったままとなり、OSからの通知に対応するデータとして誤ってキャプチャしてしまうことをなくすためである。しかしながら、画面破棄の代わりに、バンドSVG毎に付けるマーカーの色や形などを変化させてもよい。キャプチャを行うときに、キャプチャすべきデータに付与したマーカーの色や形と、キャプチャ対象としてメモリに展開されている画面内のマーカーの色や形とが一致するかネイティブ装置が比較する。その比較の結果、両者が一致した場合、ネイティブ層がキャプチャを行い、両者が一致していない場合、キャプチャを行わないようにしてもよい。
【0131】
S818における画面破棄の二つ目の理由は、バンドSVGのサイズを動的に変える可能性があるためである。バンドSVGサイズが途中で変更される例は後述する。
【0132】
なお、S818における画面破棄により、OS層により描画が行われ且つネイティブ層が描画データを取得するメモリ領域(例えばRAM102内の領域)において、データ削除が行われる。このとき、例えば該メモリ領域の全データが削除されてもよいし、または描画されたデータ全体が削除されてもよいし、または描画されたデータのうち、マーカーの部分が削除されてもよい。
【0133】
S819では、CPU100は、ネイティブ層218において、取得したRGBAデータをJPEGデータへ変換する。ここで、S814で送られてくるRGBAデータには印刷には不要な透過度(A)の情報と、赤帯の情報とが入っている。JPEG変換は、この二つの情報を印刷対象の画像から除くように実行される。
【0134】
S820では、CPU100は、ネイティブ層218において、プリンタ112へ送信するためのプリントコマンドをS819で生成したJPEGデータに付与する。ここで、JPEGデータに付与するプリントコマンドは、プリンタ設定の情報に基づいて生成される。プリントコマンドは、プリンタ112を制御するためのコマンドであり、送信する情報が何番目のバンドかを示す情報や、末尾のバンドかを判断するためのフッタ情報などを含む。
【0135】
S821では、CPU100は、ネイティブ層218において、OS層219に対して、プリントコマンドやJPEGデータを含む印刷情報の送信(プリンタへの出力)を依頼する。S822では、CPU100は、OS層219において、ネイティブ層218から受け取った印刷情報をプリンタ112へ送信する。印刷情報の送信の完了後、S824へ進む。S823では、プリンタ112は、OS層219から受け取った印刷情報に基づいて、印刷を実行する。
【0136】
S824では、CPU100は、ネイティブ層218において、レンダリングが終了したか否かを判定する。レンダリング終了の判定は、例えば、取得した画像の高さの合計が出力サイズの高さと一致しているか、終了判断のためのフラグが立っているかなどに基づいて行われる。上記は一例であり、その他の判断方法が用いられても良い。レンダリングが終了していないと判定された場合は、S807の処理から繰り返す。
【0137】
S824でレンダリング終了と判定された場合、S825へ進み、CPU100は、スクリプト層217において、インジケータの停止依頼をOS層219へ送信する。S826では、CPU100は、OS層219において、インジケータを停止し、その後、図8の処理を終了する。本例では、まだ4000px×3000pxのうち、4000px×1500pxのSVGまでしかレンダリングが終了していないので、S824から引き続きS807へ戻る。以下、その続きの処理について説明する。
【0138】
以下では、S807でアプリケーションがバックグランドで実行されていると判定されたとして説明する。一つ目のバンドSVGは4000px×1500pxのサイズで画像の取得を行った。ここで、バックグラウンド実行時には、前述のように、メモリ使用量をなるべく低減することが重要である。
【0139】
S808では、CPU100は、ネイティブ層218において、S807の結果を受け、S808以降の処理を行う。本実施形態では、バンドSVGのサイズを小さくすることでメモリ使用量を低減する。そのため、二つ目のバンドは、一例として4000px×750pxのサイズとする。その場合のバンドSVGの記述は以下となる。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg x=”0” y=”-1500”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”3000” fill=”red”/>
</svg>
</svg>
-------------------------------------------------------------------------------
先述のように、描画は、OS層219が確保したサイズの領域で実行されるので、バンドSVG自体には4005px×3000pxの情報が記述されていても良い。但し、既に取得した情報を再度取得することがないように、バンドSVGのy座標は適切に変更される必要がある。また、SVGの特定の領域を表示する方法として、例えば、SVGのviewBoxという属性を操作する方法などが用いられても良い。
【0140】
S809では、CPU100は、ネイティブ層218において、OS層219に対して情報を取得するサイズ(4005px×750px)のオフスクリーン画面を生成するよう依頼する。
【0141】
S810〜S823は、既に説明した処理と同じ処理が行われる。本例の場合、S824では、印刷コンテンツの全領域のレンダリングは終了していないことになるが、以降の処理は既に行った説明と同じであるので、その説明を省略する。
【0142】
以上のように、本実施形態によれば、ハイブリッドアプリケーションにおいて、レンダリング対象のSVGコンテンツの描画完了のタイミングが判断可能となる。
【0143】
[第2の実施形態]
第1の実施形態では、バンドSVGの描画完了次第、描画完了したバンドSVGのデータをプリンタ112へ送信する処理を繰り返していた。本実施形態では、全てのバンドSVGのレンダリングが完了したデータを一括でプリンタ112へ送信する。その結果、プリンタ112は印刷対象のデータを全て受け取ってから印刷を開始するので、印刷途中での情報処理装置115とのタイムアウト等による通信断による印刷中断を防ぐことができる。
【0144】
以下、図14を参照しながら、第1の実施形態と異なる点について説明する。S1401〜S1404は、S801〜S804と同じであるのでその説明を省略する。
【0145】
S1405では、CPU100は、ネイティブ層218において、バンドSVGを作成し、マーカーを付加する。本実施形態では、4000px×3000pxのSVGコンテンツについて、4000px×1500pxのバンドSVGを2つ作成するものとする。また、それら2つのバンドSVGは、赤帯のマーカーが付加されるバンドSVGと、青帯のマーカーが付加されるバンドSVGである。2つのバンドSVGの記述例を下記に示す。
-------------------------------------------------------------------------------
[一つ目のバンドSVG]
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg x=”0” y=”0”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<image xlink:href=”image.bmp” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”3000” fill=”red”/>
</svg>
</svg>
[二つ目のバンドSVG]
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4005” height=”3000” viewBox=”0 0 4005 3000”>
<svg x=”0” y=”-1500”>
<svg width=”4000” height=”3000” viewBox=”0 0 640 480”>
<image xlink:href=”image.bmp” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”4000” y=”0” width=”5” height=”3000” fill=”blue”/>
</svg>
</svg>
-------------------------------------------------------------------------------
複数のバンドSVGでマーカーが同じであると、一つ前のマーカーを間違えて取得し、それを描画完了と誤認識してしまう可能性がある。本実施形態では、上記のように異なるマーカーを付加することにより、そのような誤認識を防ぐことができる。
【0146】
S1406〜S1411は、S809〜S814と同じであるので、その説明を省略する。
【0147】
S1412では、CPU100は、ネイティブ層218において、マーカーを確認する。その際、現在のバンドSVGはどのようなマーカーがあるかをネイティブ層218が認識しておく必要があるので、ネイティブ層218において、赤帯もしくは青帯であるというマーカー情報をSVGの記述から読み取って別途管理しておく。
【0148】
S1413〜S1415は、S816〜S818と同じであるので、その説明を省略する。
【0149】
S1416で、CPU100は、ネイティブ層218において、取得したRGBAデータからJPEGデータを作成する。この操作はバンドSVGの数分繰り返され、1つのJPEGデータとして生成する。本例では、4000px×3000pxのJPEGデータが生成されることになり、それは、印刷対象のSVGコンテンツに相当する。
【0150】
S1417は、S824と同じであるのでその説明を省略する。S1417でレンダリングが終了したと判定された場合、S1418に進み、レンダリングが終了していないと判定された場合、S1405に戻る。S1418は、S820と同じであるのでその説明を省略する。
【0151】
4000px×3000pxのJPEGデータが生成されると、S1419では、CPU100は、ネイティブ層218において、プリンタ制御に必要なプリントコマンドがJPEGデータに付与される。本実施形態では、全てのデータを受け取ってから印刷を始めるモードであることを認識可能なプリントコマンドが追加される。また、全てのデータを受け取ってから印刷を始めるモードをプリントコマンドで指定しているが、方法はこれに限られない。例えば、プリンタ112本体を直接操作してそのようなモードを設定する方法や、ユーザ任意のデフォルト設定を予め登録しておくなどの方法でも良い。S1419では、CPU100は、ネイティブ層218において、OS層219に対し、印刷情報送信依頼とともに、プリントコマンドを含む印刷情報をOS層219へ送信する。S1420では、CPU100は、OS層219において、プリンタ112へ印刷情報を送信する。
【0152】
S1421では、プリンタ112は、印刷情報を取得する。S1422では、プリンタ112は、印刷するのに必要な情報を全て受け取ったか否かを判定する。S1422では、プリンタ112は、印刷するのに必要な情報を全て受け取ったと判定後、S1423において印刷を実行する。印刷するのに必要な情報を全て受け取っていないと判定された場合は、S1421の処理を繰り返す。印刷情報を全て受け取ったか否かの判定は、例えば、S1420での送信の際にデータ末尾に終了を意味する特定の情報を付与しておき、その情報に基づいて行うようにしても良い。プリンタ112は、所定時間の経過後においても、S1422で印刷するのに必要な情報を全て受け取っていないと判定した場合には、警告メッセージを情報処理装置115に送信するようにしても良い。
【0153】
S1424、S1425は、S825、S826と同じであるので、その説明を省略する。
【0154】
以上のように、本実施形態によれば、全てのバンドSVGのレンダリングが完了したデータを一括でプリンタ112へ送信する。その結果、プリンタ112は印刷対象のデータを全て受け取ってから印刷を開始するので、印刷途中での情報処理装置115とのタイムアウト等による通信断による印刷中断を防ぐことができる。
【0155】
[第3の実施形態]
第1の実施形態では、印刷コンテンツの印刷画像領域外にマーカーを付加していたが、本実施形態では、印刷コンテンツの印刷画像領域内にマーカーを付加する。プリンタ112では、縁なし印刷が行われる場合がある。縁なし印刷とは、印刷画像の周囲に余白がない状態での印刷のことである。縁がある場合と縁がない場合の例を図15に示す。ここで、プリンタ112は、例えば、図16に示すように、印刷画像を印刷対象の記録媒体上(用紙等)の印刷対象領域のサイズより大きなサイズに拡大し、印刷画像の一部(内部)を印刷対象とすることで縁なし印刷を行うことがある。このような縁なし印刷においては、図16に示すように、印刷コンテンツの印刷画像領域内で、印刷対象領域から溢れる部分へのマーカー配置が可能となる。例えば、S806で付与される赤帯をSVGコンテンツ内に追加する場合のSVGは下記となる。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”4000” height=”3000” viewBox=”0 0 640 480”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=”imageID_above.bmp”></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”imageID_below.bmp”></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”640” height=”480”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=” 0” y=”0” width=”5” height=”100%” fill=”red”/>
</svg>
-------------------------------------------------------------------------------
上記のSVGと、S806で赤帯を付与した場合のSVGの違いは二つある。一つは、SVGのサイズが4000px×3000pxであり、本実施形態によれば、マーカー分のサイズを低減することができる。一つは、赤帯がSVGコンテンツの印刷画像領域内に付与される点である。上記の例では、x座標0、y座標0の位置に横幅5px、縦幅3000px(縦幅100%指定)の赤帯を付与したものとなっている。しかしながら、マーカーの設定はこれに限られず、縁なし印刷を実行する際に、印刷対象領域からはみ出る領域であればどこに付与されても良い。また、マーカーを印刷コンテンツの印刷画像領域内に付与するか否かの判定は、S34におけるユーザ設定で、縁あり印刷が選択されたか、若しくは、縁なし印刷が選択されたかの情報に基づいて行われるようにしても良い。
【0156】
[第4の実施形態]
本実施形態では、第1〜第3の実施形態で説明したようなマーカー要素を用いるのではなく、OS層219からのデータ(RGBAデータ)のキャプチャを行う度に、前に取得したデータと内容を比較し、内容に変化がなければ、描画が完了していると判定する。以下、上記の実施形態と異なる点について説明する。
【0157】
S1701〜S1704は、S801〜S804と同じであるので、その説明を省略する。
【0158】
S1705では、CPU100は、ネイティブ層218において、OS層219に対し、S1704で変更された印刷サイズのオフスクリーン画面を生成するように依頼する。S1706では、CPU100は、OS層219において、S1705で指示されたサイズのオフスクリーン画面を生成する。
【0159】
S1707では、CPU100は、ネイティブ層218において、印刷サイズのSVGを、S1706で確保したオフスクリーン画面に描画するようOS層219へ依頼する。S1708では、CPU100は、OS層219において、ネイティブ層218からSVGをロードし、描画を実行する。ここで、ネイティブ層218は、OS層219がロードを完了したタイミングでロード完了情報を受け取る。
【0160】
S1709では、CPU100は、ネイティブ層218において、ロード完了情報を受け取った後、OS層219に対し、画面情報を依頼する。ここで、画面情報とは、S1706で生成したオフスクリーン画面に描画されているRGBAデータのことである。S1710では、CPU100は、OS層219において、ネイティブ層218へRGBAデータを送信する。
【0161】
S1711では、CPU100は、ネイティブ層218において、OS層219からRGBAデータを受信する。S1712では、CPU100は、ネイティブ層218において、比較画像の有無を判定する。比較画像とは、例えば、OS層219から前回取得したRGBAデータである。比較画像がないと判定された場合はS1713へ進み、比較画像があると判定された場合はS1714へ進む。
【0162】
S1713では、CPU100は、ネイティブ層218において、S1711で取得したRGBAデータを比較画像としてデータ保存部220へ保存する。その後、S1709から処理を繰り返す。つまり、1回目のOS層219からのデータ取得の場合、この保存処理が行われることとなる。ここで、S1713では、取得したRGBAデータをそのまま比較画像として保存するのではなく、縮小を行ったRGBAデータを保存するようにしてS1715での比較時間を短縮するようにしても良い。
【0163】
S1714では、CPU100は、ネイティブ層218において、S1711で受信したRGBAデータが、S1713で保存された比較画像のRGBAデータと一致しているか否かを判定する。一致していないと判定された場合は、S1711で受信したRGBAデータを比較画像として登録し(S1713)、S1709からの処理を繰り返す。一致していると判定された場合はS1716へ進む。
【0164】
S1716では、CPU100は、ネイティブ層218において、RAM102等の記憶領域に確保された一致回数を示す値をインクリメント(1を加算)する。なお、S1715で一致していないと判定された場合は、CPU100は、一致回数を示す値をリセットする。
【0165】
S1717で、CPU100は、ネイティブ層218において、一致回数を示す値が指定した回数に達したか否かを判定する。指定した回数に達していないと判定された場合はS1709からの処理を繰り返す。ここで、S1709へ戻る場合に、所定時間待機するなどの処理を行うようにしても良い。指定した回数に達したと判定された場合は、S1718に進む。S1718では、CPU100は、OS層219において、オフスクリーン画面の破棄を行う。
【0166】
S1719〜S1726は、S819〜S826と同じであるので、その説明を省略する。
【0167】
以上のように、本実施形態においては、OS層219からキャプチャしたデータを比較画像として保存した上で、再度、OS層219からキャプチャを行う。そして、再度キャプチャしたデータを比較画像と比較し、一致している場合には、描画が完了したと判断する。第1の実施形態では、描画完了の判断基準として赤帯のマーカーを特定し、それを印刷コンテンツの印刷画像領域外に付与していた。また、第2の実施形態では、データの単位領域ごとに、異なる色のマーカーを特定し、それらを印刷コンテンツの印刷画像領域外に付与していた。また、第3の実施形態では、描画完了の判断基準としての赤帯のマーカーを特定し、それを印刷コンテンツの印刷画像領域内で且つ印刷対象領域外に付与していた。そして、本実施形態では、描画完了の判断基準となる要素として、印刷コンテンツ自体を特定している。本実施形態では、そのような構成によって、上記各実施形態と同様に、レンダリング対象のSVGコンテンツの描画完了のタイミングが判断可能となる。
【0168】
[第5の実施形態]
本実施形態では、印刷コンテンツのうちで最後に描画される要素をマーカーとして用いる。本実施形態におけるSVGコンテンツは下記のものとする。
-------------------------------------------------------------------------------
<svg id=”SVG”
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”640” height=”480” viewBox=”0 0 640 480”>
<image width=”640” height=”480” x=”0” y=”0”>
xlink:href=”image.bmp”></image>
<rect x=”320” y=”240” width=”320” height=”240” fill=”green”/>
</svg>
-------------------------------------------------------------------------------
上記のSVGコンテンツは、図18に示すように画面全体に写真(画像領域)1801がある例を示す。図18に示すように、x座標320px、y座標240pxの位置に、横幅320px、縦幅240pxの緑色の四角形領域1802が配置されている。
【0169】
SVGを描画する際において、<rect>で記述される要素が最後に描画される。従って、本実施形態では、CPU100は、描画順番が最後の要素である<rect>を、描画完了の判断基準となる要素として特定する。図18の例では、最後に描画される要素は緑色の四角形領域である。この要素には、「どの位置に」、「どのサイズで」、「どの色で」という情報が含まれている。ネイティブ層218は、それらの情報に基づいて、キャプチャ後の画像において、該当する箇所を参照し、その位置に所定サイズの緑色の四角形領域が出現していれば、描画が完了したと判断する。
【0170】
ここで、図18の640px×480pxのコンテンツを、3200px×2400pxに縦横5倍にした場合を想定する。マーカーの役割を果たす緑色の四角形領域の位置とサイズが縦横5倍に移動するので、x座標1600px、y座標1200pxの位置を原点に、縦幅1600px、横幅1200pxの領域に緑色の四角形領域が出現するはずである。ネイティブ層218は、上記領域において緑色の四角形領域の有無を判定することで、印刷コンテンツの描画の完了を判断することができる。
【0171】
また、最後に描画される要素は四角形である必要はなく、「どの位置に」、「どのような情報をもって出現するか」が判定可能なものであれば、テキストでも画像でも他のどのような属性のオブジェクトであっても良い。
【0172】
画像が最後に描画される要素である場合のSVGコンテンツを下記に示す。
-------------------------------------------------------------------------------
<svg id=”SVG”
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”640” height=”480” viewBox=”0 0 640 480”>
<rect x=”0” y=”0” width=”640” height=”480” fill=”green”/>
<image width=”320” height=”240” x=”320” y=”240”
xlink:href=”image.bmp”></image>
</svg>
-------------------------------------------------------------------------------
上記SVGは、図18に示す画像領域と緑色の四角形領域の位置とサイズを入れ替えたものであり、その描画例を図19に示す。
【0173】
上記SVGを、3200px×2400pxに縦横5倍にした場合、画像領域は、x座標1600px、y座標1200pxの位置を原点に、1600px×1200pxで出現することが算出される。ここで、印刷コンテンツとして用いられる画像データはimage.bmpであると分かっているので、予めimage.bmpのRGBデータを取得し、画像領域1902を1600px×1200pxのRGBデータへ変倍しておく。キャプチャ後の画像データからx座標1600px、y座標1200pxを原点とした1600px×1200pxのRGBデータを抽出してその抽出したデータと、変倍されたRGBデータとを比較することで、印刷コンテンツの描画の完了を判定する。ここでの判定は、例えば、2つのRGBデータの各画素値の差分を取り、差分の総和が閾値以下であるか否かに基づいて行われても良い。
【0174】
以上のように、SVGにおける描画順番が最後になる要素をマーカーとして特定することによって、レンダリング対象のSVGコンテンツの描画完了のタイミングが判断可能となる。
【0175】
[その他の実施形態]
上述の実施形態はマーカーを検知することで、画像取得の判断をおこなうものであるが、逆にマーカーの消失を画像取得の判断に用いても良い。
【0176】
つまり、あるコンテンツが描画されるべき箇所の下にマーカーを配置しておくことで、マーカーが検出できなくなったタイミングが描画完了のタイミングと判断することも可能である。この場合、マーカーはSVGコンテンツの末尾に書く必要がなく、また、マーカー用に描画領域を広げるなどの処理が不要となる。
【0177】
例えば、下記のようなSVGの最後のコンテンツが画像(スタンプ)だった場合を考える。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”640” height=”480” viewBox=”0 0 640 480”>
<image width=”640” height=”480” x=”0” y=”0”
xlink:href=”画像データ” id=”画像ID”></image>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
-------------------------------------------------------------------------------
上記のSVGに対して青いマーカーを追加し、下記のようなSVGとする。青いマーカーは最後の要素の一個前に追加されている。
-------------------------------------------------------------------------------
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”640” height=”480” viewBox=”0 0 640 480”>
<image width=”640” height=”480” x=”0” y=”0”
xlink:href=”画像データ” id=”画像ID”></image>
<rect width=”200” height=”200” x=”300” height=”50” fill=”blue”/>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
-------------------------------------------------------------------------------
青いマーカーは最後のスタンプ画像と同じ位置、同じサイズで追加されている。このSVGを読み込ませた場合、最後のスタンプ画像が描画されるまで、その領域は青い、もしくは何も描画されていない状態となる。そして、SVGデータの描画が完了すると、最後のスタンプ画像が青いマーカーに上書きされる。これにより、マーカーを追加した領域に何か描画されてはいるが青色ではないという状態であれば、それが描画完了のタイミングだと判断することが可能である。上記は例として青いマーカーであるが、本来は画像を解析するなどして、スタンプ画像と被らない色をマーカーとして使うことが望ましい。
このように、マーカーの出現を検知するのではなく、マーカーの消失を検知するという方法でも描画完了を検知することが可能である。
【0178】
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【符号の説明】
【0179】
100 CPU: 101 ROM: 102 RAM: 115 情報処理装置: 217 スクリプト層: 218 ネイティブ層
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19