JP6649832B2 - 情報処理装置およびその制御方法、並びにプログラム - Google Patents

情報処理装置およびその制御方法、並びにプログラム Download PDF

Info

Publication number
JP6649832B2
JP6649832B2 JP2016069278A JP2016069278A JP6649832B2 JP 6649832 B2 JP6649832 B2 JP 6649832B2 JP 2016069278 A JP2016069278 A JP 2016069278A JP 2016069278 A JP2016069278 A JP 2016069278A JP 6649832 B2 JP6649832 B2 JP 6649832B2
Authority
JP
Japan
Prior art keywords
image
information
layer
program
program layer
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
JP2016069278A
Other languages
English (en)
Other versions
JP2017182488A (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 JP2016069278A priority Critical patent/JP6649832B2/ja
Priority to US15/460,641 priority patent/US10013221B2/en
Publication of JP2017182488A publication Critical patent/JP2017182488A/ja
Application granted granted Critical
Publication of JP6649832B2 publication Critical patent/JP6649832B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/125Page layout or assigning input pages onto output media, e.g. imposition
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1205Improving or facilitating administration, e.g. print management resulting in increased flexibility in print job configuration, e.g. job settings, print requirements, job tickets
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1206Improving or facilitating administration, e.g. print management resulting in increased flexibility in input data format or job format or job type
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1202Dedicated interfaces to print systems specifically adapted to achieve a particular effect
    • G06F3/1203Improving or facilitating administration, e.g. print management
    • G06F3/1208Improving or facilitating administration, e.g. print management resulting in improved quality of the output result, e.g. print layout, colours, workflows, print preview
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1241Dividing a job according to job requirements, e.g. black/white and colour pages, covers and body of books, tabs
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1244Job translation or job parsing, e.g. page banding
    • G06F3/1247Job translation or job parsing, e.g. page banding by conversion to printer ready format
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1223Dedicated interfaces to print systems specifically adapted to use a particular technique
    • G06F3/1237Print job management
    • G06F3/1253Configuration of print job parameters, e.g. using UI at the client
    • G06F3/1256User feedback, e.g. print preview, test print, proofing, pre-flight checks
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1278Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
    • G06F3/1285Remote printer device, e.g. being remote from client or server
    • G06F3/1287Remote printer device, e.g. being remote from client or server via internet
    • 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/12Digital output to print unit, e.g. line printer, chain printer
    • G06F3/1201Dedicated interfaces to print systems
    • G06F3/1278Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
    • G06F3/1292Mobile client, e.g. wireless printing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Description

本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。
近年、多機能携帯端末(以下、モバイルコンピュータ)が普及している。このようなモバイルコンピュータ上で動作するアプリケーションの形態としては、主に、ネイティブアプリケーションとウェブアプリケーションの2つが存在する。ネイティブアプリケーションは、通常、OS毎に用意される開発環境、及び開発言語を用いて開発されるアプリケーションである。また、ネイティブアプリケーションは、各開発環境において予めコンパイルされ、人間が理解可能ないわゆる高水準言語から、コンピュータのCPUが解釈可能なアセンブラ等の命令セット群に変換される。ネイティブアプリケーションは、命令をCPUが直接解釈するために、高速動作が可能というメリットがある。一方、ウェブアプリケーションは、各コンピュータ上のOSに標準的に組み込まれているウェブブラウザ上で動作するアプリケーションである。ウェブアプリケーションは、ウェブブラウザが解釈できるようにウェブ標準言語で記述され、ウェブブラウザが動作する環境であれば、どこでも動作可能というメリットがある。
近年、ネイティブアプリケーションとウェブアプリケーションの利点を双方保持した、ハイブリッドアプリケーションの形態が注目されている。ハイブリッドアプリケーションは、そのユーザーインターフェース(UI)の全てあるいは大部分が、ウェブの標準言語で記述される。また、ウェブ標準言語で記述された内容から、ネイティブ言語で記述された機能を利用することもできる。すなわち、一つのアプリケーション内部に、ウェブ標準言語によるスクリプト層とネイティブ層を双方包含する構成となっている。
特許文献1では、携帯端末において、Webデータを用いて、プリンタが解釈可能なフォーマットを有する印刷データを生成し、プリンタに送信する構成が提案されている。
特開2015−026393号公報
しかしながら、特許文献1では、Webデータの表示におけるサイズ制限について考慮していなかった。例えば、ウェブの機能を使って画像を配置したコンテンツを表示する場合、表示の高速化のために画像サイズに対する制限がかかる場合がある。これは、ウェブの機能が表示を前提としており、高解像度の画像は表示のパフォーマンスを低下させてしまうため、OS側で制限をかけていることによる。
上記理由により、ウェブの機能を使って高解像度の画像が含まれたコンテンツを印刷する場合、画像のサイズ制限がかかり、印刷物が低画質になってしまうという課題があった。
本発明は、上記課題を鑑み、ウェブの機能を利用して高解像度の画像が含まれた印刷コンテンツを印刷する場合でも、高画質な印刷物を得ることを目的とする。
上記課題を解決するために本願発明は以下の構成を有する。すなわち、プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層と、予め翻訳され前記プロセッサで実行されるための命令セットを含む第2のプログラム層とを包含するアプリケーションが動作可能な情報処理装置であって、前記第1および第2のプログラム層の少なくとも一方が動作することにより、印刷コンテンツに配置される画像の情報および前記情報処理装置の情報のうちの少なくとも一つに基づいて前記画像の分割条件を決定する決定手段と、前記第2のプログラム層が動作することにより、前記決定手段で決定した分割条件に従って前記画像を分割して分割画像を作成する分割手段と、前記第1のプログラム層および前記第2のプログラム層の少なくとも一方が動作することにより、前記分割画像を配置した印刷コンテンツを構築する構築手段と、前記第2のプログラム層が動作することにより、前記分割画像を配置した印刷コンテンツをレンダリングしてレンダリング画像を生成するレンダリング手段と、前記第2のプログラム層が動作することにより、前記レンダリング画像を用いて印刷データを生成する生成手段とを備える。
本発明では、ウェブの機能を利用して高解像度の画像が含まれた印刷コンテンツを印刷する場合でも、高画質な印刷物を得ることができる。
本発明に係るハードウェアの構成例を示す図。 本発明に係るソフトウェアの構成例を示す図。 本発明に係る処理の流れを示すフローチャート。 本発明に係る写真画像選択処理のフローチャート。 本発明に係る画像処理のフローチャート。 本発明に係るスタンプ追加処理のフローチャート。 本発明に係るプリンタ設定処理のフローチャート。 本発明に係るレンダリング&プリント処理のフローチャート。 本発明に係る画面の構成例を示す図。 本発明に係るタイル状分割、帯状分割を説明するための図。 本発明に係るバンドSVGからの画像取得を説明するための図。 本発明に係る分割画像の作成処理のフローチャート。 第二の実施形態に係る画像の分割条件を決定するためのテーブルの例を示す図。 本願発明に係るプログラムコードの記述例を示す図。 本願発明に係るプログラムの記述例を示す図。 本願発明に係るプログラムの記述例を示す図。 本願発明に係るプログラムの記述例を示す図。 本願発明に係るプログラムの記述例を示す図。 本願発明に係るプログラムの記述例を示す図。
以下、添付の図面を参照して、本発明を好適な実施形態に基づいて詳細に説明する。
<第一の実施形態>
以下、携帯型の情報処理装置である携帯端末上で、本発明に係るハイブリッドアプリケーションによる写真印刷アプリケーションを動作させ、ユーザーが選択した画像に対して、画像処理を適用した後に、コンテンツを印刷するまでの手順について説明する。
なお、印刷に使用されるコンテンツはウェブ標準言語(HTML(Hyper Text Markup Language)、CSS、JavaScript(登録商標)等)を用いて記述される。本実施形態ではHTMLにおけるグラフィック表記手法の一つであるSVG(Scalable Vector Graphics)で印刷コンテンツを記述した例を用いて説明を行う。しかしこれに限定するものではなく、例えば、HTMLでグラフィックを記述するのに使用されるCanvasを用いてもよい。
[ハードウェア構成]
図1は、本実施形態に係るシステムの構成例を示す。本実施形態に係るシステムでは、ネットワークを介して、情報処理装置115、プリンタ112、サーバ114が接続される。情報処理装置115は、例えば、スマートフォンや携帯電話等の携帯型情報端末が該当する。図1において、CPU(中央演算装置/プロセッサ)100は、以下で説明する各種処理をプログラムに従って実行する。図1において1つのCPU100が示されているが、複数のCPUあるいはCPUコアによって構成されていてもよい。ROM101は、CPU100により実行されるプログラムを記憶している。RAM102は、CPU100によるプログラムの実行時に、各種情報を一時的に記憶するためのメモリである。
2次記憶装置103は、ハードディスクやフラッシュメモリ等の記憶媒体であり、ファイルや画像解析等の処理結果を保持するデータベース等のデータや、各種プログラムを記憶する。ディスプレイ104は、各種処理を実現するための操作を受け付けるためのUI(ユーザインタフェース)や、実行された処理による処理結果等の各種情報を表示する。ディスプレイ104は、タッチセンサ105を備えてもよい。
内部撮像デバイス110は撮像を行い、撮像によって得られた画像データは、所定の画像処理を経た後、2次記憶装置103に保存される。また、画像データは、外部IF(インタフェース)108を介して接続された外部撮像デバイス111から読み込まれてもよい。
外部IF(インタフェース)109は、インターネット113等のネットワークを介して外部装置と通信を行うことができる。加速度センサ106は、情報処理装置115自身の位置姿勢に関する加速度情報を取得することができる。
外部IF107〜109は、有線通信と無線通信の内、少なくともいずれかの通信形態を有するインタフェースであり、利用する通信形態に応じて外部デバイス(プリンタ112あるいはサーバ114)との通信を行う。情報処理装置115は、外部IF107〜109を介して、インターネット113に接続されたサーバ114より画像データを取得したり、プリンタ112に対し画像データ等を出力することができる。有線通信には、例えば、USB、イーサネット(登録商標)等がある。無線通信には、無線LAN、NFC(Near Field Communication)、Bluetooth(登録商標)、赤外線通信等がある。
情報処理装置115の動作に必要な電源は、バッテリ117によって供給される。情報処理装置115が備える各種構成要素は、内部バス116を介して相互に接続され、CPU100は、内部バス116を介して、各種構成要素を制御する。なお、本実施形態では、情報処理装置115が、情報処理装置115が備える制御部(CPU100)によって実行されるプログラム等のソフトウェアの実行場所(ソフトウェア実行環境)となる。
なお、ここでは、外部デバイスの一例としてプリンタを例に挙げて説明するが、これに限定するものでは無く、複合機(MFP)など他の画像形成装置やFAX等の通信装置であってもよい。
[ソフトウェア構成]
図2は、情報処理装置115で動作するソフトウェアの構成例を示す。情報処理装置115は、スクリプト層210、ネイティブ層220、及びOS層230のプログラムを実行する。これらの各層は、CPU100がROM101あるいは2次記憶装置103に記憶されている対応するプログラムを読み出して実行することにより実現される。
スクリプト層210は、HTML5やCSS3、及びJavaScript等のウェブ標準言語を用いて、テキストデータにより命令セット(コンテンツの描画や画像の表示、動画の再生等)が記述されているプログラム層である。スクリプト層210では、アプリケーション実行環境上で、そのアプリケーション実行環境に存在するプロセッサ(例えば、CPU100)を用いて、テキストデータの各種命令セットを翻訳して実行する。その実行形態としては、実行の度に命令文を一行ずつ動的に翻訳する場合、アプリケーションを起動した際に翻訳する場合、もしくは、アプリケーションを情報処理装置115にインストールした際に翻訳する場合などが考えられる。
以後、スクリプト層210で処理することや内容をスクリプトと呼ぶ。スクリプトの命令を情報処理装置115内で翻訳する形態の例として、ネイティブ層220やOS層230が備えるインタプリタの機能を使用することが挙げられる。本実施形態では、アプリケーションのUIの大部分が、スクリプトで記述されていることを想定している。
ネイティブ層220は、アプリケーション実行環境以外で予め翻訳(コンパイル)された命令セットが記述されているプログラム層である。形態としては、CもしくはC++といった高水準言語で記述されたコードが、予めアプリケーションの開発者のPCやサーバ上でコンパイルされ、CPU100が解釈可能な命令の集合体となっている。以後、ネイティブ層220で処理することや内容、OS層230の機能をネイティブ層220から呼び出すことを含めてネイティブと呼ぶ。なお、ネイティブ層220の別の実装系として、Java(登録商標)が挙げられる。Java(登録商標)は、C/C++と類似の高水準言語であり、予めアプリケーション開発時の開発環境上で中間コードに翻訳される。翻訳された中間コードは、各OSが備えるJava仮想環境上で動作する。本実施形態においては、このようなプログラム形態も、ネイティブ層220の一種に含める。
OS層230は、情報処理装置115が備えるオペレーティングシステム(Operating System:OS)に対応する。OS層230は、ハードウェア機能の使用をアプリケーションに提供する役割及び固有の機能を有する。OS層230は、API(Application Programming Interface)を備え、スクリプト層210やネイティブ層220からOS層230が有する機能を使用することができる。
本実施形態では、スクリプト層210からネイティブ層220の呼び出しを可能にすることをバインディング、もしくはバインドと呼ぶ。ネイティブの各種機能は、APIを備え、該APIをスクリプトが呼び出すことでネイティブの機能を使用することができる。このようなバインディング機能は、通常、各種OSが標準的に備えている。本実施形態では、スクリプト層210とネイティブ層220を含むアプリケーションのことをハイブリッドアプリケーションと称する。
スクリプト層210の画像取得部212は、ネイティブ層220に対し画像データの取得を要求する。画像取得部212の要求は、例えば、画像のパスを指定する方法や、ダイアログ表示を促す方法等が挙げられる。
ネイティブ層220の画像読込部228は、画像データ群229から画像データを取得する。画像データ群229からの画像データの取得方法は、スクリプト層210の画像取得部212からの要求に依存する。要求方法は、UI上に提供されているダイアログボックスから選択する方法や、画像のパスから直接画像を選択する方法などが挙げられる。画像読み込み時は画像に対して一意なIDが割り当てられる。スクリプト層210から、ネイティブ層220の画像を指定する場合は割り当てられたIDを利用すればよい。
ネイティブ層220のデータ変換部221は、ネイティブ層220のデータ(例:バイナリ形式の画像データやパラメータ)をスクリプト層210で利用できる形式のデータ(例:テキスト形式(BASE64)の画像データやJSON形式など)に変換する。また、データ変換部221は、スクリプト層210から送られてきたデータ(例:テキスト形式(BASE64)の画像データやJSON形式など)をネイティブ層220で利用できる形式のデータ(例:バイナリ形式の画像データやパラメータ)にする変換も行う。
スクリプト層210のデータ変換部215は、スクリプト層210のデータ(例:テキスト形式の処理パラメータ)をネイティブ層220で利用できる形式のデータ(例:テキスト形式(JSON形式)の処理パラメータ)に変換する。
ネイティブ層220のデータ保持部227は、画像読込部228で読み込んだ画像データ、画像処理部224で画像処理が施された画像データ、分割した画像群を保持する。保持される画像データは、例えば、RGB画像データに展開されており、すぐに画像処理が実行できる形式になっている。
スクリプト層210のコンテンツ描画部214は、印刷のためのコンテンツをウェブ標準言語を利用して記述する。この記述には、コンテンツ操作部217で操作されたスクリプトも反映される。コンテンツ描画部214で記述されたコンテンツのスクリプトは、OS層230のインタプリタ232で解釈され、ディスプレイ104に表示される。
スクリプト層210の画像処理制御部213は、画像処理に用いる補正パラメータと、処理対象となる画像を決定し、ネイティブ層220の画像処理部224に画像処理を要求する。補正パラメータはデータ変換部215でネイティブ層220へ送信できる形式へ変換された後、処理対象となる画像のIDと共にネイティブ層220へ送信される。
ネイティブ層220の画像処理部224は、スクリプト層210の画像処理制御部213で指定された画像に対し画像処理を施す。その際、どのような画像処理を施すかは、画像処理制御部213で設定されたパラメータにより決定される。画像の指定については、先述のIDを利用する方法に加え、スクリプト層210から画像のパスを受け取る、画像データごと受け取る方法などが用いられてもよい。
OS層230のタッチイベント233は、ディスプレイ104のタッチに関する情報を取得する。タッチに関する情報とは、ディスプレイ104のタッチ検知、タッチされた位置情報等が挙げられる。取得したタッチに関する情報は、ネイティブ層220経由でスクリプト層210のコンテンツ操作部217に送信される。
スクリプト層210のコンテンツ操作部217は、例えば、画像取得要求の応答としてネイティブ層220から画像データが返却された際、その画像データを反映すべく、スクリプト命令を変更する。
スクリプト層210のプリンタ制御部211は、プリンタ検知の要求、プリンタ設定画面の表示、プリント情報の生成と送信を制御する。プリンタ設定画面では、用紙のサイズ、用紙の種類、カラー・モノクロ等のプリンタ設定がなされる。ここで設定された項目を基に、ネイティブ層220のプリンタデータ生成部223はプリンタデータを生成する。
ネイティブ層220のプリンタデータ生成部223は、スクリプト層210のプリンタ制御部211からの要求を基に、プリンタ通信に必要なデータ、コマンドを生成する。プリンタ通信に必要なデータとは、通信プロトコルに則ったデータであり、コマンドとは、印刷やスキャン等、プリンタの動作を決定するためのデータである。よって、プリンタデータ生成部223は、プリンタの動作を決定するためのコマンドを含むプリンタデータを生成する。
ネイティブ層220の外部デバイス通信部225は、情報処理装置115と接続しているプリンタなどの外部デバイスとの通信を行うためのインタフェースである。外部デバイス通信部225は、プリンタデータ生成部223から受け取ったデータを送信したり、外部デバイスからの情報を受信する。本実施形態では、OS層230のプリンタ通信部231を介して通信するが、ネイティブ層220の外部デバイス通信部225が直接、外部IF107へデータを送信してもよい。OS層230のプリンタ通信部231が、外部デバイスが用いる通信プロトコルに対応していればその機能を用いてよい。一方、プリンタ通信部231が、外部デバイスが用いる通信プロトコルに対応していなければネイティブ層220の外部デバイス通信部225がその通信プロトコルに従って通信する。
OS層230のインタプリタ232は、スクリプト層210で生成されたウェブ標準言語で記述された命令を解釈・実行する。例えば、画像の描画等の命令は、インタプリタ232を通して実行され、ディスプレイ104に表示される。
画像データ群229は、画像データを保持している領域である。データ保存部226は、必要に応じて、データ保持部227が保持する画像データを画像データ群229に保存させる。
スクリプト層210のレンダリング要求部216は、ネイティブ層220のレンダリング部222にレンダリングを要求する。その際、スクリプト層210のコンテンツ描画部214で記述されている内容をデータ変換部215で変換してからレンダリング部222に渡す。レンダリング部222に渡す前に必要な処理があれば、コンテンツ操作部217を利用して、コンテンツ記述を編集してもよい。また、コンテンツ記述を直接編集するとUIに影響がある場合には、先述の操作はコンテンツ記述の複製を作成し、そちらを利用するようにしてもよい。
レンダリング部222は、スクリプト層210のレンダリング要求部216から受け取った内容から、プリンタ112へ送信するため画像データ(レンダリング画像)を生成するためのレンダリングを行う。このレンダリングには、例えば、スクリプト層210でプリンタ112への出力解像度で画像を生成することが含まれる。なお、ネイティブ層220におけるレンダリング結果、及び、生成途中の画像はディスプレイ104に表示されない。
OS層230の状態検知部234は、利用しているデバイス(ここでは、情報処理装置115)の状態を検知する。例えば、アプケーションを利用している状態で、着信などの他の通知があった場合、そのイベントの発生や状態変化をネイティブ層220へ送信する。
[処理フロー]
図3は、ユーザ操作を含む、本実施形態に係る処理を示すフローチャートである。まず、図3を用いて、各処理の概要を説明し、各処理の詳細については図4〜図8を用いて後述する。なお、本願のフローチャートの各ステップの処理は、情報処理装置115のCPU100が、ROM101あるいは2次記憶装置103に記憶されているプログラムを実行することにより実現される。また、図3に示す各ステップは、UIの1つである図9に示すアプリケーション画面900に対するユーザ操作に従って遷移する。アプリケーション画面900は、スクリプト層210によって生成される。アプリケーション画面900への操作は、例えば、タッチセンサ105を介して実現される。
S31にて、CPU100は、アプリケーション画面900の写真画像選択ボタン901に対するユーザ操作(タッチ操作入力も含む。以後も同様)を検知すると、その操作に応じて、任意の画像を選択する。ユーザが画像を選択すると、CPU100は、ネイティブ層220で特定の処理を実行した後、アプリケーション画面900の描画領域906に選択された画像を表示する。
S32にて、CPU100は、表示されている画像の輝度を調整するためのスライドバー902に対するユーザ操作を検知すると、そのユーザ操作に応じて、画像処理時に利用する補正パラメータを設定する。なお、図9では輝度を調整するためのスライドバーを備える、輝度とは異なる項目について調整を受け付けても良い。例えば、図9のUIが、濃度や解像度等の調整を受け付けてもよい。そして、実行指示のもと、CPU100は、設定した補正パラメータに従って、表示されている画像に画像処理を施し特定の処理を行う。その後、CPU100は、その処理内容及び処理結果を描画領域906に表示する。
S33にて、CPU100は、スタンプ追加ボタン903に対するユーザ操作を検知すると、スタンプを表示する。スタンプ一覧に対するユーザ操作によってスタンプの選択を検知すると、CPU100は、選択されたスタンプを描画領域906に追加・表示する。さらに、スタンプに対するタッチイベント(タップ、スワイプ)の検知することで、スタンプの拡大・縮小、移動などが実現可能となる。この検知機能はWeb標準言語に標準として備えられ、例えば、addEventListener関数がそれに該当する。
S34にて、CPU100は、プリントボタン905に対するユーザ操作を検知すると、プリントに必要な情報を設定するための設定画面911(図9(b))を表示する。プリントに必要な情報とは、例えば、図9(b)の設定画面911に示されるように、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定項目がある。これ以外にも、両面/片面、モノクロ・カラー等、使用するプリンタが有する機能に応じて、設定可能な設定項目が構成される。
S35にて、CPU100は、設定画面911の設定完了ボタン912に対するユーザ操作を検知すると、描画領域906に表示されている画像を、プリンタ112に出力するためのデータへ変換するために、レンダリングを実行する。また、設定完了ボタン912へのユーザ操作に伴って、設定画面911にて指定された設定内容が反映され、設定画面911が閉じられる。
レンダリングによってデータを作成した後、CPU100は、作成されたプリント用データを、プリンタ制御のコマンドと共にプリンタデータとしてプリンタ112に送信する。以上の処理により、ユーザにより選択された画像がプリンタ112で印刷される。
なお、図3に示す処理は写真印刷アプリケーションが提供する機能の一例であり、処理内容はこれに限定されず、処理順序もこれに限定されるものではない。本実施形態において、プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層をスクリプト層210、プロセッサ以外で予め翻訳されプロセッサにて実行される命令セットを含む第2のプログラム層をネイティブ層220と定義する。そして、これらの第1のプログラム層と第2のプログラム層とを包含するプログラムがハイブリッドアプリケーションを実現する。
続いて、図3に示した各処理の詳細について説明する。上述したように、各処理は情報処理装置115のCPU100が、ROM101あるいは2次記憶装置103に記憶されているプログラムを実行することにより実現される。ここでは、ハイブリッドアプリケーション(スクリプト層およびネイティブ層)、およびOS(OS層)のいずれのプログラムにより、各処理工程が行われるかを明確にしながら説明を行う。
[写真画像選択処理の詳細]
写真画像選択とそれに伴う画像処理について説明する。ユーザが図9(a)に示した写真画像選択ボタン901を押下することでS31が開始する。図3のS31の写真画像選択の詳細について、図4を用いて説明する。図4において、S401、S411はCPU100がスクリプト層210のプログラムを用いて実行する処理であり、S402〜S410はCPU100がネイティブ層220のプログラムを用いて実行する処理である。
S401にて、スクリプト層210は、写真画像選択ボタン901に対するユーザ操作に応じて画像選択をネイティブ層220に要求する。ここでの要求では、バインディング機能によりスクリプト層210からネイティブ層220固有の画像選択APIを直接呼び出す。なお、ネイティブ層220固有の画像選択APIを直接呼び出せないのであれば、ネイティブ層220にスクリプト層210から直接呼び出せる関数を用意し、その関数内にネイティブ層220固有の画像選択APIを呼び出す関数を記述しておけばよい。これは、ラッパを予め用意しておく方法である。これとは別に、画像選択UIを独自に実装するという構成であってもよい。
S402にて、ネイティブ層220は、画像選択UIをディスプレイ104に表示する。ネイティブ層220は、表示された画像選択UIに対するユーザ操作に基づいて、任意の画像を1枚選択する。なお、本実施形態ではデバイス内の画像フォルダから画像を1枚選択しているが、これに限定されるものではない。例えば、インターネット上の画像や、脱着可能な記憶媒体内の画像を選択してもよいし、デバイスのカメラ機能を利用してその場で画像を撮影してこれを選択してもよい。
S403にて、ネイティブ層220は、選択された画像を一意に識別するための識別情報(ID)を生成する。このIDは、数値、文字列等、ネイティブ層220からスクリプト層210へ送信できる形式であればどのような形でもよい。なお、IDの生成はネイティブ層220にて行うことに限定するものではなく、スクリプト層210で生成してネイティブ層220に送る方法でもよい。
S404にて、ネイティブ層220は、選択された画像を取得する。例えば、選択した画像が画像ファイルの状態であれば、ネイティブ層220は、ファイルを開き、その内容を読み取る。
S405にて、ネイティブ層220は、取得した画像をRGB空間に展開する。ここでは、RGBデータをネイティブ層220に保持しているが、これに限定されるものではない。例えば、JPEG(Joint Photography Expert Group)、PNG(Portable Network Graphics)、RGBA形式などで保持してもよい。RGBA形式とは、画像データのRGB(赤、緑、青)成分に、透明度としてAを組み合わせたものである。
S406にて、ネイティブ層220は、展開したRGBデータを分割し、分割領域毎のRGBデータを作成する。分割領域毎のRGBデータを「ブロック画像」と記述する。このようなブロック画像を生成する理由として、画像のサイズ制限回避がある。上述したように、ハイブリッドアプリケーションにおいて、ウェブの機能を利用して画像を配置したSVGコンテンツを表示する場合、表示の高速化のために画像サイズ制限がかかる場合がある。そのため、ハイブリットアプリケーションで高解像度の画像が含まれたコンテンツを印刷する場合、画像のサイズ制限により、印刷物が低画質になってしまう。具体的には、制限されたサイズ内に収まるように解像度が変更される。本実施形態において、ブロック画像への分割は、これを回避するために行われる。ブロック画像は、タイル状と帯状のどちらでもよい。タイル状とは、ブロック画像の横幅・縦幅が、両方とも分割元データの横幅・縦幅に満たない場合を示す。帯状とは、ブロック画像の横幅・縦幅のどちらか一方のみが、分割元データに対して満たない場合を示す。
ブロック画像への分割パターン例について、図10に示す。図10において、元画像を4000px×3000pxからなる1200万画素の画像とする。この元画像に対し、3つの帯状のブロック画像に分割した2つの例(等量分割および上限内分割)と、4つのタイル状のブロック画像に分割した2つの例(等量分割および上限内分割)を示す。等量分割は、元画像を同じサイズのブロック画像に等分する分割方法である。また、上限内分割は、所定の上限値よりも小さなサイズのブロック画像となるように元画像を分割する方法である。
帯状の分割は、比較的処理が容易であるというメリットがある。また、印刷コンテンツのレンダリングをバンド分割して行う時に、バンドの境目に画像がある場合は、横方向の帯状で分割していた方がレンダリングに使用する画像が少なくなるというメリットもある。一方、タイル状は、分割のための画素数Xより横幅または縦幅が小さい場合に使用することができる。例えば、横幅3000pxの画像を1500pxずつに極小分割する際には、タイル状で分割する必要がある。
より具体的には、図10に示すように、帯状のブロックに分割する場合、400万画素の3枚の画像に分割する等量分割や、500万画素、500万画素、200万画素の3枚に分割する上限内分割がある。等量分割は、分割数が固定であった場合、使用メモリを最小化できるメリットがある。一方、上限内分割は、分割数を最小にできるメリットがある。他に、画素数が大きい場合、500万画素以下になるまで画像の等量分割を繰り返して条件を決定する方法が考えられる。例えば、1200万画素を2分割して600万×2、さらに2分割して300万×4の画像とする。タイル状のブロック画像についても、同様の考えで分割条件を決定できる。
ここで、図12を用いて、S406における分割画像を作成する処理の詳細について説明する。ここでの処理は、例えば、ネイティブ層220の画像処理部224にて行われる。
S1201にて、ネイティブ層220は、画像情報の取得を行う。本実施形態では、ブロック画像へ分割する条件は、コンテンツに配置する画像情報から決定する。画像情報は、垂直方向の画素(px:ピクセル)数(W)、水平方向の画素数(H)を含む。これらの情報は、画像を読み込む時点で容易に取得することが可能である。例えば、画像の展開前元画像がJPEG画像であった場合、EXIF情報から取得することも可能である。
S1202にて、ネイティブ層220は、取得した画像情報から、画像の総画素数iを算出する。総画素数iは、i=W×Hで求められる。例えば、図10の元画像の例にて示すように、画像の画素数がW=4000px、H=3000pxの場合、i=4000×3000=1200万画素となる。
S1203にて、ネイティブ層220は、総画素数iが所定の値X(例えば500万画素)を超えているか否かを判定する。所定の値Xを超えていれば(S1203にてYES)、S1204へ進み、超えていなければ(S1203にてNO)、分割画像を作成せずに、分割画像の作成処理を終了する。ここでの所定の値Xについては、情報処理装置115のメモリサイズやOSにて制限される上限値等に基づいて決定される。
S1204にて、ネイティブ層220は、分割条件の決定をする。画像の総画素数iが1200万画素である場合、Xを超えない範囲でブロック画像へ分割する条件を決定する。本実施形態において、分割条件は、Xを超えない範囲であれば、どのような条件でもよい。例えば、上述したように、分割の個数を、所定の個数で分割する条件や、1つのブロック画像が所定の画素数未満になるように分割する条件が挙げられる。なお、本実施形態では分割条件の決定はネイティブ層220で行っているが、取得した画像情報をもとにスクリプト層210にて分割条件を決定する構成としてもよい。
S1205にて、ネイティブ層220は、S1204にて決定した分割条件に従って、画像を分割する。そして、本処理フローを終了する。
以下では、元画像が600万画素として、帯状に二分割して300万画素のブロック画像を2つ生成したものとして説明を行う。図4の説明に戻る。
S407にて、ネイティブ層220は、展開したRGBデータおよび生成したブロック画像群を、S403で生成したIDと関連付けてデータ保持部227に保持する。ここでの関連付け方法としては、例えば、IDと、RGBデータもしくはブロック画像群とを有するオブジェクトを作成することにより、IDから、RGBデータもしくはブロック画像群を特定可能にするという方法がある。IDの関連付け方法はこれに限定するものではなく、IDからRGB画像およびブロック画像群を特定できればどのような方法を用いてもよい。
また、RGB画像およびブロック画像群はオンメモリで保持しておいてもよいし、ファイルとして保存しておいてもよい。ここでは、ブロック画像群を、スクリプト層210が利用しやすいDIB(Device Independent Bitmap)フォーマットに変換してファイルに保存しておくこととする。この場合、IDとの関連付けは「block1_ID.bmp」、「block2_ID.bmp」のように、決められた名前にIDを追記することで実現可能である。画像フォーマットは、DIB以外を利用してもよい。
S408にて、ネイティブ層220は、RGBデータからUIで利用するための縮小RGBデータを作成する。画像の縮小処理はOSの機能を利用してもよいし、アプリケーション独自の実装で行ってもよい。スクリプトは、返却された画像が大きい場合、画像をUIの大きさ、ディスプレイの解像度に合わせて縮小処理を行う。ここで、UIに対して過多な画素数の画像をスクリプトで扱うと、CPUに処理負荷が掛かり、かつ、大容量のメモリが必要となるため無駄が生じる。従って、本実施形態では、その無駄を回避するためにS408において縮小処理を実行する。縮小処理の目安としては、例えば、ディスプレイの表示サイズやUIで画像を表示する箇所のサイズを上限にし、それを越える画素数を持つ画像に対して縮小処理を行う。その画像に対して画像処理を施す場合にも、元の画像(RGB展開した画像データ)に対して画像処理を施し、縮小処理を実行後に縮小された画像をスクリプト層に引き渡す。
S409にて、ネイティブ層220は、S408で作成した縮小RGBデータをスクリプト層210で利用可能な形式(サポート可能な形式)の画像データに変換する。本実施形態では、変換するデータ形式をJPEG形式とする。
S410にて、ネイティブ層220は、JPEG形式のデータをBASE64データに変換し、生成したIDと共に、スクリプト層210へ送信する。これは、ネイティブ層220で扱うJPEGデータは、スクリプト層210では直接利用できない形式のためである。BASE64とは、バイナリデータを文字列データとして扱うためのエンコード方式であり、JavaScript(登録商標)で利用可能なデータ形式である。なお、スクリプト層210で画像を扱う方法として、ネイティブ層220でJPEGを一旦ファイルに保存した後、その保存パスを利用する方法を用いてもよい。
S411にて、スクリプト層210は、ネイティブ層220で変換されたBASE64データを受信し、描画領域に画像を描画する。具体的には、スクリプト層210は、指定されたBASE64データをOS層230のインタプリタ232に送信する。そして、インタプリタ232がBASE64データのスクリプトを解釈し、描画領域に画像として表示する。ここで、描画領域に、BASE64データを反映させるサンプルコードの一例を、図14(a)示す。
図14(a)の例では、図9(a)に示す描画領域906に対しSVGが動的に追加する方法を示している。後述するスタンプに関しても同様の操作で描画領域906に追加することが可能である。
[画像処理の詳細]
図9(a)に示したスライドバー902をユーザが操作することでS32が開始する。図3のS32の画像処理の詳細について、図5を用いて説明する。図5において、S501〜S503、S510、S512は、CPU100がスクリプト層210のプログラムを用いて実行する処理であり、S504〜S507、S509はCPU100がネイティブ層220のプログラムを用いて実行する処理である。ここでは、画像の明るさを変更する画像処理を実行することとし、その変化度合はユーザが操作したスライドバー902の設定値が利用されるものとする。
S501にて、スクリプト層210は、補正パラメータを設定する。補正パラメータはスライドバー902の値を利用する。
S502にて、スクリプト層210は、インジケータを起動し、ディスプレイ104に表示する。インジケータとは、ユーザに処理中である旨を伝える表示であり、プログレスバーや、時計マーク、図形の回転等のなどが利用される。インジケータは、例えば、実行時間のかかる処理を行う場合に表示される。また、本実施形態ではスクリプト層210でインジケータの起動と停止を行っているが、ネイティブ層220でインジケータを利用することも可能である。
S503にて、スクリプト層210は、S501にて設定された補正パラメータと画像処理を実行する画像のID(S403で生成した画像のID)をJSON形式としてネイティブ層220へ送信する。なお、JSONは、JavaScript Object Notationであり、JavaScriptで利用できるデータ記述方法である、JSONは、ネイティブ層220と送受信可能なデータフォーマットの一つである。例えば、IDと輝度補正の値を送るプログラムコードの記述例を図14(b)に示す。
S504にて、ネイティブ層220は、スクリプト層210から取得したIDを基に、図4のS405で展開されたRGB画像を特定する。
S505にて、ネイティブ層220は、取得した補正パラメータを基に、RGB画像に対して明るさ補正を実行する。本実施形態ではスライドバー902に設定された「+20」の値を基に、全ての画素のRGBの値に20を加算する処理を行う。画像処理については、補正パラメータに他の画像処理情報を追加することで、実行する画像処理を増やすことも可能である。例えば、公知のモノクロ変換、公知のセピア色変換、「ImageFix」、「RedeyeFix」、「SmartSkin」などを追加することも可能である。
「ImageFix」とは、写真画像を、人物顔検出やシーン解析部を用いて自動で解析し、適切な明るさ・ホワイトバランス調整を行う機能(顔検出機能)である。「RedeyeFix」とは、画像中から自動で赤目画像を検出して補正する機能(赤目検出機能)である。「SmartSkin」とは、写真画像から人物の顔を検出して、該顔の肌領域を好適に加工する機能である。なお、画像処理機能の種類は、これに限定されるものではなく、用途や目的に応じて、様々な画像処理を利用してよい。また、画像処理はOS層230が提供する機能を利用してもよい。
S506にて、ネイティブ層220は、S505で画像処理が実行されたRGB画像からS406と同様の処理でブロック画像群を作成する。ここで、S407でIDと関連付けたブロック画像群は、S506で作成したブロック画像群と置き換わり、S406で作成されたブロック画像群は破棄される。
S507にて、ネイティブ層220は、S505で画像処理の実行されたRGB画像から、UIで利用するための縮小RGB画像を作成する。
S508にて、ネイティブ層220は、S507で作成された縮小RGB画像をスクリプト層210で利用可能な形式(サポート可能な形式)の画像データに変換する。ここでは、S409と同様に、JPEG形式のデータに変換する。
S509にて、ネイティブ層220は、スクリプト層210にインジケータの停止を要求する。これは、ネイティブ層220から、スクリプト層210で定義されているインジケータ停止の関数を呼び出すことで実現する。
S510にて、スクリプト層210は、ネイティブ層220からの要求に基づいて、インジケータを停止し、ディスプレイ104の表示からインジケータを消去する。
一方、S511にて、ネイティブ層220は、変換されたJPEG形式のデータをBASE64データに変換し、スクリプト層210へ送信する。
S512にて、スクリプト層210は、ネイティブ層220で変換されたBASE64データを受信し、それに従って、S411にて描画した画像を変更する。具体的には、スクリプト層210は、指定されたBASE64データをOS層230のインタプリタ232に送信する。そして、インタプリタ232がBASE64データのスクリプトを解釈し、すでにある描画領域に画像データの描画結果を表示する。以上の処理により補正パラメータに基づく画像処理が適用された画像データが表示される。
本実施形態では、図9(a)に示すようなスライドバー902の変化によって画像処理が開始されるが、その開始方法はこれに限定されるものではない。例えば、画面にプラスボタン、マイナスボタンが配置され、そのボタンを押すごとに明るさが調整されるという構成であってもよい。他にも、画像の右半分がタッチされたら明るさを増す、左半分がタッチされたら暗くするなど、タッチイベントと連動させた処理によって実現してもよい。また、ユーザ操作で補正パラメータだけを変化させ、画像処理の実行指示があった時に、全ての画像処理が一括して行われるという方法であってもよい。
[スタンプ追加]
ユーザが、図9(a)に示すスタンプ追加ボタン903を押下し、ハートスタンプ908を選択すると、図3のS33の処理が開始する。図3のS33のスタンプ追加の詳細について、図6を用いて説明する。以下の説明では、ユーザ操作によって、図9(a)のアプリケーション画面900のスタンプ追加ボタン903が押下されてスタンプ一覧が表示された後、ハートスタンプ908が選択された場合を例に挙げる。なお、スタンプ追加は、CPU100がスクリプト層210のプログラムを用いて実行する処理である。また、利用するスタンプ(スタンプ画像)はアプリケーションが予めリソースファイルとして保持していることとする。
S601にて、スクリプト層210は、スタンプとして利用される画像が保存されているパスを取得する。スタンプは予め定義されたファイルを読み込むため、ハートスタンプ908をユーザがタップした際に、ハートスタンプが保存されているパスが返却される構成としておけばよい。
S602にて、スクリプト層210は、スタンプ描画用のオブジェクトを作成する。
S603にて、スクリプト層210は、作成したスタンプ描画用オブジェクトにS601で取得したパスの情報をセットする。S602及びS603の処理はS411で画像を追加した時とほぼ同様の方法で実現できる。S411との違いは、画像の情報元がBASE64の画像データではなく、スタンプのパスとなっている点である。ここで、スタンプに対してタッチイベントを付与してもよい。タッチイベントを付与すると、スタンプがタップされたか、スワイプされたか等のタッチ操作に関する情報を取得可能になる。この情報を利用することでスタンプを移動したり、拡大縮小を行うなどの操作が可能となる。
S604にて、スクリプト層210は、S603の内容がインタプリタ232で解釈され、描画領域906へユーザ操作により選択されたスタンプが追加される。そして、本処理フローを終了する。
[プリンタ設定]
図9(a)のプリントボタン905をユーザが押下することで図3のS34の処理が開始する。図3のS34のプリンタ設定の詳細について、図7を用いて説明する。図7において、S701、S709〜S711は、CPU100がスクリプト層210のプログラムを用いて実行する処理である。S702、S704、S705、S707、S708、S712はCPU100がネイティブ層220のプログラムを用いて実行する処理である。S703とS706は外部デバイス(ここでは、プリンタ112)が実行する処理である。
S701にて、スクリプト層210は、ネイティブ層220へデバイス情報としてのプリンタ情報取得を要求する。これは、プリンタ112と通信を行うために要求される。要求の方法は、画像選択時と同様に、バインディング機能によりスクリプトからネイティブ固有のAPIを呼び出す。ネイティブ層220には、スクリプト層210から直接呼び出せる関数もしくはその関数を間接的に呼び出す、いわゆる、ラッパが予め用意される。例えば、GetPrinterInfoというネイティブ関数を用意しておき、スクリプト側からその関数を呼び出す。このようにして、ネイティブ層220は、スクリプト層210からの外部デバイスとの通信の要求を取得する。通常、スクリプト層210からはセキュリティ上の制限で外部デバイスと直接通信することはできない。そのため、上記のように、スクリプト層210から、一旦、ネイティブ層220へ外部デバイス情報の取得を要求し、ネイティブ層220を介して外部デバイスと通信を行う。ネイティブ層220は、OS層230を介して、外部デバイス(例えば、プリンタ112)と通信する機能を備えている。
S702にて、ネイティブ層220は、スクリプト層210から関数を呼び出されると、プリンタの検索(いわゆるディスカバリー)を行う。例えば、同一の無線LANルータで繋がっているプリンタを検出する。ここでは、通信可能なプリンタの検出を行うため、例えば、Bonjour(登録商標)などのプロトコルにより、ブロードキャストやマルチキャスト等の方法を用いてプリンタに対して通信を試みる。
S703にて、プリンタは、情報処理装置115(ネイティブ層220)からの要求に応じて応答する。
S704にて、ネイティブ層220は、応答のあったプリンタのIPアドレスを検知して記憶する。
S705にて、ネイティブ層220は、応答のあったプリンタのIPアドレスに対し、プリンタ情報の提供を要求する。応答のあったプリンタが複数存在する場合、ネイティブ層220は、全てのプリンタに対して情報の提供を要求する。そのために、ネイティブ層220は、プリンタの情報を取得するためのコマンドを生成する。ここでのコマンドは、プリンタの動作を指定する命令であり、例えば、図15(a)に示すようなXML(Extensible Markup Language)で表現される。
図15(a)に示す各行の左側に書かれている「01:」等の数値は、便宜上、説明を行うために付加した行番号であり、本来のXML形式のテキストには記載されない。以下のプログラムコードの記述例においても同様であるとする。
1行目はヘッダであり、XML形式で記述していることを表す。2行目のcmdはコマンドの開始を意味する。xmlnsで名前空間を指定し、コマンドの解釈の定義を指定する。6行目の</cmd>は、コマンドの終了を示す。3行目は以後に内容を記載する宣言であり、5行目でその終了を示す。4行目には要求する命令が記載されており、<operation>と</operation>の間に実際の命令文言が存在する。命令文言であるGetInformationは、外部デバイスであるプリンタの情報を取得する命令である。例えば、プリンタが対応している用紙種類、サイズ、縁なし印刷機能の有無、印刷品位、等のケーパビリティ情報を提供するよう要求する。
尚、プリンタ情報取得コマンドの生成は、例えば、ROM101に予め記憶した固定のテキストを読み込んでもよい。また、XML等のテキスト形式に限らず、バイナリ形式で記述し、それに沿ったプロトコルで通信してもよい。また、生成したプリンタ情報取得コマンドは、HTTP等のプリンタが対応している通信プロトコルに従った形式で、外部デバイス通信部225を介してプリンタへ送信される。また、通信方法はこれに限定されるものではない。Wi−Fi(登録商標)ダイレクトやBluetooth(登録商標)、赤外線通信、電話回線、有線LAN、USBを用いた接続でもよい。
図7では、ネイティブ層220で、コマンドを生成する構成としているが、スクリプト層210で、コマンドを生成する構成であってもよい。その場合、スクリプト層210が、例えば、図15(a)に示すXML形式の命令文を含むコマンドを作成し、ネイティブ層220へ渡す。それを受けて、ネイティブ層220は、通信プロトコルに従った形式でプリンタへそのコマンドを送信する。
S706にて、プリンタは、情報処理装置115からコマンドを受信すると、デバイス情報であるプリンタ情報をXML形式で通信プロトコルに沿って、情報処理装置115へ送信する。図15(b)に、プリンタの情報の記述例を示す。
1行目はヘッダであり、XML形式で記述していることを表す。2行目のcmdはコマンドの開始を意味する。xmlnsで名前空間を指定し、コマンドの解釈の定義を指定する。21行目の</cmd>は、コマンドの終了を示す。
3行目は以後に内容を記載する宣言であり、20行目の</contents>までその内容は継続する。4行目でデバイスIDを示す。ここでは、本プリンタ情報を送信したプリンタの機種名が「Printer001」であることを表す。5行目に記述された情報については本実施形態では用いず、これに関しては、第二の実施形態にて述べる。本プリンタ情報を送信した6行目以降はプリンタが有する各モードについての記述である。<mode>から</mode>までで、1つのモードにおける情報が記述されている。6行目では、モードの番号が1である(mode=1)。以降の<media>は印刷用紙の種類、<size>は用紙サイズ、<quality>は印刷品位、<border>は縁あり/なしの情報をそれぞれ記述している。11行目の<dpi>は入力解像度を表しており、横方向が1200[dpi]、縦方向が1200[dpi]である。入力解像度についての詳細は後述する。
13行目以降は他のモードであるモード(mode=2)についての情報が記述されている。このように、プリンタの機種名と、そのプリンタが対応している全てのモードがこのXMLに記述されている。尚、プリンタ情報の記述方法はこれに限定されることはなく、タグ形式でないテキストや、バイナリ形式等の他の形式であってもよい。
また、ここではプリンタの印刷機能の情報を受け渡ししている例を記載しているが、本発明はこれに限定されるものではない。例えば、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を受け渡ししてもよい。画像処理の例としては、モノクロやセピア、彩度強調などの色変換、複数画像のレイアウト、ホワイトバランス補正、ノイズ除去、その他自動で写真を好ましい色や輝度に補正する処理などが挙げられる。
S707にて、ネイティブ層220は、プリンタからプリンタ情報を取得する。ネイティブ層220は、受信したプリンタ情報から、例えば、プリンタが有する全てのモードにおける印刷用紙の種類、サイズ、印刷品位、縁あり/なしの項目と項目数等を取得する。
S708にて、ネイティブ層220は、受信したプリンタ情報をスクリプト層210が解釈可能な形式に変換して、スクリプト層210へ送信する。つまり、ネイティブ層220は、プリンタとの通信によって得られた情報をスクリプト層210へ渡す。具体的には、ネイティブ関数を設けておき、バインディング機能を用いる。また、受け取ったXML形式のプリンタ情報で送信したり、タグなしのテキスト形式に変えて送信する等の方法を用いてもよい。加えて、スクリプト層210から特定のネイティブ関数を呼び出す毎に、その戻り値として情報を取得してもよい。また、ネイティブ関数に取得するモードなどの引数を渡し、その戻り値として情報を得てもよい。さらに、図14(b)を用いて上述したJSON文字列を用いた受け渡しや、スクリプト層210のデータ変換部215及びネイティブ層220のデータ変換部221を用いてBASE64等の文字列で受け渡しを行ってもよい。
S709にて、スクリプト層210は、ネイティブ層220から受信したプリンタ情報に基づいて、プリンタで利用できる機能を含む設定画面(図9(b))を生成し、表示する。これは、表示制御とも呼ばれる。接続可能なプリンタが複数ある場合は、スクリプト層210は、プリンタ名を表示し、設定画面911を表示する前にユーザに印刷するプリンタを選択させるための表示画面を生成する。そして、スクリプト層210は、選択されたプリンタに対応するプリンタ情報を用いて、選択されたプリンタの設定画面911を表示する。尚、プリンタの選択は、上記の方法に限らず、一番早く応答してきたプリンタや、より機能が多いプリンタ、印刷ジョブが混雑していないプリンタを選択する、等の方法であってもよい。
このように、スクリプト層210は、印刷用紙の種類・サイズ、印刷品位、縁あり/なし等のプリンタで利用できる機能を選択させる設定画面911を表示する。図16に設定画面のHTMLによる記述例を示す。
図16において、GetPaperSizeNum()、GetMediaTypeNum()、GetQualityNum()、GetBorderNum()はネイティブ関数であり、それぞれの項目数を取得する機能を備える。例えば、プリンタが対応している用紙サイズがA4、A5、B5、L判の4種類である場合、GetPaperSizeNum()は「4」を返す。
GetPaperSizeT(n)、GetMediaTypeT(n)、GetQualityT(n)、GetBorderT(n)もネイティブ関数であり、引数nの値番目の文字列を返す。ここでは、用紙サイズとして、A4、A5、B5、L判が順に保持されているものとする。この場合、用紙サイズのテキストを返す関数のGetPaperSize(0)の返り値は「A4」、GetPaperSize(1)の返り値は「A5」となる。これらの値は、プリンタから受信するプリンタ情報からネイティブ関数が取り出す。
GetPaperSizeV(n)、GetMediaTypeV(n)、GetQualityV(n)、GetBorderV(n)もネイティブ関数であり、引数nの値番目の文字列を返す。ここでは、用紙種類として、光沢紙が保持されているものとする。この場合、用紙種類のテキストを返す関数のGetMediaTypeT(n)の返り値は「光沢紙」のように、表示してユーザに示す文言である。これに対して、GetMediaTypeV(0)の返り値は「GlossyPaper」とプリンタが解釈可能な表現となっている。これらの文言や表現は、プリンタから送られてきた情報と結び付けてネイティブが決定する。例えば、プリンタから送られてきた情報より取り出した値が「GlossyPaper」であった場合、表示するテキストは「光沢紙」と決定する。決定の方法として、ネイティブはこれらの対応表を予め保持しておき、その対応表に沿ってテキストを決定すればよい。
尚、ここでは、例として、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定を行う仕様を示したが、これに限定されるものではない。他の例として、両面/片面、カラー/モノクロ、画像補正のオン/オフ等の他の設定項目が含まれてもよい。また、前述のように印刷機能のみではなく、プリンタが処理可能な画像処理や解析処理、静かに印刷するモードの有無、メモリカードの利用有無、インク残量などのステータスなどの情報を表示してもよい。
S710にて、スクリプト層210は、設定画面911に対するユーザ操作に基づいて、プリンタに設定する機能を選択する。図16で示したHTML形式の記述例を、ネイティブ層220のレンダリング部222を用いてディスプレイ104に表示した例が図9(b)に示す設定画面911である。ネイティブ層220を介してプリンタ情報を要求し、プリンタ情報から上記のネイティブ関数を用いて取得した情報を基に設定画面911が形成される。尚、上記のHTMLはスクリプト層210、ネイティブ層220のいずれで形成してもよい。
また、図9(b)に示す用紙サイズ等の設定項目はそれぞれプルダウンメニューになっており、ユーザ操作によって項目を選択することができる。ここで、設定画面911は、プルダウンメニューによって、用紙サイズの設定項目として選択可能な項目の一覧が表示されている状態を示しており、ユーザ操作によってA4やA5等の用紙サイズを選択することができる。
S711にて、スクリプト層210は、設定完了ボタン912に対するユーザ操作を検知すると、ユーザ操作によって選択された設定項目を含む設定情報を作成して、ネイティブ層220へ送信する。図16の記述例にあるSetPrint()もバインディング機能を有するネイティブ関数である。図16の例では、SetPrint()を用いて、用紙サイズ、用紙種類、印刷品位、縁あり/なしの設定を文字列としてネイティブ層220へ渡している。
S712にて、ネイティブ層220は、バインディング機能によりスクリプト層210から設定情報を受信する。ネイティブ層220では、後に、受信した設定情報を基に、プリンタ112の通信プロトコルに従って、プリントコマンドを生成する。そして、プリンタコマンドは、プリンタ通信部231を介して選択されたプリンタへ送信される。そして、本処理フローを終了する。
[レンダリング&プリント処理]
ユーザが、図9(b)に示す設定画面911の設定完了ボタン912を押下することで図3のS35のレンダリング&プリント処理が開始する。図3のS35のレンダリング&プリントの詳細について、図8を用いて説明する。また、レンダリング&プリント処理に関しては、アプリケーションがバックグランドにて処理を行う際にも処理を継続するように記述されていることとする。例えば、iOS(登録商標)ではbeginBackgroundTaskWithExpirationHandlerなどであり、Android(登録商標)ではServiceなどの、バックグラウンドでも動作可能とする機能を利用すればよい。図8において、S801、S802、S825は、CPU100がスクリプト層210のプログラムを用いて実行する処理である。S804〜S809、S811、S813、S815〜S817、S819〜S821、S824は、CPU100がネイティブ層220のプログラムを用いて実行する処理である。S802、S810、S812、S814、S818、S822、S826は、CPU100がOS層230のプログラム(OS)を用いて実行する処理である。S823は、外部デバイス(ここでは、プリンタ112)が実行する処理である。
S801にて、スクリプト層210は、OS層230へインジケータ起動要求を送信する。
S802にて、OS層230は、スクリプト層210からの要求に基づき、インジケータを表示する。
S803にて、スクリプト層210は、UI表示に利用していたSVGを、ネイティブ層220へ送信する。なお、S804〜S806など、スクリプト層210で実行可能な操作はスクリプト層210で実行してもよい。本実施形態は写真一枚、スタンプ一つのSVGを例として用いる。写真一枚、スタンプ一つの場合のSVGの記述例を図17(a)に示す。以後、図17(a)のSVGの記述例を基にレンダリングについて説明する。ただし、図17(a)のSVGの記述例は概略を説明するためのものであり、細かい設定の記述は省略している。
S804にて、ネイティブ層220は、印刷情報からプリンタへ送信する出力解像度を取得し、そのサイズへSVGを変更する。例えば、プリンタから取得した出力解像度のサイズが4000px×3000pxであれば、SVGは図17(b)のように書き換えられる。図17(b)では、SVGの横幅、縦幅がプリンタへ送信する画像サイズに合わせて変更されている。具体的には、4行目のwidthが「4000」に変更され、heightが「3000」に変更されている。
S805にて、ネイティブ層220は、SVGの画像に関する記述を、ブロック画像群を利用した記述へと変更する。S407、S506では、RGB画像を上半分、下半分に二分割したブロック画像群が作成され、「imageID_above.bmp」、「imageID_below.bmp」でアクセス可能な状態で保存されているものとする。図17(b)のSVGの画像に関する記述を、先述の二つのブロック画像群を利用した記述へ変更したSVGは、図18(a)に示すような記述となる。図18(a)では、先述の通り、画像に関する記述箇所を、ブロック画像群を利用した記述へ変更している。ブロック画像群はファイル保存されたデータをパスで指定する方法であるが、BASE64として画像データの実体を入れ込む方法を用いても実現可能である。なお、ブロック画像を用いた印刷用コンテンツの構築は、スクリプト層210またはネイティブ層220のいずれか一方で実施する構成でもよいし、両方で実施してもよい。なお、本実施形態では、S407、S506にて画像の分轄処理を行っているためS805を実施しているが、画像の分轄処理が行われていない場合、S805の処理がスキップされてもよい。
S806にて、ネイティブ層220は、S805にて変更したSVGに対してマーカーを付与する。マーカーはSVGコンテンツの右端に赤い帯を付与する例で説明を行う。本実施形態では赤帯を利用しているが、マーカーはこれに限らず、付与された情報が判別できるものであればどのようなものでもよい。図18(a)のSVGに対し、赤帯を付与したSVGは、図18(b)に示すような記述となる。図18(b)では、4000px×3000pxのSVGをさらに大きな4005px×3000pxのSVGで囲っている。この差分となっている箇所が赤帯を付ける領域である。マーカーとなる赤帯は、描画を一番最後に実行させるために、SVGの一番最後の要素として追加をする。赤帯の利用についてはS815で説明する。
S807にて、ネイティブ層220は、端末状態の判定を行う。モバイル端末においては、着信や、別のアプリケーションを立ち上げるなどの処理が入ると、実行しているアプリケーションの処理はバックグランドにて動作するように制御される。アプリケーションがバックグランドにて行うにも関わらず、負荷の高い処理を続けていると他のアプリケーションに対して影響を及ぼす可能性がある。これを回避するためには、アプリケーションがバックグランド状態である場合は、なるべく負荷を減らすような工夫が必要となる。S807における端末状態の判定とは、情報処理装置115においてアプリケーションがフォアグランドで動作しているか、バックグランドで動作しているかをチェックすることである。
S808にて、ネイティブ層220は、SVGコンテンツから特定の領域のみをレンダリングするためのSVGを作成する。アプリケーションにおいて、4000px×3000pxのサイズを一括でレンダリングすることはメモリ的に負荷が高い。これを、例えば4000px×1500pxのレンダリングの2回に分けることができれば、メモリ使用量を減らすことができる。この省メモリ化を目的としたのが、特定領域のみをレンダリングするためのSVGであり、以後、この特定の領域をレンダリングするためのSVGをバンドSVGと呼ぶ。S808では、アプリケーションがフォアグランドで動作していると判定されたとして説明する。S808にて、ネイティブ層220は、例えば、図19(a)に示すような一つ目のバンドを作成する。図19(b)では、SVGに対しx座標、y座標を操作するための情報が付与されている(5行目および20行目)。このx、y座標の値を変更することで、描画されるSVGの領域を変更することが可能となる。一つ目のバンドとしては、x、y座標ともに「0」である。
S809にて、ネイティブ層220は、OS層230に対してバンドサイズ用の画面生成を要求する。ここでは、一つ目のバンドSVGから4005px×1500pxの領域を取得する。なお、メモリ(リソース)が潤沢であれば、4005px×3000pxを一括でレンダリングしてもよい。
S810にて、OS層230は、バンドSVG用の画面生成(4005px×1500px)を実行する。バンドSVGのサイズに関する情報は、バンドSVG自体ではなく、ネイティブ層220が保持する。また、生成する画面は、オフスクリーン画面として生成される。オフスクリーン画面とは、UIには表示されない画面のことである。
S811にて、ネイティブ層220は、一つ目のバンドSVGをS810で生成された画面に描画するように要求する。
S812にて、OS層230は、バンドSVGの情報をロードし、S810で生成した画面に対して描画処理を実行する。なお、S810により生成した画面に描画処理が行われるため、この画面を、枠と呼ぶこともできる。バンドSVGの情報がロードできたタイミングで、ネイティブ層220はロード完了の通知を受け取ることができる。この通知はOSに標準的に備わっている機能を利用すればよい。例えばiOSアプリケーションの作成で利用するObjective−C言語であればwebViewDidFinishLoad関数などがそれに該当する。また、Androidアプリケーションの作成で利用するJava言語であればonPageFInished関数などがそれに該当する。また、OS層230は、バンドSVGのコマンドを上から順次処理する。そして、図19(b)から明らかなようにバンドSVGの最後のコマンドとして赤帯の描画が指定されているので、OS層230は、赤帯を最後に描画する。
S813にて、ネイティブ層220は、OS層230に対し画像情報を要求する。ここでの画像情報とは、画面に表示されているRGBAデータのことである。S813は、端的にいえば、画面キャプチャの実行を要求するということである。
S814にて、OS層230は、ネイティブ層220からの要求に応じて、表示されている画面の画面キャプチャを実行し、取得したRGBA情報をネイティブ層220へ送信する。ここで、バンドSVGには4005px×3000pxの情報が記述されている。しかしながら、実際のOS層230が用意した画面は4005px×1500pxしかない。この場合、用意した画面からはみ出した部分に関しては描画が実行されない。この性質より、4005px×1500pxの画面を用意することで、バンドSVGにより定められる4005px×3000pxの上半分のみ(4005px×1500px)が描画される。結果として、ネイティブ層220は、上半分の情報(4005px×1500pxのRGBA情報)のみを取得することが可能となる。上半分のRGBA情報を取得するために、SVG記述より指定される4005px×3000pxよりも小さい画面でロードする例を図11(a)に示す。なお、図11の右端における帯が、本実施形態の赤帯に対応する。この図11(a)のような処理により上半分のRGBA情報が取得される。これを応用して、4005×1500の画面に、y座標(具体的には、5行目のy座標の値)を変化させた図19(b)に示すSVGバンドを読み込ませることで、SVGコンテンツの下半分のみを取得することが可能となる。例えば、y座標を0から1500に変更することでSVGコンテンツの下半分のみが取得される。下半分のRGBA情報を取得するために、SVG記述より指定される4005px×3000pxよりも小さい画面をy座標方向にずらし、かつ、SVG記述より小さい画面でロードする例を図11(b)に示す。この図11(b)のような処理により下半分のRGBA情報が取得される。
S815にて、ネイティブ層220は、取得したRGBAデータの右端が赤色になっているか否かを確認する。S812にて、OS層230からネイティブ層220へロード完了の情報が送られてきているが、これはSVGデータ読み込み完了のタイミングであり、SVGの描画が完了したタイミングというわけではない。つまり、SVGデータ読み込み完了と描画完了にはタイムラグがあり、この間に画面キャプチャを実行してしまうと、求める画像を得ることができない。そのためにロードさせるSVGデータに赤帯を付与し、求める画像が取得できているか否かの判定基準としている。
S816にて、ネイティブ層220は、赤帯(マーカ)が有るか否かを確認する。赤帯が確認できない場合は(S816にてNO)、S813へ戻る。そしてネイティブ層220は、OS層230に対し画像情報を要求する。つまり、この段階では、ネイティブ層220は、上半分の情報(4005px×1500pxのRGBA情報)を再度要求する。この際、一定時間待ってからやり直し、CPU負荷を減らすなどの工夫も考えられる。赤帯(マーカ)が確認できた場合は、OS層230が4005px×1500pxの画面に対する描画が完了したことを示すので、図8の処理は(S816にてYES)S817の処理へ進む。
S817にて、ネイティブ層220は、画面のリセットをOS層230に要求する。
S818にて、OS層230は、ネイティブ層220からの要求に基づき、画面の破棄を行う。ここでの画面破棄には二つ意味がある。一つ目は、次のSVGバンドをロードした際に、前回の赤帯(マーカ)が残ったままとなり、描画完了と誤認識してしまうことをなくすためである。これに関しては、バンドSVG毎に付けるマーカーの色や形などを変化させることで対応してもよい。二つ目は、SVGバンドのサイズを動的に変える可能性があるためである。SVGバンドサイズが途中で変更される例については後述する。
S819にて、ネイティブ層220は、取得したRGBAデータをJPEG画像へ変換する。ここで、S814にてOS層230からネイティブ層220に送られてくるRGBAデータには印刷には不要なA(透過度)の情報と、赤帯(マーカ)の情報が含まれる。そのため、JPEG変換は、この二つの情報を除いて実行する。
S820にて、ネイティブ層220は、プリンタへ送信するためのプリントコマンドをS819で生成したJPEG画像に付与する。ここで、JPEG画像に付与するデータは、プリンタ設定の情報を基に生成される。また、必要であれば、プリンタを制御するためのコマンドを付与してもよい。付与される情報としては、例えば、送信する情報が何番目のバンドかを示す情報や、一番末尾のバンドかを判定するためのフッタなどが挙げられる。
S821にて、ネイティブ層220は、OS層230に対して印刷情報(印刷処理に用いられる印刷データ)の送信を要求する。
S822にて、OS層230は、ネイティブ層220から受け取った印刷情報をプリンタへ送信する。印刷情報の送信が完了した後、処理はS824へ進む。
S823にて、プリンタは、情報処理装置115(OS層230)から受け取った印刷情報を基に、印刷を実行する。
S824にて、ネイティブ層220は、レンダリングが終了したか否かの判定を行う。レンダリング終了の判定は、例えば、取得した画像の高さの合計が出力サイズの高さと一致している、終了判定のためのフラグが立っているなどに基づいて行われる。なお、その他の判定方法を用いてもよい。レンダリングが終了していない場合は(S824にてNO)S807へ戻り、処理を繰り返す。レンダリングが終了している場合は(S824にてYES)、S825の処理へ進む。
S825にて、スクリプト層210は、インジケータの停止要求をOS層230へ送信する。
S826にて、OS層230は、スクリプト層210からの要求に基づき、インジケータを停止し、レンダリング&プリント処理を終了する。
ここで、上述した説明では、4000px×3000pxのうち、4000px×1500pxのデータまでしか作成できていない。そこで、ここからは後半部分のデータ作成について説明する。また、S824においてNoと判定されてS807の処理に遷移した際に、本アプリケーションがバックグランドで実行されていると判定されたとして説明を行う。一つ目のバンドSVGは4000px×1500pxのサイズで画像の取得を行ったが、バックグラウンド実行時は前述の通りメモリをなるべく節約することが重要である。
S808にて、ネイティブ層220は、S807の結果を受け、S808以降の処理を行う。先述の通り、取得する画像のサイズを小さくすることでメモリ使用量を減らすことが可能である。そのため、二つ目のバンドは4000px×750pxのサイズとし、以後の説明をする。SVGバンドの記述例は図19(b)と同等であるものとする。
先述の通り、データ取得をする領域は実際にOS層230が用意した画面サイズになるので、バンドSVG自体は4005px×3000pxの情報が記載されていてよい。ただし、すでに取得した情報を再度取得することがないように、バンドSVGのy座標は適切に変更する必要がある。つまり、ネイティブ層220は、4005px×3000pxのうち、(0,1500)から(4005,2250)のデータを取得することになる。そのため、図19(b)の5行目のy座標を1500へ変更する。また、SVGの特定エリアを表示する方法は、SVGのviewBoxという属性を操作するなど、どのような方法を利用してもよい。
S809にて、ネイティブ層220は、OS層230に対して情報を取得するサイズ(4005px×750px)の画面の生成を要求する。S810〜S823は、先述と同じ処理が行われる。この処理により、ネイティブ層220は、(0,1500)から(4005,2250)のRGBA情報を取得することができる。更に、S824にて、全領域のレンダリングが終了しているか否かを判定し、ここでは、4005px×750pxのサイズの画面のレンダリングが残っているため、S807に戻り処理を繰り返す。この時のバンドSVGのy座標は2250となる。以降の処理は先述の説明と同様であるため省略する。
本実施形態により、ウェブの機能を利用して高解像度の画像が含まれた印刷用コンテンツを印刷する場合でも、高画質な印刷物を得ることができる。なお、本実施形態では、取得できたRGBA情報からJPEG画像を生成して、順次OS層230へ印刷情報の送信を要求しているが、他の方法でもよい。例えば、ネイティブ層220は、全てのRGBA情報が揃ってから、まとめてJPEG画像に変換し、OS層230に対して印刷情報の送信を要求してもよい。また、全てのJPEG画像が揃ってから、まとめて1つのJPEG画像を生成し、OS層230に対して印刷情報の送信を要求してもよい。
<第二の実施形態>
第一の実施形態にて述べた図4のS406(図12)では、展開したRGBデータのブロック画像への分割条件を、コンテンツに配置する画像情報から決定した。本実施形態では、分割条件を、画像情報に加えて、ソフトウェアがインストールされている携帯端末(ここでは、情報処理装置115)の情報との組み合わせから決定する例について説明する。
端末情報は、例えばプラットフォームのOSに関する情報(OSの種類、バージョン情報など)、端末のCPUのクロック周波数、端末のメモリサイズを使用する。冒頭で述べたとおり、ウェブの機能における画像表示の制限は、OSの種類や端末性能、特にメモリサイズに依存する。そのため、分割条件を決定するために、端末情報をネイティブの機能を使用して携帯端末から取得する。ここで取得される端末情報は、例えば、図15(b)に示したプリンタ情報として取得でき、図15(b)では、5行目にてメモリサイズを取得している。
例えば、図13に示すようなOS種類およびバージョン情報、メモリサイズ、CPUクロック周波数などに対応したテーブルをアプリケーションのネイティブ層220に保持しておく。そして、OSの種類やバージョン、メモリサイズ、CPUクロック周波数によって分割条件を変えることが考えられる。これらの情報は、全て使用してもよいし、一部のみ使用してもよい。また、バージョン情報から選択される分割条件とメモリサイズから選択される条件が必ずしも一致するとは限らない。この場合は、分割条件が厳しい方(画像分割をする分割上限画素数はより小さい方)を採用する。例えば、A OSのバージョン9で、メモリサイズが1024である場合、分割の条件として、以下のように決定される。
画像分割:する
分割上限画素数:500万
なお、表に示す条件および数値は一例であり、これらに限定されるものではない。また、テーブルに無い値のCPUクロック数やメモリサイズであった場合は、補間により条件を決定してもよいし、より数値が近いテーブルの値を使用してもよい。メモリサイズやCPUクロック周波数は、OS共通としたが、OSにより異なるものを用いてもよい。また、本実施形態ではテーブルを使用したが、メモリサイズやクロック周波数、バージョン情報に関する所定の閾値以上か否かによって分割条件を決定する方法でもよい。
以上により、第一の実施形態の効果に加え、端末に付属する属性情報から、携帯端末の性能に応じて分割条件を決定することができる。
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピューターにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
112…プリンタ、115…情報処理装置、210…スクリプト層、220…ネイティブ層、230…OS層

Claims (11)

  1. プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層と、予め翻訳され前記プロセッサで実行されるための命令セットを含む第2のプログラム層とを包含するアプリケーションが動作可能な情報処理装置であって、
    前記第1および第2のプログラム層の少なくとも一方が動作することにより、印刷コンテンツに配置される画像の情報および前記情報処理装置の情報のうちの少なくとも一つに基づいて前記画像の分割条件を決定する決定手段と、
    前記第2のプログラム層が動作することにより、前記決定手段で決定した分割条件に従って前記画像を分割して分割画像を作成する分割手段と、
    前記第1のプログラム層および前記第2のプログラム層の少なくとも一方が動作することにより、前記分割画像を配置した印刷コンテンツを構築する構築手段と、
    前記第2のプログラム層が動作することにより、前記分割画像を配置した印刷コンテンツをレンダリングしてレンダリング画像を生成するレンダリング手段と、
    前記第2のプログラム層が動作することにより、前記レンダリング画像を用いて印刷データを生成する生成手段と
    を備えることを特徴とする情報処理装置。
  2. 前記印刷コンテンツは、ウェブ標準言語を用いて記述されることを特徴とする請求項1に記載の情報処理装置。
  3. 前記印刷コンテンツは、SVG(Scalable Vector Graphics)またはCanvasを用いて記述されることを特徴とする請求項1または2に記載の情報処理装置。
  4. 前記画像の情報は、画像の縦および横の画素数の情報を含むことを特徴とする請求項1乃至3のいずれか一項に記載の情報処理装置。
  5. 前記情報処理装置の情報は、オペレーティングシステムに関する情報、プロセッサのクロック数、メモリサイズの少なくとも1つを含むことを特徴とする請求項1乃至4のいずれか一項に記載の情報処理装置。
  6. 前記分割条件は、画像の分割数および分割のパターンであることを特徴とする請求項1乃至5のいずれか一項に記載の情報処理装置。
  7. 前記分割条件は、前記情報処理装置が備えるオペレーティングシステムにより制限されたリソースの上限を超えないサイズに前記画像を分割するように決定されることを特徴とする請求項1乃至6のいずれか一項に記載の情報処理装置。
  8. プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層と、予め翻訳され前記プロセッサで実行されるための命令セットを含む第2のプログラム層とを包含するアプリケーションが動作可能な情報処理装置の制御方法であって、
    前記第1および第2のプログラム層の少なくとも一方により、印刷コンテンツに配置される画像の情報および前記情報処理装置の情報のうちの少なくとも一つに基づいて前記画像の分割条件を決定する決定工程と、
    前記第2のプログラム層により、前記決定工程にて決定した分割条件に従って前記画像を分割して分割画像を作成する分割工程と、
    前記第1のプログラム層および前記第2のプログラム層の少なくとも一方により、前記分割画像を配置した印刷コンテンツを構築する構築工程と、
    前記第2のプログラム層により、前記分割画像を配置した印刷コンテンツをレンダリングしてレンダリング画像を生成するレンダリング工程と、
    前記第2のプログラム層により、前記レンダリング画像を用いて印刷データを生成する生成工程と
    を有することを特徴とする制御方法。
  9. プロセッサで翻訳され実行されるための命令セットを含む第1のプログラム層と、予め翻訳され前記プロセッサで実行されるための命令セットを含む第2のプログラム層とを包含するプログラムであって、
    コンピュータを、
    前記第1のおよび第2のプログラム層の少なくとも一方により、印刷コンテンツに配置される画像の情報および前記コンピュータの情報のうちの少なくとも一つに基づいて前記画像の分割条件を決定する決定手段として機能させ、
    前記第2のプログラム層により、前記決定手段で決定した分割条件に従って前記画像を分割して分割画像を作成する分割手段として機能させ、
    前記第1のプログラム層および前記第2のプログラム層の少なくとも一方により、前記分割画像を配置した印刷コンテンツを構築する構築手段として機能させ、
    前記第2のプログラム層により、前記分割画像を配置した印刷コンテンツをレンダリングしてレンダリング画像を生成するレンダリング手段として機能させ、
    前記第2のプログラム層により、前記レンダリング画像を用いて印刷データを生成する生成手段として機能させる
    ことを特徴とするプログラム。
  10. 前記第1のプログラム層は、ウェブ標準言語を用いて記述されることを特徴とする請求項9に記載のプログラム。
  11. 前記第1のプログラム層は、HTML5、CSS3、またはJavaScriptを用いて記述されることを特徴とする請求項9または10に記載のプログラム。
JP2016069278A 2016-03-30 2016-03-30 情報処理装置およびその制御方法、並びにプログラム Active JP6649832B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016069278A JP6649832B2 (ja) 2016-03-30 2016-03-30 情報処理装置およびその制御方法、並びにプログラム
US15/460,641 US10013221B2 (en) 2016-03-30 2017-03-16 Information processing apparatus that generates print data using an application with two program layers, method of controlling the same, and non-transitory computer-readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016069278A JP6649832B2 (ja) 2016-03-30 2016-03-30 情報処理装置およびその制御方法、並びにプログラム

Publications (2)

Publication Number Publication Date
JP2017182488A JP2017182488A (ja) 2017-10-05
JP6649832B2 true JP6649832B2 (ja) 2020-02-19

Family

ID=59958767

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016069278A Active JP6649832B2 (ja) 2016-03-30 2016-03-30 情報処理装置およびその制御方法、並びにプログラム

Country Status (2)

Country Link
US (1) US10013221B2 (ja)
JP (1) JP6649832B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6786342B2 (ja) 2016-10-18 2020-11-18 キヤノン株式会社 情報処理装置、情報処理方法およびプログラム
US11288764B2 (en) * 2019-07-01 2022-03-29 Digimarc Corporation Watermarking arrangements permitting vector graphics editing

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11208056A (ja) * 1998-01-26 1999-08-03 Canon Inc 画像処理方法及び装置並びに記憶媒体
JP2002351779A (ja) * 2001-05-22 2002-12-06 Minolta Co Ltd データ表示システム、データ送信装置、携帯端末、データ表示方法、データ表示プログラムおよびそのプログラムを記録したコンピュータ読み取り可能な記録媒体
JP4405942B2 (ja) * 2005-06-14 2010-01-27 キヤノン株式会社 画像処理装置およびその方法
JP4574467B2 (ja) * 2005-06-30 2010-11-04 キヤノン株式会社 データ処理装置、データ処理方法およびコンピュータプログラム
KR101517618B1 (ko) * 2008-10-31 2015-05-04 삼성전자주식회사 웹 컨텐츠를 효율적으로 디스플레이하기 위한 장치 및 방법
JP2013001043A (ja) * 2011-06-20 2013-01-07 Canon Inc 画像形成装置、画像形成方法、およびプログラム
JP6438218B2 (ja) 2014-06-13 2018-12-12 キヤノン株式会社 装置、方法、及びプログラム
JP6478487B2 (ja) 2014-06-13 2019-03-06 キヤノン株式会社 情報処理装置、情報処理方法、及びプログラム
JP6386803B2 (ja) 2014-06-13 2018-09-05 キヤノン株式会社 装置、方法、及びプログラム
JP6378645B2 (ja) 2014-06-13 2018-08-22 キヤノン株式会社 情報処理装置、制御方法、及びプログラム
JP6363888B2 (ja) 2014-06-30 2018-07-25 キヤノン株式会社 情報処理装置、およびプログラム
JP5901704B2 (ja) 2014-06-30 2016-04-13 キヤノン株式会社 情報処理装置、情報処理方法、プログラム
JP6525517B2 (ja) * 2014-06-30 2019-06-05 キヤノン株式会社 情報処理装置、制御方法、及びプログラム
JP6463914B2 (ja) * 2014-06-30 2019-02-06 キヤノン株式会社 情報処理装置、処理方法、及びプログラム
JP6138088B2 (ja) * 2014-06-30 2017-05-31 キヤノン株式会社 情報処理装置、制御方法、及びソフトウェアプログラム
JP6381319B2 (ja) 2014-06-30 2018-08-29 キヤノン株式会社 情報処理装置、処理方法、及びプログラム
JP5843180B2 (ja) 2014-10-22 2016-01-13 ブラザー工業株式会社 可搬型の端末装置に搭載される制御装置

Also Published As

Publication number Publication date
JP2017182488A (ja) 2017-10-05
US10013221B2 (en) 2018-07-03
US20170286022A1 (en) 2017-10-05

Similar Documents

Publication Publication Date Title
US10296267B2 (en) Information processing apparatus, information processing method, and storage medium
US9471284B2 (en) Apparatus, method, and non-transitory computer-readable storage medium
US9436413B2 (en) Information processing apparatus, information processing method, and storage medium storing program
US10712978B2 (en) Information processing apparatus, control method for information processing apparatus, and non-transitory computer-readable storage medium
US10157027B2 (en) Information processing apparatus that executes printing based on whether drawn data includes data for a predetermined element, information processing method, and non-transitory computer-readable storage medium storing program
US10075620B2 (en) Information processing apparatus, control method for information processing apparatus, and non-transitory computer-readable storage medium
JP6381319B2 (ja) 情報処理装置、処理方法、及びプログラム
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
JP6478487B2 (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
JP6649832B2 (ja) 情報処理装置およびその制御方法、並びにプログラム
JP6786342B2 (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: 20190327

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191119

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: 20191220

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200117

R151 Written notification of patent or utility model registration

Ref document number: 6649832

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151