JP6786342B2 - 情報処理装置、情報処理方法およびプログラム - Google Patents

情報処理装置、情報処理方法およびプログラム Download PDF

Info

Publication number
JP6786342B2
JP6786342B2 JP2016204253A JP2016204253A JP6786342B2 JP 6786342 B2 JP6786342 B2 JP 6786342B2 JP 2016204253 A JP2016204253 A JP 2016204253A JP 2016204253 A JP2016204253 A JP 2016204253A JP 6786342 B2 JP6786342 B2 JP 6786342B2
Authority
JP
Japan
Prior art keywords
application
image
rendering
data
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016204253A
Other languages
English (en)
Other versions
JP2018067087A (ja
Inventor
梅田 清
清 梅田
鈴木 智博
智博 鈴木
尚紀 鷲見
尚紀 鷲見
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2016204253A priority Critical patent/JP6786342B2/ja
Priority to US15/722,250 priority patent/US10423347B2/en
Publication of JP2018067087A publication Critical patent/JP2018067087A/ja
Application granted granted Critical
Publication of JP6786342B2 publication Critical patent/JP6786342B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/00095Systems or arrangements for the transmission of the picture signal
    • H04N1/001Systems or arrangements for the transmission of the picture signal specially adapted for transmission via digital wireline networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Accessory Devices And Overall Control Thereof (AREA)
  • User Interface Of Digital Computer (AREA)
  • Image Processing (AREA)

Description

本発明は、情報処理装置、情報処理方法およびプログラムに関し、詳しくは、携帯型情報端末などの情報処理装置で動作するアプリケーションに関するものである。
この種のアプリケーションの例として印刷用アプリケーションは、特許文献1に記載されるようなラスタライズ(以下、「レンダリング」と言う)などの印刷用処理を行うものである。この印刷処理の一例は、次のようなものである。OSの描画エンジンのコマンドで記述されたコンテンツが、PDL(Page Discription Language)形式に変換されて、プリンタドライバに入力される。プリンタドライバでは、表示されたダイアログを介してユーザーが設定した用紙の種類やサイズ、印刷品位などに応じて、PDL形式のコンテンツを所定解像度の画素からなる画像に変換、生成する処理、すなわちレンダリング処理が行われる。そして、レンダリングによる画像に対して、色域変換、色分解などの色変換処理が行われ、さらにディザや誤差拡散等による量子化処理が行われた後、所定のプリンタ制御コマンドが付与された状態でプリンタに送信される。
ここで、上記の一連の印刷用処理において、レンダリングやその後の色変換は、1ページ分の画像を分割して得られる複数のバンドについて、バンドごとに行われる。また、プリンタへの送信は、バンドごとの上記レンダリングなどが終了するごとにバンド単位で送信する場合と1ページ分の処理が終了したときに送信する場合がある。これに対し、前者の場合、プリンタ側では、バンド単位の送信を受けると印刷を開始することから、ユーザーが印刷を指示してからプリンタが印刷を開始するまでの時間が短くなる。
特開2008−108006号公報
しかしながら、印刷用アプリケーションが動作している情報処理装置に、他の処理が起動されたときに印刷用アプリケーションがバックグランドに移行する場合がある。例えば、モバイルフォンなどの携帯型情報端末では、印刷用処理実行中に、他からのコールによって通話のため処理が起動されると印刷用アプリケーションがフォアグラウンドからバックグラウンドに移行する場合がある。そして、このバックグランドでは、これに移行したアプリケーションが利用可能なメモリ量が少ない状態となると、そのアプリケーションがメモリから消去される場合がある。特に、上述した印刷用の処理を実行している間は、比較的大量のメモリ量を必要とすることから、印刷アプリケーションがメモリから削除される可能性が高くなる。このように、印刷用の処理を実行中のアプリケーションがメモリから削除されると、例えば、プリンタとの通信が中断し、その結果、印刷中の用紙が強制排紙されそれまでの印刷が無駄になるなどの不都合を生じる。
上述したレンダリングなどの印刷用処理を実行しつつ、1ページ分の処理が終了した後にプリンタにデータを送信する場合は、レンダリングの対象となる画像は比較的高い解像度であることから、印刷用アプリケーションは多くのメモリを使用することになる。従って、この場合においても、アプリケーションがバックグラウンドに移行した後は、それがメモリから削除される可能性はより高いものとなる。そして、この場合は、プリンタに送信前ではあるが、ユーザーが一度指示した印刷ジョブが取り消されることになるため、同様に印刷処理上の不都合を生じる。
なお、印刷用アプリケーションをバックグランドに移行させるきっかけとなる処理は、上述した通話に限ったことではなく、例えば、ビデオ通話アプリケーションの自動起動等も、印刷アプリケーションをバックグラウンドに移行させるトリガーになり得る。
本発明は、上述した問題を解決するものであり、情報処理装置で動作するアプリーエションがバックグランドに移行してもメモリから消去される可能性を低減させることが可能な情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
上記目的を達成するために本発明は、情報処理装置上で動作するアプリケーションのプログラムであって、レンダリングのための処理を実行する実行工程と、前記アプリケーションフォアグランドからバックグランドへ移行に基づいて、当該アプリケーションが前記実行工程の前記処理を行うことにより使用されるメモリを、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減工程と、を有し、前記低減工程では、前記実行工程の前記処理に基づくレンダリングにより生成される画像のデータ量を低減することによって、前記使用されるメモリ量を少なくすることを特徴とする。
以上の構成によれば、情報処理装置で動作するアプリーエションがバックグランドに移行してもメモリから消去される可能性を低減させることが可能となる。
本発明の情報処理装置の一実施形態である携帯型情報端末の構成を示すブロック図である。 図1に示した情報処理装置で動作するソフトウェアの構成を示すブロック図である。 本実施形態に係る情報処理装置における、ユーザー操作を含む処理の一例を示すフローチャートである。 図3のステップS31の写真画像選択の詳細を示すフローチャートである。 図3のステップS32の画像処理の詳細を示すフローチャートである。 図3のステップS3のスタンプ追加の詳細を示すフローチャートである。 図3のステップS34のプリンタ設定の詳細を示すフローチャートである。 図3のステップS35のレンダリングおよびプリントの詳細を示すフローチャートである。 実施形態の情報処理装置におけるアプリケーション画面を模式的に示す図である。 実施形態の情報処理装置における、印刷のための情報を設定するための設定画面を示す図である。 画像を分割したブロック画像のタイル状および帯状の2つの形態を示す図である。 (a)および(b)はそれぞれ、SVG記述より小さい画面でロードする例と、y座標をずらし、かつ、SVG記述より小さい画面でロードする例を説明する図である。 本発明の第3実施形態に係るレンダリングおよびプリントの詳細を示すフローチャートである。
以下、図面を参照して本発明の実施形態を詳細に説明する。
(第1実施形態)
以下では、本発明の印刷用アプリケーションの一実施形態として携帯型情報端末上で動作する写真印刷アプリケーションについて、ユーザーが選択した画像に対して、種々の画像処理を施した後に、それによって得られる印刷用コンテンツを印刷するまでの手順について説明する。なお、本実施形態では該写真印刷アプリケーションとして、Web技術とネイティブ技術を融合した、いわゆるハイブリッドアプリケーションの形態を説明する。
<ハードウェア構成の説明>
図1は、主に、本発明の情報処理装置の一実施形態である、スマートフォンや携帯電話等の携帯型情報端末の構成を示すブロック図である。同図において、CPU(中央演算装置/プロセッサ)100は、以下で説明する各種処理をそれぞれの処理に対応するプログラムに従って実行する。なお、図示の例ではCPU100は1つが示されているが、複数のCPUあるいはCPUコアによって構成されていてもよい。この場合、マルチプロセッサの構成とすることができる。ROM101は、CPU100によって実行されるプログラムを記憶している。RAM102は、CPU100によるプログラム実行の際に、各種情報を一時的に記憶するためのメモリである。
2次記憶装置103は、ハードディスクやフラッシュメモリ等からなり、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラムを記憶するための記憶媒体である。ディスプレイ104は、各種処理を実現するための操作を受け付けるためのUI(ユーザインタフェース)や、実行された処理による処理結果等の各種情報を表示する。ディスプレイ104は、タッチセンサ105を備えることもできる。ディスプレイ104に表示されるUIとして図9にて後述されるアプリケーション画面がある。内部撮像デバイス110による撮像によって得られた画像データは、所定の画像処理を経た後、2次記憶装置103に保存される。また、画像データは、外部I/F(インタフェース)108を介して接続された外部撮像デバイス111から読み込むこともできる。
情報処理装置115は、外部I/F(インタフェース)109を備えることにより、インターネット等のネットワーク113を介して通信を行うことができる。また、情報処理装置115は、この通信I/F109を介して、ネットワーク113に接続されたサーバ114から画像データを取得することもできる。加速度センサ106は、情報処理装置115自身の位置姿勢に関する加速度情報を取得することができる。
情報処理装置115は、外部I/F107を介し、プリンタ112と接続されており、画像データ等からなる印刷用データを出力することができる。また、情報処理装置115は、通信I/F109を介してネットワーク113に接続されており、これにより、プリンタ112との間で必要なデータを送受信することができる。
外部I/F107、108、109は、有線通信と無線通信のうち、少なくともいずれかの通信形態を有するインタフェースであり、利用する通信形態に応じて外部デバイス(プリンタ112あるいはサーバ114)との通信を行う。有線通信には、例えば、USB、イーサネット(登録商標)等があり、無線通信には、無線LAN、NFC、Bluetooth(登録商標)、赤外線通信等がある。また、無線通信として、無線LANを用いる場合には、装置同士が直接接続する形態もあれば、無線LANルータ等の中継装置を介して接続する形態もある。また、外部I/F107〜109は、図に示す例では別々に構成されているが、一体となって構成されていてもよい。
情報処理装置115の動作に必要な電源は、バッテリ117から供給される。情報処理装置115が備える各種構成要素は、制御バス/データバス116を介して相互に接続され、CPU100は、この制御バス/データバス116を介して、各種構成要素を制御する。
本実施形態では、情報処理装置115が、情報処理装置115が備える制御部(CPU100)によって実行されるプログラム等のソフトウェアの実行場所(ソフトウェア実行環境)となる。
<ソフトウェアの構成>
図2は、図1に示した情報処理装置115で動作するソフトウェアの構成を示すブロック図である。情報処理装置115は、スクリプト層217、ネイティブ層218、およびOS層219それぞれに対応するプログラムを実行する。これら層の処理は、CPU100がROM101あるいは2次記憶装置103に記憶されている対応するプログラムを読み出し実行することにより実現される。
スクリプト層217は、HTML5やCSS3、JavaScript(登録商標)等のウェブ標準言語を使って、テキストデータで命令セット(コンテンツの描画や画像の表示、動画の再生等)が記述されているプログラム層である。スクリプト層217では、アプリケーション実行環境上で、そのアプリケーション実行環境に存在するプロセッサ(例えば、CPU100)を用いて、テキストデータの各種命令セットを翻訳して実行することになる。その実行形態としては、実行の度に命令文を一行ずつ動的に翻訳する場合や、アプリケーションを起動したときに翻訳する場合、アプリケーションを情報処理装置115にインストールしたときに翻訳する場合等が考えられる。以下では、スクリプト層217で処理することや内容をスクリプトと言う。スクリプトの命令を情報処理装置115内で翻訳する形態の例として、ネイティブ層218やOS層219が備えるインタプリタの機能を使用することが挙げられる。なお、本実施形態では、アプリケーションのUIの大部分が、スクリプト層217で記述されていることを想定している。
ネイティブ層218は、アプリケーション実行環境以外で予め翻訳(コンパイル)された命令セットが記述されているプログラム層である。形態としては、CもしくはC++といった高水準言語で記述されたコードが、予めアプリケーションの開発者のPCやサーバ上でコンパイルされ、CPU100が解釈可能な命令の集合体となっている。以下、ネイティブ層218で処理することや内容、後述するOS層219の機能をネイティブ層218から呼び出すこと、を含め、ネイティブと言う。なお、ネイティブ層218の別の実装系として、Java(登録商標)が挙げられる。Javaは、C/C++と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳される。翻訳された中間コードは、各OSが備えるJava仮想環境上で動作する。本実施形態は、このようなプログラム形態も、ネイティブ層218の一種に含めることができる。
OS層219は、情報処理装置115のオペレーティングシステム(Operating System:OS)に対応する。OS層219は、ハードウェア機能の使用をアプリケーションに提供する役割および固有の機能を有する。OS層219は、APIを備え、スクリプト層217やネイティブ層218から機能を使用することができる。
また、本実施形態では、スクリプト層217からネイティブ層218の呼び出しを可能にすることをバインディングまたはバインドと称する。各種ネイティブの機能は、APIを備え、そのAPIをスクリプトが呼び出すことでネイティブの機能を使用することができる。このようなバインディング機能は、通常、各種OSが標準的に備えている機能である。また、本実施形態では、スクリプト層217とネイティブ層218を含むアプリケーションのことをハイブリッドアプリケーションと称する。
以上説明したソフトウェア構成の各層における処理ないし機能ついて説明する。
スクリプト層217の画像取得部201は、ネイティブ層218に対し画像データの取得を依頼する。画像取得部201による依頼は、例えば、画像のパスを指定する方法や、ダイアログ表示を促す方法等が挙げられる。ネイティブ層218の画像読込部202は、画像データ群215から画像データを取得する。画像データ群215からの画像データの取得方法は、スクリプト層217の画像取得部201の依頼に依存する。依頼方法は、UI上に提供されているダイアログボックスから選択する、画像のパスから直接画像を選択する等が挙げられる。画像読み込み時は画像に対して一意なIDが割り当てられる。スクリプト層217から、ネイディブ層218の画像を指定する場合は上記IDを利用すればよい。
ネイティブ層218のデータ変換部203は、ネイティブ層218のデータ(例:バイナリ形式の画像データやパラメータ)をスクリプト層217で利用できる形式のデータ(例:テキスト形式(BASE64)の画像データやJSONなど)に変換する。一方で、データ変換部203は、スクリプト層217から送られてきたデータ(例:テキスト形式(BASE64)の画像データやJSONなど)をネイティブ層218で利用できる形式のデータ(例:バイナリ形式の画像データやパラメータ)にする変換を行う。スクリプト層217のデータ変換部207は、スクリプト層217のデータ(例:テキスト形式の処理パラメータ)をネイティブ層218で利用できる形式のデータ(例:テキスト形式(JSON形式)の処理パラメータ)に変換する。
ネイティブ層218のデータ保持部204は、画像読込部202で読み込んだ画像データ、画像処理部208で画像処理が施された画像データ、分割した画像群をオンメモリで保持する。保持される画像データは、例えば、RGB画像データに展開されており、直ちに画像処理を実行できる形式になっている。
スクリプト層217のコンテンツ描画部205は、印刷のためのコンテンツを、ウェブ標準言語を用いて記述する。この記述には、コンテンツ操作部210で操作されたスクリプトも反映される。コンテンツ描画部205で記述されたコンテンツのスクリプトは、OS層219のインタプリタ214で解釈され、ディスプレイ104に表示される。
スクリプト層217の画像処理制御部206は、画像処理に用いる補正パラメータと、処理対象となる画像を決定し、画像処理部208に画像処理を依頼する。補正パラメータはデータ変換部207でネイティブ層へ送信できる形式へ変換された後、処理対象となる画像のIDと共にネイティブ層へ送信される。ネイティブ層の画像処理部208は、画像処理制御部206で指定された画像に対し画像処理を施す。その際、どのような画像処理を施すかは、画像処理制御部206で設定されたパラメータにより決定される。画像の指定については、先述のIDを利用する方法に加え、スクリプト層から画像のパスを受け取る、画像データごと受け取る方法などが考えられる。
OS層219のタッチイベント209は、ディスプレイ104のタッチに関する情報を取得する。タッチに関する情報とは、ディスプレイ104のタッチ検知、タッチされた位置情報等が挙げられる。取得したタッチに関する情報は、ネイティブ層218経由でスクリプト層217のコンテンツ操作部210に送信される。スクリプト層217のコンテンツ操作部210は、例えば、画像取得依頼の結果としてネイティブ層218から画像データが送信された際、その画像データを反映すべく、スクリプト命令を変更する。
スクリプト層217のプリンタ制御部211は、プリンタ検知の依頼、プリンタ設定画面の表示、プリント情報の生成と送信を制御する。プリンタ設定画面では、用紙のサイズ、用紙の種類、カラー・モノクロ等のプリンタ設定がなされる。ここで設定された項目を基に、プリンタデータ生成部212でプリンタデータが生成される。ネイティブ層218のプリンタデータ生成部212は、プリンタ制御部211からの依頼に基づき、プリンタ通信に必要なデータ、コマンドを生成する。プリンタ通信に必要なデータとは、通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャン等、プリンタの動作を決定するためのデータである。よって、プリンタデータ生成部212は、プリンタの動作を決定するためのコマンドを含むプリンタデータを生成する。
ネイティブ層218の外部デバイス通信部221は、プリンタなど、情報処理装置115と接続している外部デバイスとの通信を行うためのインタフェース(IF)である。ここでは、プリンタデータ生成部212から受け取ったデータを送信したり、プリンタ112からの情報を受信したりする。本実施形態では、OS層219のプリンタ通信213を介して通信するが、外部デバイス通信部221が直接、外部IF107へデータを送信してもよい。OS層219のプリンタ通信213が、外部デバイスが用いる通信プロトコルに対応していればその機能を使えば良く、プリンタ通信213が外部デバイスが用いる通信プロトコルに対応していなければ外部デバイス通信部221がその通信プロトコルに従って通信する。
OS層219のインタプリタ214は、スクリプト層217で生成されたウェブ標準言語で記述された命令を解釈・実行する。例えば、画像の描画等の命令は、インタプリタ214を通して実行され、ディスプレイ104に表示される。
画像データ群215は、画像データを保持している領域である。データ保存部220は、必要に応じて、データ保持部204が保持する画像データを画像データ群215に保存させるために機能する。
スクリプト層217のレンダリング依頼部は、ネイティブ層218のレンダリング部216にレンダリングの依頼をする。その際、コンテンツ描画部205で記述されている内容をデータ変換部207で変換してからレンダリング部216に受け渡す。レンダリング部216に受け渡す前に必要な処理がある場合は、コンテンツ操作部210を用いて、コンテンツ記述を編集するようにしてもよい。また、コンテンツ記述を直接編集するとUIに影響がある場合は、上述の操作はコンテンツ記述の複製を作成して、それを利用する。レンダリング部216は、レンダリング依頼部222から受け取った内容に応じて、プリンタへ送信するため画像データを生成するためのレンダリングを行う。このレンダリングには、例えば、スクリプト層217でプリンタ112への出力解像度で画像を生成することが含まれる。また、ネイティブ層218におけるレンダリング結果、および生成途中の画像はディスプレイ104に表示されない。
OS層219の状態検知部は、利用しているデバイスの状態を検知する。例えば、アプケーションを利用している状態で、着信などの他の通知があった場合、そのイベントの発生や状態変化をネイティブ層218へ送信する。
<ユーザー操作に伴う処理>
図3は、本実施形態に係る情報処理装置115における、ユーザー操作を含む処理の一例を示すフローチャートであり、写真画像をプリンタ112によって印刷するための処理を示している。図3に示す各ステップの処理は、情報処理装置115のCPU100が、ROM101あるいは2次記憶装置103に記憶されているプログラムを実行することにより実現される。また、図3に示す各ステップは、本実施形態のUIの1つである、アプリケーション画面に対するユーザーの操作に従って遷移する。
図9は、本実施形態の情報処理装置115におけるアプリケーション画面900を模式的に示す図である。このアプリケーション画面は、図1に示したディスプレイ104によって表示される。そして、このアプリケーション画面900は、スクリプト層217によって生成され、また、アプリケーション画面900の操作は、例えば、タッチセンサ105(図1)によって検知される。
図3において、先ず、ステップS31で、CPU100は、図9に示すアプリケーション画面900の写真画像選択ボタン901に対するユーザーの操作(タッチ操作入力も含む。以下、同様)を検知すると、その操作に応じて、ユーザーが画像を選択するための処理および表示を行う。ユーザーが画像を選択すると、CPU100は、ネイティブ層で所定の処理を実行した後、アプリケーション画面900の描画領域906に選択された画像を表示する。本ステップの詳細は図4にて後述する。
ステップS32おいて、CPU100は、表示されている画像の輝度を調整するための、図9に示すスライドバー902に対するユーザー操作を検知すると、そのユーザー操作に応じて、画像処理時に利用する補正パラメータを設定する。そして、実行指示のもと、CPU100は、設定した補正パラメータに従って、表示されている画像に画像処理を施し所定の処理を行った後、その処理内容及び処理結果を描画領域906に表示する。本ステップの詳細は図5にて後述する。
ステップS33おいて、CPU100は、図9に示すスタンプ追加ボタン903に対するユーザー操作を検知すると、スタンプを表示する。そして、そのスタンプ一覧に対するユーザー操作によってスタンプの選択を検知すると、CPU100は、描画領域906に、選択されたスタンプを追加、表示する。さらに、スタンプにタッチイベント(タップ、スワイプ)検知機能を付与することにより、スタンプの拡大、縮小、移動などを可能とする。この検知機能は、Web標準言語に標準として備えられているものであり、addEventListener関数がそれに該当する。スタンプがタッチされた時に反応する例を下記に示す。
var stamp = 対象のスタンプ;
stamp.addEventListener(“touchstart”, function(e){
//スタンプがタッチされた時に行いたい処理をここに記述
}, false);
ステップS33の詳細は図6にて後述する。
次に、ステップS34で、CPU100は、図9に示すプリントボタン905に対するユーザー操作を検知すると、プリント(以下、印刷とも言う)に必要な情報を設定するための設定画面1001(図10)を表示する。ここで、プリントに必要な情報とは、例えば、図10の設定画面1001に示されるように、用紙サイズ、用紙の種類、印刷面(両面/片面)、カラー(モノクロ/カラー)の設定項目がある。その他、印刷品位、縁有り/無し等、使用するプリンタが有する機能に応じて、設定可能な設定項目が構成、表示される。本ステップの詳細は図7にて後述する。
さらにステップS35で、CPU100は、図10に示す設定画面1001の設定完了ボタン1002に対するユーザ操作を検知すると、描画領域906に表示されている画像を、プリンタに出力するためのデータに変換するためのレンダリングを実行する。そして、レンダリングによってデータを作成した後、CPU100は、作成された印刷用データを、プリンタ制御のコマンドと共にプリンタ112に送信する。以上の処理により、ユーザにより選択された画像がプリンタ112で印刷される。
なお、図3に示す処理は一例であり、処理内容はこれに限定されず、ステップ群の処理順序もこれに限定されるものではない。また、この実施形態において、プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層をスクリプト層217、プロセッサ以外で予め翻訳された命令セットを含む第2のプログラム層をネイティブ層218と定義する。そして、これらの第1のプログラム層と第2のプログラム層とを包含するプログラムがハイブリッドアプリケーションを実現する。
<写真画像選択とその画像処理>
次に、図3を参照して以上説明した、本実施形態の情報処理装置において実行される写真画像選択とそれに伴う処理の詳細を図4〜図8を参照して説明する。
図4は、図3のステップS31の写真画像選択の詳細を示すフローチャートである。なお、ステップS401、S411は、CPU100がスクリプト層217のプログラムを用いて実行する処理であり、ステップS402〜S410は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。
先ず、ステップS401で、CPU100は、写真画像選択ボタン901に対するユーザー操作に応じて画像選択をネイティブ層218に依頼する。その依頼では、バインディング機能によりスクリプト層217からネイティブ層218に固有の画像選択APIを直接呼び出す。なお、直接ネイティブ層固有の画像選択APIを呼び出せない構成である場合は、ネイティブ層218にスクリプト層217から直接呼び出せる関数を用意し、その関数内にネイティブ層に固有の画像選択APIを呼び出す関数を記述しておけばよい。これは、ラッパを予め用意しておく方法である。これとは別に、画像選択UIを独自に実装するという構成を取ることもできる。そして、ステップS402で、CPU100は、画像選択UIをディスプレイ104に表示する。これにより、表示された画像選択UIに対するユーザー操作によって、1つの画像が選択される。なお、本実施形態ではデバイス内の画像フォルダから画像を1つ選択する形態であるが、本発明の適用はそれに限定されるものではない。例えば、インターネット上の画像や、着脱可能な記憶媒体内の画像を選択してもよいし、デバイスのカメラ機能を利用し撮像した画像を選択することもできる。次に、ステップS403では、ネイティブ層218は、一意なIDを生成する。このIDは、数値、文字列等、ネイティブ層218からスクリプト層217へ送信できる形式であればどのような形態であってもよい。なお、IDの生成はネイティブ層218による形態に限ったことでなく、スクリプト層217で生成してネイティブ層218に送る方法でもよい。ステップS404で、CPU100は、選択された画像を取得する。例えば、選択した画像が画像ファイルの形態である場合は、CPU100は、ファイルを開き、その内容を読み取る。
次に、ステップS405で、CPU100は、取得した画像をRGB空間に展開する。ここでは、RGBデータをネイティブ層218に保持しているが、これに限定されるものではない。例えば、JPEG(Joint Photography Expert Group)、PNG(Portable Network Graphics)、RGBA形式などで保持することもできる。RGBA形式とは、画像データのRGB(赤、緑、青)成分に、透明度としてAを組み合わせたものである。ステップS406で、CPU100は、展開したRGBデータを分割し、小領域毎のRGBデータを作成する。小領域ごとのRGBデータを「ブロック画像」と称する。ここで、ブロック画像は、タイル状と帯状のいずれもよい。タイル状とは、ブロック画像の横幅および縦幅の両方とも分割元データの横幅および縦幅に満たない場合を言う。これに対して、帯状とは、ブロック画像の横幅および縦幅のいずれか一方のみが、分割元データに対して満たない場合を言う。これらの例を図11に示す。本実施形態では、ブロック画像は、本来の画像を帯状に二分割する方法を採用するものとする。分割の個数は、特定の個数を指定する方法や、一つのブロック画像が特定の画素数未満になるようするなど、どのような方法でもよい。また、ブロック画像のサイズは一律同じである必要はない。例えば、3000×4000画素の画像を3分割する際、3000×1500画素、3000×1500画素、3000×1000画素のような分割であってもよい。次のステップS407で、CPU100は、展開したRGBデータと生成したブロック画像群を、ステップS403で生成したIDと関連付けてデータ保持部204に保存する。ここで、関連付けする方法は、例えば、IDとRGBデータ、ブロック画像群を有するオブジェクトを作成することにより、IDによりRGBデータとブロック画像群を特定を可能にするという方法がある。IDの関連付け方法は、これに限らず、IDからRGB画像、ブロック画像群を特定できれば何でもよい。本実施形態では、ブロック画像群を、スクリプト層217が利用しやすいDIB(Device Independent Bitmap)フォーマットに変換し、オンメモリで保存する。この場合、IDとの関連付けは「block1_ID.bmp」,「block2_ID.bmp」のように、決められた名前にIDを追記することで実現することができる。ここで、画像フォーマットはDIB以外も利用可能であることはもちろんである。
次にステップS408で、CPU100は、RGBデータからUIで利用するための縮小RGBデータを作成する。縮小はOSの機能を利用してもよいし、独自に備える構成によって行ってもよい。スクリプトは、画像が大きい場合は、その画像をUIの大きさ、ディスプレイの解像度に合わせて縮小処理を行うことになる。ここで、UIに対して過多な画素数の画像をスクリプトで扱うと、CPUに処理負荷が掛かり、かつ、大容量のメモリが必要となるため無駄が生じる。従って、本実施形態では、縮小処理を実行し、無駄を回避する。縮小処理の目安としては、例えば、ディスプレイの表示サイズやUIで画像を表示する箇所のサイズを上限にし、それを越える画素数を持つ画像に対して縮小処理を行うよう制御するようにすればよい。そして、ステップS409で、CPU100は、ステップS408で作成した縮小RGBの画像データをスクリプト層217で利用可能な形式(サポート可能な形式)の画像データに変換する。本実施形態では、変換するデータ形式をJPEG(Joint Photography Expert Group)とする。次にステップS410で、CPU100は、JPEG形式のデータをBASE64データに変換し、スクリプト層217へ送信する。これは、ネイティブ層で扱うJPEGデータは、スクリプト層217では直接利用できない形式のためである。BASE64とは、バイナリデータを文字列データとして扱うためのエンコード方式であり、JavaScriptで利用可能なデータ形式となっている。
スクリプト層217で画像を扱う方法として、ネイティブ層でJPEGを一旦ファイルに保存した後、その保存パスを利用する形態もあるが、本実施形態では、BASE64データを利用する形態を用いる。すなわち、ステップS411で、CPU100は、ネイティブ層218で変換されたBASE64データを受信し、描画領域に画像を描画する。具体的には、CPU100は、スクリプト層で指定されたBASE64データをOS層のインタプリタ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に追加することができる。
<画像処理>
図5は、図3のステップS32の画像処理の詳細を示すフローチャートである。なお、ステップS501〜S503、S510、およびS512は、CPU100がスクリプト層217のプログラムを用いて実行する処理であり、ステップS504〜S507、S509は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。ここでは、ユーザーが操作したスライドバー902の設定値に基づき、画像の明るさを変更する画像処理を実行する例について説明する。
ステップS501で、補正パラメータを設定する。補正パラメータはスライドバー902で設定された値に基づいて設定する。ステップS502では、CPU100は、インジケータを起動し、ディスプレイ104に表示する。ここで、インジケータは、ユーザーに、処理中である旨を伝える表示であり、プログレスバーや、時計マーク、図形の回転等が用いられる。インジケータは、実行に比較的時間を要する処理を行う場合に表示するのが一般的である。また、本実施形態では、スクリプト層217でインジケータの起動と停止を行っているが、ネイティブ層218でインジケータを利用することも可能である。ステップS503では、CPU100は、ステップS501にて設定した補正パラメータと、画像処理を実行する画像のID(ステップS403で生成した画像のID)を、JSON(JavaScript Object Notation)形式としてネイティブ層218へ送信する。JSONは、JavaScriptで利用できるデータ記述方法であり、ネイティブ層218と送受信可能なデータフォーマットの一つである。例えば、IDと輝度補正の値を送る例として下記のような記述となる。
var json = {
ID : 画像処理対象の画像ID,
Brightness : 20
};
ステップS504では、CPU100は、スクリプト層217から取得したIDを基に、図4のステップS405で展開されたRGB画像を特定する。次に、ステップS505で、CPU100は、取得した補正パラメータを基に、RGB画像に対して明るさ補正を実行する。本実施形態では、スライダーバー902の操作によって設定された、例えば「20」の値を基に、総ての画素のRGBの値に20を加算する処理を行う。画像処理については、補正パラメータに他の画像処理情報を追加することで、実行する画像処理を増やすことも可能である。例えば、公知のモノクロ変換、公知のセピア色変換、「ImageFix」、「RedeyeFix」、「SmartSkin」などを追加することができる。ここで、「ImageFix」とは、写真画像を、人物顔検出やシーン解析部を用いて自動で解析し、適切な明るさ・ホワイトバランス調整を行う機能(顔検出機能)である)。また、「RedeyeFix」とは、画像中から自動で赤目画像を検出して補正する機能(赤目検出機能)である。また、「SmartSkin」とは、写真画像から人物の顔を検出して、該顔の肌領域を好適に加工する機能である。なお、画像処理機能の種類は、これらに限定されるものではなく、用途や目的に応じて、種々の画像処理を用いることができる。さらに、画像処理は、OS層219が提供する機能を利用してもよく、その場合であっても処理構成はこの実施形態と同じである。
次のステップS506では、ネイティブ層218はステップS505で画像処理が実行されたRGB画像からステップS406と同様の処理でブロック画像群を作成する。ここで、ステップS407でIDと関連付けたブロック画像群は、ステップS506で作成したブロック画像群と置き換わり、ステップS407で作成されたブロック画像群は破棄される。次にステップS507で、ステップS505で画像処理が施されたRGB画像から、UIで利用するための縮小RGB画像を作成する。ステップS508では、CPU100は、ステップS507で作成された縮小RGB画像をスクリプト層217で利用可能な形式(サポート可能な形式)の画像データに変換する。ここでは、ステップS409と同様に、JPEG形式のデータに変換する。次のステップS509で、CPU100は、スクリプト層217にインジケータの停止を依頼する。これは、ネイティブ層218から、スクリプト層217で定義されているインジケータ停止の関数を呼び出すことで実行することができる。
ステップS510では、CPU100は、インジケータを停止して、ディスプレイ104の表示からインジケータを消去する。一方、ステップS511では、CPU100は、変換されたJPEG形式のデータをBASE64データに変換し、スクリプト層217へ送信する。そして、ステップS512で、CPU100は、ネイティブ層218で変換されたBASE64データを受信し、それに従って、ステップS411で描画した画像を変更する。具体的には、CPU100は、スクリプト層で指定されたBASE64データをOS層のインタプリタ214に送信する。そして、インタプリタ214がBASE64データのスクリプトを解釈し、既にある描画領域に画像データの描画結果を表示する。以上の処理により補正パラメータに基づく画像処理が適用された画像データが表示される。
本実施形態では、図9に示すスライドバー902の操作によって画像処理が開始されるが、その開始の形態はこれに限定されるものではない。例えば、画面にプラスボタン、マイナスボタンが配置されており、そのボタンを押すごとに明るさが調整されるという形態であってもよい。他に、画像の右半分がタッチされたら明るさを増す、左半分がタッチされたら暗くするなど、タッチイベントと連動させた処理によってもよい。また、ユーザー操作で補正パラメータだけ変化させておいて、画像処理の実行指示があったときに、総ての画像処理が一括して行われるという形態など、画像処理の実行は様々な形態を用いることができる。
<スタンプ追加>
図6は、図3のステップS3のスタンプ追加の詳細を示すフローチャートである。以下の説明では、ユーザー操作によって、図9に示すアプリケーション画面900のスタンプ追加ボタン903が押下されてスタンプ一覧が表示された後、ハートスタンプ908が選択された例について説明する。なお、スタンプ追加は、CPU100がスクリプト層217のプログラムを用いて実行する処理である。また、利用するスタンプはアプリケーションが予めリソースファイルとして保持しているものである。
図6において、ステップS601で、CPU100は、スタンプとして利用される画像が保存されているパスを取得する。スタンプは予め決まったファイルを読み込む処理のため、図9に示すハートスタンプ908をタップすると、ハートスタンプが保存されているパスが返却される構成としておけばよい。ステップS602で、CPU100は、スタンプ描画用のオブジェクトを作成する。そして、ステップS603で、作成したスタンプ描画用オブジェクトに、ステップS601で取得したパスの情報をセットする。ステップS602およびS603の処理は、ステップS411で画像を追加した時とほぼ同様の方法で実行することができる。ステップS411との違いは、画像の情報元がBASE64の画像データではなく、スタンプのパスとなっている点である。また、ここで、スタンプに対してタッチイベントを付与することも可能である。タッチイベントを付与することにより、スタンプがタップされたか、スワイプされたか等のタッチ操作に関する情報を取得することが可能となる。この情報を利用することで、スタンプを移動したり、拡大縮小を行うなどの操作が可能となる。
ステップS604では、ステップS603の内容がインタプリタ214で解釈され、描画領域1206へスタンプが追加される。
<プリント設定>
図7は、図3のステップS34のプリンタ設定の詳細を示すフローチャートである。なお、ステップS701、S709〜S711は、CPU100がスクリプト層217のプログラムを用いて実行する処理である。また、ステップS702、S704、S705、S707、S708、およびS712は、CPU100がネイティブ層218のプログラムを用いて実行する処理である。さらに、ステップS703およびS706は、プリンタ112が実行する処理である。
図7において、先ず、ステップS701で、CPU100は、スクリプト層217からネイティブ層218へデバイス情報としてのプリンタ情報取得を依頼する。これは、プリンタ112と通信を行うためのスクリプト層217からの要求に当る。依頼の方法は、画像選択時と同様、バインディング機能によりスクリプトからネイティブに固有のAPIを呼び出す。ネイティブ層218には、スクリプト層217から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆる、ラッパが予め用意されている。例えば、GetPrinterInfoというネイティブ関数を用意しておき、スクリプト側からその関数を呼び出す。このようにして、ネイティブ層はスクリプト層からの外部デバイスとの通信の要求を取得する。通常、スクリプト層217からは、セキュリティ上の制限で外部デバイスと直接通信することはできない。そのため、上記のように、スクリプト層217から、一旦、ネイティブ層218へ外部デバイス情報の取得を依頼し、ネイティブ層218を介して外部デバイスと通信を行う。ここで、ネイティブ層218は、OS層219を介して、外部デバイス(例えば、プリンタ112)と通信する機能を備えている。
次にステップS702で、CPU100は、ネイティブ層218が、上述の関数を呼び出されると、プリンタの検出、いわゆるディスカバリーを行う。例えば、同一無線LANルータで繋がっているプリンタを検出する。ここでは、通信可能なプリンタの検出を行うため、例えば、Bonjour(登録商標)などのプロトコルによって、ブロードキャストやマルチキャスト等の方法を用いてプリンタに対して通信を試みる。これに対して、ステップS703で、プリンタ112はその要求に応じて応答する。
ステップS704では、CPU100は、応答のあったプリンタのIPアドレスを検知して記憶する。さらに、ステップS705で、CPU100は、応答のあったプリンタのIPアドレスへプリンタ情報の提供を要求する。応答のあったプリンタが複数の場合、CPU100は、総てのプリンタに対して情報の提供を要求する。そのために、CPU100は、ネイティブ層で、プリンタの情報を取得するためのコマンドを生成する。そのコマンドは、プリンタの動作を指定する命令であり、その一例としては、以下のように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は、外部デバイスであるプリンタの情報を取得する命令である。例えば、プリンタが対応している用紙種類、サイズ、縁なし印刷機能の有無、印刷品位、等のケーパビリティ情報を提供するよう要求する。なお、プリンタ情報取得コマンドの生成は、例えば、ROM101に予め記憶した固定のテキストを読み込んでも構わない。また、XML等のテキスト形式に限らず、バイナリ形式で記述し、それに沿ったプロトコルで通信してもよい。また、生成したプリンタ情報取得コマンドは、HTTP等のプリンタが対応している通信プロトコルに従った形式で、外部デバイス通信部221を介してプリンタ112へ送信される。また、通信方法はこれに限定されるものではない。Wi−Fi Direct(登録商標)やBluetooth(登録商標)、赤外線通信、電話回線、有線LAN、USBを用いた接続でもよく、その方法に沿ったプロトコルで通信を行えば同様の効果を得ることができる。
図7に示す例では、ネイティブ層218で、コマンドを生成する構成としているが、スクリプト層217で、コマンドを生成する構成でも、同様の効果が得られる。その場合、スクリプト層217で、例えば、上記のXML形式の命令文を含むコマンドを作成し、ネイティブ層218へ渡す。それを受けて、ネイティブ層218は、通信プロトコルに従った形式でプリンタ112へそのコマンドを送信する。
再び図7を参照すると、ステップ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]である。入力解像度についての詳細は後述する。13行目以降は他のモードであるモード2についての情報が記述されている。このように、プリンタ112の機種名と、そのプリンタが対応している総てのモードがこのXMLに記述されている。なお、プリンタ情報の記述方法はこれに限定されることはなく、タグ形式でないテキストや、バイナリ形式等の他の形式であってもよい。
また、上記の例は、プリンタの印刷機能の情報を受け渡ししている例に関するものであるが、この例に限定されるものではない。例えば、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を受け渡ししてもよい。画像処理の例としては、モノクロやセピア、彩度強調などの色変換、複数画像のレイアウト、ホワイトバランス補正、ノイズ除去、その他自動で写真を好ましい色や輝度に補正する処理などが挙げられる。
次のステップS707では、CPU100は、プリンタからプリンタ情報を取得する。CPU100は、ネイティブ層で、受信したプリンタ情報から、例えば、プリンタ112が有する総てのモードにおける印刷用紙のサイズ、種類、印刷面、カラーの項目と項目数等を取得する。次のステップS708で、CPU100は、受信したプリンタ情報をスクリプト層217が解釈可能な形式に変換して、スクリプト層217へ送信する。つまり、CPU100は、プリンタ112との通信によって得られた情報をスクリプト層217へ渡す。具体的には、ネイティブ関数を設けておき、バインディング機能を用いる。また、受け取ったXML形式のプリンタ情報で送信したり、タグなしのテキスト形式に変えて送信する等の方法を用いてもよい。加えて、スクリプト層217から特定のネイティブ関数を呼び出すごとに、その戻り値として情報を取得してもよい。また、ネイティブ関数に取得するモードなどの引数を渡し、その戻り値として情報を得てもよい。さらに、上述のJSON文字列を用いた受け渡しや、データ変換部207及び203を用いてBASE64等の文字列で受け渡しを行ってもよい。
次にステップS709で、CPU100は、ネイティブ層218から受信したプリンタ情報に基づいて、プリンタ112で利用できる機能を含む設定画面(図10)を形成し、表示する。これは、表示制御とも呼ばれる。ここで、接続可能なプリンタが複数ある場合は、プリンタ名を表示し、設定画面1001を表示する前にユーザーに印刷するプリンタを選択させるための表示画面を生成する。そして、CPU100は、選択されたプリンタに対応するプリンタ情報を用いて、選択されたプリンタの設定画面を表示する。なお、プリンタの選択は、上例に限らず、一番早く応答してきたプリンタや、より機能が多いプリンタ、印刷ジョブが混雑していないプリンタを選択する、等の方法も考えられる。
このように、CPU100は、印刷用紙のサイズ、種類、印刷面、カラーなどプリンタで利用できる機能を選択させる設定画面1001(図10)を表示する。設定画面の形成方法の一例として、以下に、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を返す。
また、GetPaperSizeT(n)、GetMediaTypeT(n)、GetQualityT(n)、GetBorderT(n)もネイティブ関数であり、引数nの値番目の文字列を返す。例えば、用紙サイズのテキストを返す関数のGetPaperSize(0)の返り値は「A4」、GetPaperSize(1)の返り値は「A5」となる。これらの値は、プリンタから受信するプリンタ情報からネイティブ関数が取り出す。
さらに、GetPaperSizeV(n)、GetMediaTypeV(n)、GetQualityV(n)、GetBorderV(n)もネイティブ関数であり、引数nの値番目の文字列を返す。例えば、用紙種類のテキストを返す関数のGetMediaTypeT(n)の返り値は「光沢紙」のように、表示してユーザに示す文言である。これに対して、GetMediaTypeV(0)の返り値は「GlossyPaper」とプリンタが解釈可能な表現となっている。
これらの文言や表現は、プリンタから送られてきた情報と結び付けてネイティブが決定する。例えば、プリンタから送られてきた情報より取り出した値が「GlossyPaper」であった場合、表示するテキストは「光沢紙」と決定する。決定の方法として、ネイティブはこれらの対応表を予め保持しておき、その対応表に沿ってテキストを決定すれば良い。
なお、上記の記述例は、用紙サイズ、用紙種類、印刷品位、縁有り/無しの設定を行う例に関するものであるが、これに限定されるものではない。図10に示されるように、両面/片面、カラー/モノクロ、さらには画像補正のオン/オフ等の他の設定項目であってもよいことは言うまでもない。また、前述のように印刷機能のみではなく、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を表示してもよい。
次のステップS710では、CPU100は、設定画面1001に対するユーザ操作に基づいて、プリンタに設定する機能を選択する。上記の例で示したHTMLを、レンダリング部216を用いてディスプレイ104に表示した例が、図10に示す設定画面1001である。ネイティブ層218を介してプリンタ情報を要求し、プリンタ情報から上記のネイティブ関数を用いて取得した情報を基に、設定画面1001が形成されている。なお、上記HTMLはスクリプト層217、ネイティブ層218のいずれで形成してもよい。また、図10に示す用紙サイズ等の設定項目はそれぞれプルダウンメニューになっており、ユーザー操作によって項目を選択することができる。
ステップS711では、CPU100は、設定完了ボタン1002に対するユーザ操作を検知すると、ユーザ操作によって選択された設定項目を含む設定情報を作成して、ネイティブ層218へ送信する。上記HTML記述の例にあるSetPrint( )もバインディング機能を有するネイティブ関数である。上記の例では、SetPrint( )を用いて、用紙サイズ、用紙種類、印刷品位、縁有り/無しの設定を文字列としてネイティブ層218へ渡す。
次に、ステップS712で、CPU100は、バインディング機能によりスクリプト層217から設定情報を受信する。ネイティブ層218では、後に、受信した設定情報を基に、プリンタ112の通信プロトコルに従って、プリントコマンドを生成する。そして、プリントコマンドは、プリンタ通信213を介してプリンタ112へ送信される。
<レンダリングおよびプリント(印刷)>
ユーザーが、図10に示した設定画面1001の設定完了ボタン1002を押下することにより、図3のステップS35のレンダリングおよびプリント(印刷)処理が開始される。図8は、図3のステップS35のレンダリングおよびプリントの詳細を示すフローチャートである。レンダリングおよびプリントに関しては、そのためのアプリケーションがバックグランドに移行しても処理を継続するように記述されている。その記述方法としては、例えば、iOSであれば、beginBackgroundTaskWithExpirationHandlerなどの、バックグラウンドでも動作可能とする関数を利用する。また、AndroidではServiceなどがそれに相当する。
図8において、先ず、ステップS801で、スクリプト層217からインジケータ起動依頼を送信し、ステップS802で、OS層219はインジケータを表示する。そして、ステップS803で、スクリプト層217はUI表示に利用していたSVGを、ネイティブ層218へ送信する。なお、後述するステップS804、S805、S806など、スクリプト層217で実行可能な処理は、ネイティブ層でなく、スクリプト層217で実行するようにしてもよい。本実施形態は、写真一枚、スタンプ一つの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=”Base64の表示用画像データ” id=”画像ID”></image>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
以下では、上記のSVG記述を基にレンダリングについて説明する。ただし、上記SVGは概略を説明するためのものであり、細かい設定の記述を省略している箇所もある。
ステップS804では、ネイティブ層218は、印刷情報からプリンタへ送信する出力解像度を取得し、そのサイズへSVGサイズ変更する。例えば、プリンタへ送信する画像のサイズが4000×3000画素であるとき、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=” Base64の表示用画像データ”
id=”imageID”></image>
<image width=”200” height=”200” x=”300” height=”50”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
上記記述では、SVGの横幅、縦幅がプリンタへ送信する画像サイズに合わせて変更が加えられている。
次に、ステップS805で、ネイティブ層218は、SVGの記述内容を表示用画像データからブロック画像群に変更する。ステップS407、S506で上述したように、RGB画像を上半分、下半分に二分割したブロック画像群が作成され、それぞれネイティブ層において、RAM上に保持されている。ここでは、それらの画像データをデータ変換部203によってBase64形式に変換し、この変換データを用いて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=”上半分画像のBase64” ></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”下半分画像のBase64” ></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>
上記の例では、画像に関する記述箇所を、ブロック画像群で記述し直している。
次にステップS806で、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 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=” 上半分画像のBase64” ></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=” 下半分画像のBase64” ></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>
上記記述では、4000×3000画素のSVGを、より大きな4005×3000画素のSVGで囲ったものである。この差分となっている箇所が赤帯を付ける領域となっている。赤帯の利用についてはステップS815にて後述する。
次にステップS807で、ネイティブ層218は、端末状態の判断を行う。本実施形態の情報処理装置では、着信や他のアプリケーションが立ち上がるなどの処理が入ると、実行しているアプリケーションをバックグランドに移行する。アプリケーションがバックグランドに移行した後、メモリにとって負荷の高い処理を続けていると他のアプリケーションに対して悪影響を及ぼす可能性がある。本実施形態は、後述するように、アプリケーションがバックグランド状態にある場合は、そのアプリケーションの動作によるメモリの負荷を減らすようにする。すなわち、ステップS807では、端末状態判断として、レンダリングおよびプリントのためのアプリケーションが、フォアグランドで動作しているか、バックグランドで動作しているかを判断する。
次のステップS808では、上記ステップS807での判断に応じたSVGを作成する。すなわち、ネイティブ層218は、アプリケーションがフォアグランドで動作しているか、またはバックグランドで動作しているかに応じて、レンダリングする画像領域のサイズを異ならせてSVGを作成する。具体的には、SVGコンテンツから特定の領域のみをレンダリングするようにするためのSVGを作成し、その際に上記サイズに応じて特定の領域を定める。
以下では、先ず、ステップS807で、印刷用アプリケーションがフォアグランドにあると判断した場合の処理を説明する。アプリケーションにおいて、4005×3000画素のサイズを一括でレンダリングすることは、レンダリング速度は向上するものの、メモリの負荷が高い。すなわち、一括したレンダリングによって、OSのWebViewに描画を依頼する際の初期化等のオーバーヘッドが一度で終了することから、レンダリングの速度が向上する。しかし、例えば、4005×3000画素の画像領域に対するレンダリングを2回に分けることにより、上記初期化処理等のオーバーヘッドも2回となって、レンダリング速度は低下するがメモリ使用量を減らすことができる。本ステップS808は、特定領域のみをレンダリングするためのSVGを作成することにより、一度に使用するメモリ量を削減する。以下、この特定の領域をレンダリングするためのSVGをバンドSVGと称する。ステップS808で、ネイティブ層218は、例えば、下記のような一つ目のバンド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”>
<symbol id=”imageID” viewBox=”0 0 640 480”>
<image width=”640” height=”240” x=”0” y=”0”
xlink:href=” 上半分画像のBase64” ></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=” 下半分画像のBase64” ></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である。
ステップS809で、ネイティブ層218はOS層219に対してバンドサイズ用の画面生成を依頼する。本実施形態は、一つ目のバンドSVGから4005×1500画素の領域を取得するために、その領域情報を入力する。メモリ容量に余裕がある場合は、4005×3000画素を一括でレンダリングしてもよいことはもちろんである。この領域情報はレンダリングを実行する際に必要な、予めアプリケーション内部に保持されているパラメータである。この領域情報が、ステップS807の端末情報に応じて変化することは上述したとおりである。次に、ステップS810で、OS層219は、バンドSVG用の画面生成(4005×1500画素)を実行する。バンドSVGサイズに関する情報はバンドSVG自体ではなく、ネイティブ層218が保持している。また、生成する画面はユーザーには見えないオフスクリーンとして生成する。
ステップS811では、ネイティブ層218は、1つ目のバンドをステップS810で生成した画面に描画するように依頼をする。そして、ステップS812で、OS層219はバンドSVGの情報をロードする。バンドSVGの情報がロードできたタイミングで、ネイティブ層218はロード完了の通知を受け取ることができる。この通知は、OSに標準的に備わっているものを利用することができる。例えば、iOSで利用するObjective−C言語であればwebViewDidFinishLoad関数である。また、Androidアプリケーションの作成で利用するJava言語であればonPageFInished関数などがそれに当る。
ステップS813では、ネイティブ層218は、OS層に対し画像情報を依頼する。ここで言う画像情報とは、画面に表示されているRGBAデータのことである。すなわち、画面キャプチャを実行する。そして、ステップS814で、OS層219は、画面キャプチャを実行し、取得したRGBA情報をネイティブ層217へ送信する。ここで、バンドSVGには、4005×3000画素の情報が記述されている。しかしながら、実際のOS層219が用意している領域は4005×1500画素である。この場合、用意した領域からはみ出した部分に関しては描画が実行されない。このため、4005×1500画素の画面を用意することで、バンドSVGの上半分のみが描画され、結果として上半分の情報のみを取得することが可能となる。これを応用して、4005×1500画素の画面に、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=”上半分画像のBase64” ></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”下半分画像のBase64” ></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>
図12(a)および(b)は、以上説明した、それぞれSVG記述より小さい画面でロードする例と、y座標をずらし、かつ、SVG記述より小さい画面でロードする例を説明する図である。
次に、ステップS815では、ネイティブ層218は、取得したRGBAデータの右端が赤色になっているか否かを確認する。ステップS812で、ロード完了の情報が送られて来ているが、これはSVGデータ読み込み完了のタイミングによるものであり、SVGの描画が完了したことを示していない。つまり、SVGデータ読み込み完了と描画完了にはタイムラグがあり、この間に画面キャプチャを実行すると、求める画像を得ることができない。そのため、ロードさせるSVGデータに赤帯を付与し、求める画像が取得できているかを判断する。そして、ステップS816で、ネイティブ層218は、赤帯の有無を確認し、赤帯が確認できない場合は、ステップS813からの処理を繰り返す。この際、一定時間待ってから繰り返し、CPU負荷を減らすなどの工夫も考えられる。赤帯が確認できた場合は、ステップS817の処理へ進む。
ステップS817では、ネイティブ層218は、画面のリセットをOS層219に依頼する。そして、ステップS818で、OS層219は、画面の破棄を行う。画面破棄には二つ意味がある。一つ目は、次のSVGバンドをロードしたときに、前回の赤帯が残ったままとなり、描画完了と誤認識してしまうことをなくすためである。ただし、これに関しては、バンドSVG毎に付けるマーカーの色や形などを変化させることで対応できる。二つ目は、SVGバンドのサイズを動的に変える可能性があるためである。SVGバンドサイズが途中で変更される例を、後述する。
ステップS819では、ネイティブ層218は、取得したRGBAをJPEGへ変換する。ここで、ステップS814の処理によって送られて来るRGBAデータには印刷時には不要な赤帯の情報の入っている。JPEG変換は、この赤帯の領域を除いて実行する。次に、ステップS820で、ネイティブ層218は、プリンタへ送信するためのプリントコマンドをステップS819で生成したJPEG画像に付与する。ここで、JPEG画像に付与するデータは、プリンタ設定の情報を基に生成される。また、必要に応じて、プリンタを制御するためのコマンドを付与する。例えば、送信する情報が何番目のバンドかを示す情報や、一番末尾のバンドを示すフッタなどを付与する。
ステップS821で、ネイティブ層218は、OS層219に対して印刷情報の送信を依頼する。ステップS822で、OS層219は、ネイティブ層218から受け取った印刷情報をプリンタ112へ送信する。印刷情報を送り終わった後、処理はステップS824へ移行する。ステップS823では、プリンタ112はOS層219から受け取った情報をもとに、印刷を実行する。
ステップS824で、ネイティブ層218は、レンダリングが終了した否かの判断を行う。レンダリング終了の判断は、例えば、取得した画像の高さの合計が出力サイズの高さと一致している、終了判断のためのフラグが立っているなどの情報を利用して行うことができる。これらは一例であり、その他の判断手法であってもよい。レンダリングが終了していない場合は、ステップS807から処理を繰り返す。
ステップS824で、レンダリング終了と判断されると、ステップS825へ進み、スクリプト層217から、インジケータの停止依頼がOS層219へ送信され、インジケータを止め、本レンダリングおよびプリント処理を終了する。なお、上述の説明の例では、4005×3000画素のうち、4000×1500画素の印刷データの作成および印刷が終了していない。この場合は、引き続きステップS807へ戻り、それ以降の処理を同様に行う。
次に、ステップS807で、本レンダリングおよびプリントのアプリケーションがバックグランドに移行した場合の処置を説明する。この場合は、ステップS810で生成する、画面の領域サイズをフォアグランドで動作する場合より小さくする。すなわち、上述したように、アプリケーションがフォアグランドにあるときは、1つ目のバンドSVGは4005×1500画素のサイズで画像を取得する、アプリケーションがバックグラウンドで動作している場合は、ステップS810で生成する画面の領域情報(サイズ)を、4005×16画素に変更する。この変更により、ステップS810におけるレンダリング処理のために必要なメモリは、変更前の約18MBに対して、変更後は、192KBと、およそ1/94に低減することができる。これにより、アプリケーションがバックグラウンドに移行した際に、そのアプリケーションがOSによってメモリから削除される可能性を低減することが可能となる。この結果、ステップS808以降の処理を、4005×16画素のサイズで、上述と同様に行う。この場合の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=”上半分画像のBase64” ></image>
<image width=”640” height=”240” x=”0” y=”240”
xlink:href=”下半分画像のBase64” ></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層が用意した画面のサイズであるから、バンドSVG自体は4005×3000画素の情報が記載されていてよい。ただし、既に取得した情報を再度取得することがないように、バンドSVGのy座標は適切に変更する必要がある。また、SVGの特定エリアを表示する方法は、SVGのviewBoxという属性を操作するなど、どのような方法を利用してもよい。
ステップS809で、ネイティブ層218は、OS層に対して情報を取得するサイズ(4005×16画素)の画面を生成するよう依頼する。そして、ステップS810〜S823では、フォアグランドの場合の処理に関して上述した処理と同じ処理を行う。
以上の第1実施形態によれば、レンダリング処理および印刷処理実行中に、アプリケーションが何らかの理由でバックグラウンドの処理に移行したと判断された場合に、そのアプリケーションが利用するメモリ量を大きく低減することが可能となる。これにより、OSによってアプリケーションがメモリから削除される可能性を低減することが可能となる。
また、上述の実施形態では、アプリケーションがバックグラウンドに移行した際に、16画素ラインの単位でレンダリングする。一方で、その処理中に通話等の、フォアグラウンドのアプリケーションが終了し、再び印刷アプリケーションがフォアグラウンドに戻ることも考えられる。その際には、16ラインとしていたレンダリングのサイズを基のサイズに拡大することもできる。具体的には、ステップS809で、ネイティブ層218は、OS層に対して情報を取得するサイズ(4005×H画素)の画面を生成するよう依頼する。ここで、Hは16より大きな値とする。このような形態も、本発明の範疇に含まれる。
(第2実施形態)
本発明の第2実施形態は、印刷用アプリケーションがバックグランドに移行した場合、オンメモリで保持していた画像データを、ファイル書き出しによって保存する形態に関するものである。なお、以下の説明は、主に、上述した第1実施形態と異なる点のみについて行うものである。
SVGの記述対象となる画像コンテンツは、元々OSが管理している画像保存領域において、JPEG等のファイルフォーマットで、2次記憶装置103に保持されている。一般的なコンピュータにおいては、CPUから2次記憶装置へのアクセス速度は、RAM102へのそれに比較して遅い。そのため、一度2次記憶装置から展開した画像データはそのままRAM上にオンメモリで保持しておくことにより、表示や印刷実行の際に、ファイル読みだしの時間を省略できる。一方で、画像データをRAM上に保持し続けることは、システム全体のメモリ使用量を多くするものである。このため、アプリケーションがバックグラウンドに移行した際は、そのアプリケーションは、OSによってメモリから削除される可能性が高い。
そこで、本実施形態は、アプリケーションがフォアグラウンドで動作するときは、展開した画像データをRAM上にオンメモリで保持しておく。一方、アプリケーションがバックグラウンドに移行したときは、画像データをファイルに出力し、そのファイル名でSVGコンテンツを書き換えるようにする。
本実施形態では、先ず、レンダリング処理のアプリケーションがフォアグラウンドで動作している場合について説明する。この場合、図8のステップS810で、第1実施形態と同様に、4005×1500画素サイズのレンダリング画像を生成する。本実施形態では、そのサイズは変化しない。この画像データは、ネイティブ層においてオンメモリ状態で保持されている。これにより、本実施形態の印刷用アプリケーションが、画像に対して補正、加工処理を行う場合に、この補正、加工処理を比較的迅速に実行することができる。なお、近年のモバイルフォンが備えるカメラ解像度は、1000万画素を超えるものも数多くある。この場合、画像一枚を保持するために必要なメモリは、1画素RGB成分3バイトとすると、30Mバイトにもおよぶが、近年のモバイルフォンは上記のようなメモリをRAM上に確保して動作することも可能である。
一方、上記処理の後、あるバンド領域のレンダリングに関するステップS807の端末状態判断で、アプリケーションがバックグラウンドに移行したと判断された場合、ステップS808のバンドSVGの作成処理に、以下の処理が追加される。
先ず、ステップS808で、現在オンメモリで保持している2分割した画像を、それぞれ「imageID_above.bmp」、「imageID_below.bmp」という名前でアプリケーションのテンポラリ領域にファイルとして保存する。保存後は、オンメモリで保持していた対応する画像の領域を削除する。これにより、オンメモリに係るメモリ(本実施形態ではRAM)について、例えば30MBのメモリを削減することが可能となる。
次に、書き出したファイル名を用いて、印刷用SVGコンテンツのImageタグを書き換える処理を行う。具体的には、以下の記述となる。
<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>
上記の例では、画像に関する記述箇所を、保存したファイル名で記述し直している。また、既に、4005×1500画素領域はレンダリング処理を実行しているため、svgタグのy要素が、−1500となっている。以降は、上記書き換えたSVGに基づいてバンドレンダリング処理を行う。
以上の第2実施形態によれば、レンダリング時にファイルを展開し直す時間は要するものの、アプリケーションがRAM上に占有するメモリ量を削減することが可能となる。上述した例では、画像1枚当たり30MBのメモリを有するとしたが、画像を複数枚保持することを考慮すると、本実施形態によるメモリ削減量は比較的大きく、アプリケーションが削除される可能性をさらに低下させることができる。
なお、本実施形態では、ステップS810における画像生成に係る領域情報は、4005×1500画素のままとしたが、本発明の適用はこれに限定されるものではない。実行中のメモリ量をさらに削減するために、上述した第1実施形態と本実施形態を組み合わせて動作するように構成してもよい。
(第3実施形態)
本発明の第3実施形態は、レンダリング処理の画像データの解像度を低減することによってアプリケーションが使用するメモリ量を削減する形態に関する。図13は、本発明の第3実施形態に係るレンダリングおよびプリントの詳細を示すフローチャートである。以下、図8に示す処理を異なる点を説明する。
先ず、ステップS1307で、端末状態判断を行う。一例として、最初のバンドに関する判断では、アプリケーションがフォアグラウンドで動作しているものとする。その結果、ステップS1308では、第1実施形態と同様、4005×3000画素の印刷用SVGファイルを作成し、ステップS1309〜S1319で、この最初のバンドのレンダリングを実行する。このバンドのレンダリングの画像サイズは、第1実施形態と同様に、4005×1500画素である。
次に、2バンド目のレンダリングを実施する際に、ステップS1307の端末状態判断で、アプリケーションがバックグラウンドに移行したものと判断する。この場合、本実施形態では、先ず、上記最初にレンダリングしたバンドの4005×1500画素の画像データを一度破棄する。次に、ステップS1308で、解像度を1/2に低下させたSVGデータを構築する。具体的には、以下の記述となる。
<svg
xmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
width=”2005” height=”1500” viewBox=”0 0 2005 1500”>
<svg x=”0” y=”0”>
<svg width=”2000” height=”1500” viewBox=”0 0 320 240”>
<symbol id=”imageID” viewBox=”0 0 320 240”>
<image width=”320” height=”120” x=”0” y=”0”
xlink:href=” imageID_above.bmp” ></image>
<image width=”320” height=”120” x=”0” y=”120”
xlink:href=” imageID_below.bmp” ></image>
</symbol>
<use xlink:href=”#imageID” x=”0” y=”0” width=”320” height=”240” />
<image width=”100” height=”100” x=”150” height=”25”
xlink:href=”スタンプのパス指定”
id=”スタンプのID”></image>
</svg>
<rect x=”2000” y=”0” width=”5” height=”1500” fill=”red” />
</svg>
</svg>
上記SVGの記述においては、解像度を2000×1500画素として、対応する各箇所を変更している。この記述を用いて、ステップS1310で、バンドSVGの画面生成を行う。このときの画面生成のサイズは、2000×750画素とする。もちろん、レンダリング終了を検知するためのマーカーライン5画素分は、本実施形態においても必要となる。
以上のように、本発明の第3実施形態によれば、レンダリング処理の最中にアプリケーションがバックグラウンド移行した際、それまでのレンダリング結果を一旦破棄し、解像度を低下させた状態でレンダリングを行う。これにより、ステップS1310で確保する画面生成用のメモリ量を低減することが可能となる。上述の例では、4005×1500画素領域を、2000×750画素領域に削減することができ、画像キャプチャ用のメモリを、18MBから、4.5MBに削減することが可能となる。その結果、アプリケーションがOSによってメモリから削除される可能性を低減することができる。
なお、解像度を低下させた状態は、アプリケーションがバックグラウンドに移行している間は保持されるものとする。そして、その印刷アプリケーションがフォアグラウンドに移行したことを検知した場合には、次の印刷ジョブから、印刷解像度を再び4000×1500画素に戻すことにより、解像度の高い印刷処理を実行することが可能となる。
(他の実施形態)
上述した第1〜第3本実施形態は、ハイブリッドアプリケーションの形態に関するものであるが、本発明の適用はこの形態に限定されるものではない。OS毎に定義された言語によって開発されたアプリケーションであっても本発明を適用できることは上述の説明からも明らかである。
なお、図8にて上述したレンダリング処理において、SVGの印刷コンテンツを、ステップS812でOSが保持しているレンダリング機能(ブラックボックス)を用いて描画処理を行う。そして、その結果は、ステップS815で、RGBAデータとしてネイティブ層が受け取る。この場合に、ハイブリッドアプリケーションの形態では、OS部とネイティブ部で、レンダリング後の画像バッファを2面要する。また、OSが内部で保持している画像バッファの管理はOSに任されていることから、アプリケーション側から明示的にメモリを解放することができず、2つのバッファを保持し続ける状態が存在する。従って、ハイブリッドアプリケーションの形態では、バックグランドにおいて使用するメモリ(バッファ)の量が他の形態のアプリケーションより多くなることがある。このように、本発明は、ハイブリッドアプリケーションの形態に適用することにより、バックグランドで使用するメモリ量を低減する上でより顕著な効果を得ることができる。
また、上述した第1〜第3実施形態の情報処理装置115上で動作するOSが、マルチタスク動作またはシングルタスク動作のいずれであっても本発明を適用することができる。シングルタスク動作のアプリケーションの場合、他のアプリケーションの起動によってバッググラウンドへ移行する際、直ちにそのアプリケーションが強制終了されない。すなわち、バックグランドへの移行によってアプリケーションの動作は停止するが、アプリケーション自体は終了せず、その状態を維持し続ける。これにより、フォアグラウンドでの上記他のアプリケーションが終了すると、再びフォアグランドに移行して、バックグランドに移行したときの状態から動作を再開する。しかし、この構成において、バックグラウンドに移行したシングルタスクのアプリケーションが、上述した状態の維持のために比較的大量のメモリを利用し続けている場合や、長時間バックグラウンドに移行した状態を続ける場合は、OSの処理によってバックグラウンドのアプリケーションを強制終了されることがある。この場合、本発明の適用が効果的となる。
また、上述した各実施形態は、情報処理装置上で動作する印刷用アプリケーションの特にレンダリングの処理がバックグランドに移行したときの形態に関するものであるが、本発明の適用はこの形態に限られない。例えば、印刷用アプリケーションによる、レンダリング以外の他の処理、例えば、色変換の処理がバックグランドに移行したときに、使用するメモリ量を低減する上述の各実施形態の処理を行う形態でであってもよい。さらには、印刷用アプリケーション以外の他のアプリケーションが情報処理装置において動作しているときに、それがバックグランドに移行したときに同じく使用するメモリ量を低減する上述の各実施形態の処理を行う形態でであってもよい。
さらに、上述の各実施形態ではモバイルフォンを想定したが、本発明はこれに限定されない。例えば、液晶画面サイズが5インチを超えるようなタブレットと言われるデバイスにおいても、同様の構成を適用することができる。また、上記各実施形態中で記載した数値は、説明を簡単にするために設定した値に過ぎない。別の数値を用いたとしても、本発明の効果を得られる実施形態は、本発明の範疇に含まれる。
(さらに他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
100 CPU
101 RAM
102 ROM
112 プリンタ
115 情報処理装置
217 スクリプト層
218 ネイティブ層
219 OS層

Claims (15)

  1. 情報処理装置上で動作するアプリケーションのプログラムであって、
    レンダリングのための処理を実行する実行工程と、
    前記アプリケーションフォアグランドからバックグランドへ移行に基づいて、当該アプリケーションが前記実行工程の前記処理を行うことにより使用されるメモリを、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減工程と、
    を有し
    前記低減工程では、前記実行工程の前記処理に基づくレンダリングにより生成される画像のデータ量を低減することによって、前記使用されるメモリ量を少なくすることを特徴とするプログラム。
  2. 情報処理装置上で動作するアプリケーションのプログラムであって、
    レンダリングのための処理を実行する実行工程と、
    前記アプリケーションフォアグランドからバックグランドへ移行に基づいて、前記情報処理装置が備える所定のメモリにおいて、当該アプリケーションが前記実行工程の前記処理を行うことにより使用されるメモリを、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減工程と、
    を有し
    前記アプリケーションは、当該アプリケーションがフォアグランドで動作する場合に、前記レンダリングの対象であるデータを前記所定のメモリにオンメモリで保持させ、
    前記低減工程では、前記データに対応するファイルを出力し、当該ファイルのファイル名を前記所定のメモリに保持させることによって、前記使用されるメモリ量を少なくすることを特徴とするプログラム。
  3. 記低減工程は、前記実行工程の前記処理に基づくレンダリングにより生成される画像データを低減することによって、前記使用されるメモリを少なくすることを特徴とする請求項に記載のプログラム。
  4. 前記アプリケーションがフォアグランドで動作する場合、前記実行工程は、第1の画素数の画像がレンダリングにより生成されるように前記処理を実行し、
    前記アプリケーションがバックグランドで動作する場合、前記低減工程は、前記第1の画素数よりも少ない第2の画素数の画像がレンダリングにより生成されるように、前記実行工程において前記処理を実行させることを特徴とする請求項1または3に記載のプログラム。
  5. 前記アプリケーションがバックグランドで動作する場合、所定の画像の一部である前記第2の画素数の領域に対応するデータが繰り返しレンダリングの対象となるように前記実行工程において前記処理が実行されることによって、前記所定の画像が生成されることを特徴とする請求項4に記載のプログラム。
  6. 前記アプリケーションがフォアグランドで動作する場合、前記所定の画像の一部である前記第1の画素数の領域に対応するデータが繰り返しレンダリングの対象となるように前記実行工程において前記処理が実行されることによって、前記所定の画像が生成されることを特徴とする請求項5に記載のプログラム。
  7. 前記低減工程は、前記アプリケーションがフォアグランドで動作する場合よりもレンダリングにより生成される画像の解像度を低下させるように、前記実行工程において前記処理を実行させることを特徴とする請求項1または3に記載のプログラム。
  8. 前記アプリケーションはハイブリッドアプリケーションであることを特徴とする請求項1ないしのいずれか1項に記載のプログラム。
  9. 前記アプリケーションは、前記実行工程の前記処理に基づくレンダリングが終了した後に、当該レンダリングにより生成された画像を印刷するための印刷情報をプリンタへ送信することを特徴とする請求項1ないしのいずれか1項に記載のプログラム。
  10. 前記実行工程における前記処理により前記レンダリング所定の画像領域ごとに行われ、前記所定の画像領域ごとのレンダリング後に生成された印刷情報をプリンタへ送信することを特徴とする請求項に記載のプログラム。
  11. 前記実行工程により実行される前記処理は、前記情報処理装置上で動作するオペレーティングシステムにレンダリングを実行させる処理であることを特徴とする請求項1ないし10のいずれか1項に記載のプログラム。
  12. アプリケーションのプログラムを動作させる情報処理装置であって、
    レンダリングのための処理を実行する実行手段と、
    前記アプリケーションフォアグランドからバックグランドへ移行に基づいて、当該アプリケーションが前記実行手段の前記処理を行うことにより使用されるメモリを、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減手段と、
    を有し
    前記低減手段は、前記実行手段の前記処理に基づくレンダリングにより生成される画像のデータ量を低減することによって、前記使用されるメモリ量を少なくすることを特徴とする情報処理装置。
  13. アプリケーションのプログラムを動作させる情報処理装置であって、
    レンダリングのための処理を実行する実行手段と、
    前記アプリケーションのフォアグランドからバックグランドへの移行に基づいて、前記情報処理装置が備える所定のメモリにおいて、当該アプリケーションが前記実行手段の前記処理を行うことにより使用されるメモリ量を、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減手段と、
    を有し、
    前記アプリケーションは、当該アプリケーションがフォアグランドで動作する場合に、前記レンダリングの対象であるデータを前記所定のメモリにオンメモリで保持させ、
    前記低減手段は、前記データに対応するファイルを出力し、当該ファイルのファイル名を前記所定のメモリに保持させることによって、前記使用されるメモリ量を少なくすることを特徴とする情報処理装置。
  14. アプリケーションのプログラムを動作させるための情報処理方法であって、
    レンダリングのための処理を実行する実行工程と、
    前記アプリケーションフォアグランドからバックグランドへ移行に基づいて、当該アプリケーションが前記実行工程の前記処理を行うことにより使用されるメモリを、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減工程と、
    を有し
    前記低減工程では、前記実行工程の前記処理に基づくレンダリングにより生成される画像のデータ量を低減することによって、前記使用されるメモリ量を少なくすることを特徴とする情報処理方法。
  15. アプリケーションのプログラムを動作させるための情報処理方法であって、
    レンダリングのための処理を実行する実行工程と、
    前記アプリケーションのフォアグランドからバックグランドへの移行に基づいて、情報処理装置が備える所定のメモリにおいて、当該アプリケーションが前記実行工程の前記処理を行うことにより使用されるメモリ量を、当該アプリケーションがフォアグランドで動作していた場合より少なくする低減工程と、
    を有し、
    前記アプリケーションは、当該アプリケーションがフォアグランドで動作する場合に、前記レンダリングの対象であるデータを前記所定のメモリにオンメモリで保持させ、
    前記低減工程では、前記データに対応するファイルを出力し、当該ファイルのファイル名を前記所定のメモリに保持させることによって、前記使用されるメモリ量を少なくすることを特徴とする情報処理方法。
JP2016204253A 2016-10-18 2016-10-18 情報処理装置、情報処理方法およびプログラム Active JP6786342B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016204253A JP6786342B2 (ja) 2016-10-18 2016-10-18 情報処理装置、情報処理方法およびプログラム
US15/722,250 US10423347B2 (en) 2016-10-18 2017-10-02 Information processing apparatus, information processing method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016204253A JP6786342B2 (ja) 2016-10-18 2016-10-18 情報処理装置、情報処理方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2018067087A JP2018067087A (ja) 2018-04-26
JP6786342B2 true JP6786342B2 (ja) 2020-11-18

Family

ID=61904515

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016204253A Active JP6786342B2 (ja) 2016-10-18 2016-10-18 情報処理装置、情報処理方法およびプログラム

Country Status (2)

Country Link
US (1) US10423347B2 (ja)
JP (1) JP6786342B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7207001B2 (ja) * 2019-02-22 2023-01-18 ブラザー工業株式会社 情報処理プログラム及び情報処理装置
US11595193B2 (en) * 2020-07-10 2023-02-28 Vmware, Inc. Secure data storage for anonymized contact tracing

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0918732A (ja) * 1995-07-03 1997-01-17 Canon Inc 情報処理装置及びその方法
US6910106B2 (en) * 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
JP2008097425A (ja) * 2006-10-13 2008-04-24 Mitsubishi Electric Corp 携帯情報端末および携帯情報端末の制御方法
JP4726231B2 (ja) 2006-10-24 2011-07-20 キヤノン株式会社 印刷制御装置、印刷制御方法、プログラム及び記憶媒体
JP5511230B2 (ja) * 2009-06-12 2014-06-04 キヤノン株式会社 通信装置、通信装置の制御方法およびプログラム
US8402191B2 (en) * 2010-12-30 2013-03-19 Stmicroelectronics, Inc. Computing element virtualization
JP2013043405A (ja) * 2011-08-25 2013-03-04 Canon Inc 情報処理装置、その制御方法、および制御プログラム
JP2013089042A (ja) * 2011-10-18 2013-05-13 Aisin Aw Co Ltd 情報処理システム、情報処理方法、及び情報処理プログラム
US9858052B2 (en) * 2013-03-21 2018-01-02 Razer (Asia-Pacific) Pte. Ltd. Decentralized operating system
US9558787B2 (en) * 2014-01-29 2017-01-31 Google Inc. Media application backgrounding
JP6438218B2 (ja) 2014-06-13 2018-12-12 キヤノン株式会社 装置、方法、及びプログラム
JP6386803B2 (ja) 2014-06-13 2018-09-05 キヤノン株式会社 装置、方法、及びプログラム
JP6478487B2 (ja) 2014-06-13 2019-03-06 キヤノン株式会社 情報処理装置、情報処理方法、及びプログラム
JP6378645B2 (ja) 2014-06-13 2018-08-22 キヤノン株式会社 情報処理装置、制御方法、及びプログラム
JP6138088B2 (ja) 2014-06-30 2017-05-31 キヤノン株式会社 情報処理装置、制御方法、及びソフトウェアプログラム
JP6463914B2 (ja) * 2014-06-30 2019-02-06 キヤノン株式会社 情報処理装置、処理方法、及びプログラム
JP5901704B2 (ja) 2014-06-30 2016-04-13 キヤノン株式会社 情報処理装置、情報処理方法、プログラム
JP6363888B2 (ja) 2014-06-30 2018-07-25 キヤノン株式会社 情報処理装置、およびプログラム
JP6525517B2 (ja) 2014-06-30 2019-06-05 キヤノン株式会社 情報処理装置、制御方法、及びプログラム
JP6381319B2 (ja) 2014-06-30 2018-08-29 キヤノン株式会社 情報処理装置、処理方法、及びプログラム
US10101910B1 (en) * 2015-09-15 2018-10-16 Amazon Technologies, Inc. Adaptive maximum limit for out-of-memory-protected web browser processes on systems using a low memory manager
JP6649832B2 (ja) 2016-03-30 2020-02-19 キヤノン株式会社 情報処理装置およびその制御方法、並びにプログラム

Also Published As

Publication number Publication date
US10423347B2 (en) 2019-09-24
US20180107418A1 (en) 2018-04-19
JP2018067087A (ja) 2018-04-26

Similar Documents

Publication Publication Date Title
US10296267B2 (en) Information processing apparatus, information processing method, and storage medium
JP6799396B2 (ja) 情報処理装置、情報処理方法およびプログラム
US9436413B2 (en) Information processing apparatus, information processing method, and storage medium storing program
US20150363173A1 (en) Apparatus, method, and non-transitory computer-readable storage medium
US10620892B2 (en) Information processing apparatus that displays a print setting screen based on information of a printing apparatus in a format interpretable in a first program layer and processing method thereof
JP6381319B2 (ja) 情報処理装置、処理方法、及びプログラム
JP6478487B2 (ja) 情報処理装置、情報処理方法、及びプログラム
US10075620B2 (en) Information processing apparatus, control method for information processing apparatus, and non-transitory computer-readable storage medium
JP6138088B2 (ja) 情報処理装置、制御方法、及びソフトウェアプログラム
US9465571B2 (en) Apparatus, method, and non-transitory computer-readable storage medium
US10228890B2 (en) Apparatus, method, and non-transitory computer-readable storage medium
US9575702B2 (en) Information processing apparatus, information processing method, and storage medium storing program having a layered structure
JP6786342B2 (ja) 情報処理装置、情報処理方法およびプログラム
JP6649832B2 (ja) 情報処理装置およびその制御方法、並びにプログラム
JP7395334B2 (ja) 情報処理装置、情報処理方法、およびプログラム
JP6757368B2 (ja) 情報処理装置、処理方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191018

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200827

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200929

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201028

R151 Written notification of patent or utility model registration

Ref document number: 6786342

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151