以下、本発明の実施の形態に係るプリンタ、画像印刷システムおよび印刷方法を、図面に基づいて説明する。画像印刷システムは、ダイレクト印刷システムを例として説明する。印刷方法は、プリンタの動作の一部として説明する。
実施の形態1.
図1は、本発明の実施の形態1に係るダイレクト印刷システムを示す図である。ダイレクト印刷システムは、画像供給装置としてのデジタルスチルカメラ(DSC:Digital Still Camera)1と、プリンタ2とを有する。また、DSC1とプリンタ2とは、USBケーブル3にて接続される。
図2は、図1中のDSC1のハードウェア構成を示すブロック図である。DSC1は、プログラムを実行する中央処理装置(CPU:Central Processing Unit)11と、プログラムを記憶するフラッシュメモリ12と、I/O(Input/Output)ポート13と、これらを接続するシステムバス14とを有する。
DSC1のI/Oポート13には、撮像装置としてのCCD(Charge Coupled Device)15と、外部メモリ接続装置としてのカードリーダ16と、表示装置としての液晶モニタ17と、入力装置としての入力デバイス18と、第一の通信手段としてのUSB通信I/F(interface:インターフェース)19とが接続される。
CCD15は、受光部を有する。この受光部は、複数の受光素子を有する。この複数の受光素子は、受光部に、その全体が略長方形となるように縦方向および横方向に並べて配列されている。各受光素子は、受光光量に応じたレベル信号を出力する。CCD15は、複数の受光素子から出力されるレベル信号に基づいて、受光素子と同数のピクセルデータを生成する。また、CCD15は、この生成した複数のピクセルデータを1つの撮像データとして出力する。
カードリーダ16は、挿入部を有する。この挿入部には、カード形状に形成された半導体メモリ20を挿入することができる。カード形状に形成された半導体メモリ20としては、たとえばフラッシュメモリなどがある。そして、カードリーダ16は、挿入部に挿入されている半導体メモリ20にデータを書き込んだり、挿入部に挿入されている半導体メモリ20からデータを読み出したりする。
液晶モニタ17は、表示部を有する。液晶モニタ17は、表示データに基づいて、表示部に、その表示データに基づく画像を表示する。
入力デバイス18は、複数の入力キーやタッチパネルを有する。入力デバイス18は、ユーザがプッシュ操作した入力キーに応じた入力データを出力する。また、入力デバイス18は、タッチパネルのユーザにより押圧された位置に応じた入力データを出力する。
USB通信I/F19は、USBコネクタを有する。USBコネクタには、USBケーブル3が接続される。USB通信I/F19は、USBコネクタから信号が入力されるとその信号からデータを抽出する。また、USB通信I/F19は、送信するデータに基づいて信号を生成し、この信号をUSBコネクタへ出力する。
図3は、図2中のフラッシュメモリ12の記憶内容を示す図である。DSC1のフラッシュメモリ12には、EXIF(Exchangeable Image File Format)画像データ生成プログラム21と、印刷指示データ生成プログラム22と、画像データ送信プログラム23と、通信制御プログラム群とが記憶される。DSC1の通信制御プログラム群は、USBマスストレージクラスプログラム24とを有する。
EXIF画像データ生成プログラム21は、中央処理装置11に実行されることでEXIF画像データ生成部を実現する。EXIF画像データ生成部は、CCD15から出力された撮像データを圧縮してJPEG(Joint Photographic Coding Experts Group)形式の画像データを生成し、この画像データにEXIFヘッダやサムネイル画像データを付加したEXIF画像データを生成し、このEXIF画像データをカードリーダ16へ出力する。EXIFヘッダには、画像の縦方向のピクセル数および横方向のピクセル数、撮影条件などを含めることができる。
印刷指示データ生成プログラム22は、中央処理装置11に実行されることで印刷指示データ生成部を実現する。印刷指示データ生成部は、液晶モニタ17に画像選択画面や印刷条件選択画面を表示する。また、印刷指示データ生成部は、印刷指示データを生成する。この印刷指示データには、画像選択画面に基づいて選択された画像を、印刷条件選択画面に基づいて選択された印刷条件で印刷するための印刷指示が含まれる。
画像データ送信プログラム23は、中央処理装置11に実行されることで、送信手段としての画像データ送信部を実現する。画像データ送信部は、送信する画像データのファイルとそのファイルから抽出するデータ位置とが指定されると、そのファイルのそのデータ位置のデータを抽出する。また、画像データ送信部は、抽出したデータを出力する。
画像データのファイルは、あるデータ量を有する。このファイルのデータ位置とは、この画像ファイルの先頭ビットから数えた場合におけるそのあるビットの順番を示す値である。たとえば、データ位置として10kバイトが指定されると、画像データ送信部は、ファイルの先頭ビットから10kバイト目の所定の長さのデータを抽出する。
USBマスストレージクラスプログラム24は、中央処理装置11に実行されることでUSBマスストレージクラスを実現する。USBマスストレージクラスでは、ホストとデバイスとの間でデータをバルク転送したりすることができる。なお、本実施の形態では、サブクラスとしては、SCSIサブクラスが使用される。
図4は、図2のDSC1において撮像時に実現される機能を示すブロック図である。図4に示すように、撮像時には、DSC1においてEXIF画像データ生成部31が実現される。
CCD15は、EXIF画像データ生成部31へ撮像データを出力する。EXIF画像データ生成部31は、この撮像データをJPEG方式で圧縮し、EXIF画像データを生成する。カードリーダ16は、このEXIF画像データに所定のファイル名をつけて、このEXIF画像データを半導体メモリ20に書き込む。カードリーダ16は、半導体メモリ20内の複数のEXIF画像データのファイル同士32が互いに区別できるように、その複数のEXIF画像ファイル32には、互いに異なるファイル名を付加する。
図5は、図4中のEXIF画像データ生成部31による圧縮処理の説明図である。図5(A)は、画像における複数のピクセルの配列を説明する図である。CCD15が出力する撮像データの画像は、図5(A)に示すように、縦方向のピクセル数より横方向のピクセル数が多い、全体が横長の長方形の画像を構成するものとして説明する。
このような撮像データが入力されると、EXIF画像データ生成部31は、図5(B)に示すように、8×8ピクセルを1つのブロックとして、そのブロック毎に空間周波数を演算する。なお、1ブロックあたりのピクセル数は、8×8に限られず、たとえば16×16などであってもよい。
また、EXIF画像データ生成部31は、図5(B)に示すように、横長の画像の長辺に沿った図中上側のブロックの行から順番に、且つ、同じブロック行の中では図中左側のブロックから順番に、ブロックの空間周波数を演算する。図5(B)は、ブロックの画像上の配置を示す図である。
そして、図5(B)に示すようにm行n列(m、nは、1以上の整数)のブロックのすべてについて空間周波数を演算したら、EXIF画像データ生成部31は、空間周波数の総データ量が所定のデータ量以下となるように空間周波数のデータを間引く。EXIF画像データ生成部31は、JPEG形式のデータの総データ量が所定量以下となるまでこのデータの間引き処理を繰り返す。以上のエンコード処理によって、EXIF画像データ生成部31は、所定のデータ量以下のデータ量のJPEG形式のデータを生成する。なお、JPEG形式のデータにおいて複数のブロックのデータ量は、一定の量に揃わない。
図5(C)は、EXIF画像データ上での各ブロックのデータ配置を示す図である。EXIF画像データの先頭には、EXIFヘッダのデータが格納される。このEXIFヘッダの後には、複数のブロックのデータがそのエンコード順にしたがって格納されている。つまり、EXIFヘッダの後には、画像の左上のブロック(1)のデータが続く。画像の左上のブロック(1)のデータの次には、そのブロックの右隣りのブロック(2)のデータが続く。画像の一番上のブロック行の右端のブロック(n)のデータの次には、画像の上から二行目のブロック行の左端のブロック(n+1)のデータが続く。複数のブロックデータの最後には、画像の右下のブロック(m×n)のデータがくる。複数のブロックの後には、ファイルのデータの終わりを示すEOF(End Of File)データが格納される。
なお、このように撮像データをJPEG形式に圧縮し、その圧縮された画像データを半導体メモリ20に記憶させた場合、その画像における画像の行数は、ブロック行の行数となる。
図6は、図1中のプリンタ2のハードウェア構成を示すブロック図である。プリンタ2は、中央処理装置41と、中央処理装置41がプログラムの実行の際に利用するメモリ42と、プログラムを記憶する記憶部43と、I/Oポート44と、これらを接続するシステムバス45とを有する。
プリンタ2のI/Oポート44には、第二の通信手段としてのUSB通信I/F46と、印刷デバイス47とが接続される。プリンタ2のUSB通信I/F46は、DSC1のUSB通信I/F19と同様の機能を有するものであり、その説明を省略する。ただし、プリンタ2のUSB通信I/F46は、USBホストとして機能し、DSC1のUSB通信I/F19は、USBデバイスとして機能する。
図7は、図1中のプリンタ2の内部機構を示す透過斜視図である。印刷デバイス47は、給紙トレイ51と、給紙ローラ52と、搬送ローラ対53と、排紙トレイ54と、キャリッジ55と、キャリッジ保持部材56とを有する。給紙ローラ52と、搬送ローラ対53と、キャリッジ保持部材56と、キャリッジ55とは、プリンタ2の筐体57の内部に配設される。
給紙トレイ51には、用紙58が載置される。給紙ローラ52は、給紙トレイ51上の用紙58をニップし、給紙トレイ51内の一番上の用紙58を排紙トレイ54の方向へ送り出す。搬送ローラ対53は、この給紙トレイ51から送り出された用紙58をさらに排紙トレイ54の方向へ送る。これにより、給紙トレイ51に載置された用紙58は、1枚ずつ給紙トレイ51から排紙トレイ54へ搬送され、排紙トレイ54に排出される。
キャリッジ保持部材56は、長い棒形状に形成される。また、このキャリッジ保持部材56は、搬送ローラ対53と排紙トレイ54との間の用紙58の搬送経路の上方において、その長尺方向が搬送ローラ対53の伸在方向と略平行となる姿勢で配設される。キャリッジ55は、このキャリッジ保持部材56に移動可能に取り付けられる。これにより、キャリッジ55は、搬送ローラ対53の伸在方向に移動することができる。
キャリッジ55は、インクタンクと、複数のノズルとを有する。ノズルは、インクタンク内のインクを吐出する。また、複数のノズルは、キャリッジ55の移動方向と垂直な方向に沿って並べて形成される。なお、複数のノズルは、複数の列に分けて並べられていてもよい。
このような構成を有する印刷デバイス47は、印刷制御データに基づいて搬送ローラ対53を回転させて、キャリッジ55に対向する位置(印刷位置)に用紙58を搬送する。また、印刷デバイス47は、印刷制御データに基づいてキャリッジ55を移動させながら、所定のノズルからインクを吐出させる。そして、キャリッジ55に1印刷行分のインクを吐出させたら、印刷デバイス47は、搬送ローラ対53を回転させて用紙58をその1印刷行分だけ送る。また、印刷デバイス47は、次の印刷制御データに基づいてキャリッジ55を移動させながら、所定のノズルからインクを吐出させる。このように1印刷行ずつのキャリッジ55からのインクの吐出制御と、1印刷行ずつの用紙58送りとを交互に繰り返すことで、印刷デバイス47は、用紙58の紙面に印刷制御データに基づく画像を形成する。
また、印刷デバイス47は、用紙58へのインクの吐出が完了したら、搬送ローラ対53を回転させて、印刷位置から排紙トレイ54へ用紙58を排出する。これにより、印刷制御データに基づく画像が形成された用紙58が排紙トレイ54に排出されることになる。
図8は、図6中の記憶部43の記憶内容を示す図である。プリンタ2の記憶部43には、印刷指示データ解釈プログラム61と、キャッシュシステムプログラム62と、デコーダプログラム63と、印刷制御データ生成プログラム64と、通信制御プログラム群とが記憶される。プリンタ2の通信制御プログラム群は、USBマスストレージクラスプログラム65を有する。図9は、図1のダイレクト印刷システムに実現される機能を示すブロック図である。図8に示す各種プログラムを実行することで、図9におけるプリンタ2側の各種機能が実現される。
USBマスストレージクラスプログラム65は、中央処理装置41に実行されることでUSBマスストレージクラス95を実現する。なお、本実施の形態1では、サブクラスとしてSCSIサブクラスが使用される。
印刷指示データ解釈プログラム61は、中央処理装置41に実行されることで印刷指示データ解釈部91を実現する。印刷指示データ解釈部91は、印刷指示データを解釈して、その印刷指示データにて指定された印刷処理をプリンタ2に実行させる。
キャッシュシステムプログラム62は、中央処理装置41に実行されることで、読込手段および出力手段としてのキャッシュシステム92を実現する。キャッシュシステム92は、メモリ42にキャッシュメモリ71を生成する。このキャッシュメモリ71は、所定本数の画像データバッファとしての所定本数のキャッシュバッファ72を有する。各キャッシュバッファ72には、記憶しているデータのファイル名(ファイルID)およびデータ位置の範囲を示す情報と、キャッシュした順番(たとえば時刻)の情報とが対応付けられる。
図10は、図6中のメモリ42に生成されるキャッシュメモリ71の構成を示す図である。図10のキャッシュメモリ71は、P本のキャッシュバッファ72を有する。また、各キャッシュバッファ72は、そのサイズ分のデータを記憶する領域として生成される。
なお、キャッシュバッファ72の本数Pは、印刷可能な画像データサイズの上限値に対応する所定の大きな値とされる。たとえば、ブロックの縦横ピクセル数がhであるEXIF(JPEG)形式の画像データの場合、デコーダ93によりデコード可能な画素数(画像の一辺の画素数)がαとし、画像の縦横比が3:4とすると、Pは、値(α×3/4)/h(=α/h×3/4)の小数点以下を切り上げた整数とされる。あるいは4upの場合を想定して、たとえば、ブロックの縦横ピクセル数がhであるEXIF(JPEG)形式の画像データの場合、デコーダ93によりデコード可能な画素数(画像の一辺の画素数)がαとし、画像の縦横比が3:4とすると、Pは、値(α×3/4)/h×2(=α/h×3/2)の小数点以下を切り上げた整数とされる。
また、キャッシュシステム92は、デコーダ93からデータの出力要求があったら、まず、その取得要求に係るデータがキャッシュメモリ71に記憶されているか否かを確認する。そして、取得要求に係るデータがキャッシュメモリ71に記憶されている場合には、キャッシュシステム92は、そのデータをキャッシュメモリ71から読み出して出力する。
取得要求に係るデータがキャッシュメモリ71に記憶されていない場合には、キャッシュシステム92は、その取得要求に係るデータが先頭となるように1つのキャッシュバッファ72のサイズに等しいバイト数のデータの送信要求を生成する。なお、この送信要求では、そのキャッシュするデータのファイル名(あるいはファイルID)も指定される。
また、キャッシュシステム92は、要求したデータを受信すると、空いているキャッシュバッファ72を選択して、その選択したキャッシュバッファ72に受信したデータを格納する。なお、空いているキャッシュバッファ72が無い場合には、キャッシュシステム92は、最も早くキャッシュしたキャッシュバッファ72を選択し、その選択したキャッシュバッファ72に受信したデータを格納する。FIFO(First In First Out:先読先出)方式でキャッシュメモリ71が更新される。また、キャッシュシステム92は、その新たなデータを格納したキャッシュバッファ72からあるいはUSBホスト95から出力要求に係るデータを取得し、デコーダ93へ出力する。
図8に示すデコーダプログラム63は、中央処理装置41に実行されることで、画像の印刷順にしたがってデータを要求する要求手段としてのデコーダ93を実現する。デコーダ93は、EXIF画像データを復号化し、ロウ(RAW)画像データを生成する。復号化後の画像データでは、各ピクセルのデータが、データとしてピクセル毎に互いに独立した状態に分かれている。データがピクセル毎に分かれている画像データとしては、たとえば、ビットマップ形式の画像データ、TIFF(Tagged Image File Format)形式の画像データなどがある。
印刷制御データ生成プログラム64は、中央処理装置41に実行されることで印刷制御データ生成部94を実現する。印刷制御データ生成部94は、データがピクセル毎に分かれている画像データと印刷のレイアウト情報とに基づいて、印刷デバイス47のキャリッジ55および搬送ローラ対53を制御するための印刷制御データを生成する。
次に、以上のような構成を有するダイレクト印刷システムの動作を説明する。
DSC1のUSB通信I/F19とプリンタ2のUSB通信I/F46とがUSBケーブル3で接続される。そして、DSC1では、印刷指示データ生成部81と、画像データ送信部82と、USBマスストレージクラス83とが実現される。また、プリンタ2では、印刷指示データ解釈部91と、キャッシュシステム92と、デコーダ93と、印刷制御データ生成部94と、USBマスストレージクラス95とが実現される。キャッシュシステム92は、キャッシュメモリ71を生成する。
プリンタ2のUSB通信I/F46は、DSC1のUSB通信I/F19へ、USBのディスクリプタの送信要求を送信する。
USB通信I/F19は、このディスクリプタの送信要求に応じて、DSC1のディスクリプタを出力する。DSC1のディスクリプタは、プリンタ2のUSB通信I/F46へ送信される。プリンタ2のUSB通信I/F46は、受信したDSC1のディスクリプタに基づいて、エンドポイントと呼ばれる通信バッファを生成する。このエンドポイントには、USBマスストレージクラス83,95同士がデータをバルク転送するために使用するものが含まれている。これにより、USBのコンフィグレーション処理は、完了する。
印刷指示データ生成部81は、まず、半導体メモリ20から、半導体メモリ20に記憶されているEXIF画像ファイル32のファイル名のリストを読み込み、このファイル名のリストを割り付けたEXIF画像ファイル32の選択画面の表示データを液晶モニタ17に出力する。これにより、液晶モニタ17には、EXIF画像ファイル32の選択画面の選択画面が表示される。なお、印刷指示データ生成部81は、ファイル名の替わりにサムネイル画像を読み込み、サムネイル画像を割り付けたEXIF画像ファイル32の画像選択画面を液晶モニタ17に表示させてもよい。
ユーザは、入力キーあるいはタッチパネルを操作して、液晶モニタ17に表示されているファイル名のリストの中から、ファイル名を選択する。この選択操作に応じて、入力デバイス18は、入力データを生成する。印刷指示データ生成部81は、入力データに基づいて、ファイル名を選択する。なお、ユーザが複数のファイル名を選択する操作をした場合には、印刷指示データ生成部81は、その複数のファイル名を選択する。
画像を選択した後、印刷指示データ生成部81は、印刷条件選択画面を液晶モニタ17に表示させる。ユーザの操作に応じて入力デバイス18は、入力データを生成する。この入力データに基づいて、印刷指示データ生成部81は、印刷条件を選択する。なお、印刷条件としては、たとえば画像の印刷品質(高画質、標準など)、用紙58の種類(A4、B5、L判など)、1枚の用紙58に印刷する画像のレイアウト(1up、2up、4upなど)などがある。
画像および印刷条件を選択したら、印刷指示データ生成部81は、印刷指示データを生成する。
印刷指示データを生成した後、印刷指示データ生成部81は、この生成した印刷指示データをUSBマスストレージクラス83によりプリンタ2へ送信する。
プリンタ2のUSBマスストレージクラス95は、印刷指示データを受信すると、印刷指示データを印刷指示データ解釈部91へ出力する。なお、この印刷指示データの送信は、たとえば特開2003−256154号公報と同様の方法を利用すればよい。
図11は、図10中の印刷指示データ解釈部91の動作を示すフローチャートである。
印刷指示データ解釈部91は、印刷指示データが入力されると、その印刷指示データにて指定される印刷処理の制御を開始する(ステップS1)。具体的には、印刷指示データ解釈部91は、まず、印刷指示データの中からファイル名(あるいはファイルID)を抽出し、そのファイル名等のファイルの画像サイズ情報の取得要求データを生成する。
この画像サイズ情報の取得要求データは、SCSIホスト97からプリンタ2のUSBマスストレージクラス95へ渡され、プリンタ2のUSBマスストレージクラス95により、DSC1のUSBマスストレージクラス83へ転送される。DSC1のUSBマスストレージクラス83は、この画像サイズ情報の取得要求データを画像データ送信部82へ出力する。
画像データ送信部82は、画像サイズ情報の取得要求データを受け取ると、その取得要求データに含まれるファイル名を抽出する。また、画像データ送信部82は、そのファイル名のファイル32のEXIFヘッダから、画像の縦方向のピクセル数および横方向のピクセル数を読み込み、この画像の縦方向のピクセル数および横方向のピクセル数の情報を出力する。
この画像の縦方向のピクセル数および横方向のピクセル数の情報は、DSC1のUSBマスストレージクラス83によりプリンタ2へ送信され、プリンタ2のUSBマスストレージクラス95により印刷指示データ解釈部91に入力される。
画像の縦方向のピクセル数および横方向のピクセル数の情報が入力されると、印刷指示データ解釈部91は、印刷指示データに含まれるレイアウト情報とそれらの縦横の各ピクセル数とに基づいて、画像を回転させる必要があるか否かを判断する(ステップS2)。
画像の縦方向のピクセル数と横方向のピクセル数の情報が入力されると、印刷指示データ解釈部91は、印刷指示データに含まれるレイアウト情報とそれらの縦横の各ピクセル数とに基づいて、画像を回転して印刷するか否かを判断する(ステップS2)。
たとえば、キャリッジ走査方向が用紙58の短辺と平行であって、印刷レイアウトが1upまたは4upである場合、画像の縦方向のピクセル数が横方向のピクセル数より小さいときには、印刷指示データ解釈部91は、画像を回転すると判断し、画像の縦方向のピクセル数が横方向のピクセル数以上であるときには、印刷指示データ解釈部91は、画像を回転しないと判断する。
また、たとえば、キャリッジ走査方向が用紙58の短辺と平行であって、印刷レイアウトが2upまたは8upである場合、画像の縦方向のピクセル数が横方向のピクセル数以下であるときには、印刷指示データ解釈部91は、画像を回転しないと判断し、画像の縦方向のピクセル数が横方向のピクセル数より大きいときには、印刷指示データ解釈部91は、画像を回転すると判断する。
図12は、画像のピクセル数について説明する図である。図12(A)に示すように、画像の横ピクセル数は、エンコード方向に沿った一辺(つまりブロック行)のピクセル数であり、画像の縦ピクセル数は、エンコード方向に対して垂直な一辺(つまりブロック列)のピクセル数である。
また、画像を回転すると判断する場合には、図12(B)に示すように、キャリッジの走査方向(つまり1回に印刷するライン向き)と画像データのエンコード方向に対応する画像201上の方向とが垂直となる場合である。
画像を回転する必要がないと判断した場合、印刷指示データ解釈部91は、ファイル名を指定して、そのファイル名のファイル32に含まれるEXIF画像データをデコードする指示をデコーダ93へ出力する(ステップS3)。つまり、印刷指示データ解釈部91は、画像を回転することなくデコード処理を行う指示をデコーダ93へ出力する。
また、画像を回転する必要があると判断した場合、印刷指示データ解釈部91は、ファイル名(あるいはファイルID)を指定するとともに、そのファイル名等のファイル32に含まれるEXIF画像データの画像を回転しながらデコードする指示をデコーダ93へ出力する(ステップS4)。
図13は、図10中のデコーダ93の動作を示すフローチャートである。図14は、図10中のキャッシュシステム92の動作を示すフローチャートである。
デコーダ93は、まず、印刷指示データ解釈部91からのデコード指示に画像を回転させる指示が含まれているか否かを判断する(ステップS11)。
画像を回転させる指示が含まれていない場合、デコーダ93は、EXIF画像データの読み込みを開始する(ステップS12)。具体的には、デコーダ93は、ファイル名を指定して、そのファイルの先頭から1ワード分のデータを出力する指示をキャッシュシステム92へ出力する。
ファイルの先頭から1ワード分のデータを出力する指示が入力されると、キャッシュシステム92は、その指示に係る1ワード分のデータがキャッシュメモリ71内に格納されているか否かを判断する(ステップS31)。指定されたファイル名のEXIF画像ファイル32をはじめて読み込む場合には、そのファイルのデータはキャッシュメモリ71に読み込まれていない。したがって、キャッシュシステム92は、その指示に係る1ワード分のデータがキャッシュメモリ71内に格納されていないと判断する。
指示に係る1ワード分のデータがキャッシュメモリ71内に格納されていない場合、キャッシュシステム92は、データの送信要求を生成する(ステップS32)。このデータの送信要求には、要求に係るファイル名と、読み込むデータのデータ位置の範囲(たとえば読み込むデータ位置の範囲の先頭バイトのデータ位置と最終バイトのデータ位置とを組み合わせたもの)とが含まれる。最初のデータの送信要求では、読み込むデータの先頭バイトとしてファイルの先頭バイトが指定され、最終バイトとしてキャッシュバッファ72のサイズに相当するバイトが指定される。
このデータの送信要求は、キャッシュシステム92から出力された後、プリンタ2のUSBマスストレージクラス95、プリンタ2のUSB通信I/F46、DSC1のUSB通信I/F19およびDSC1のUSBマスストレージクラス83を介して、画像データ送信部82へ送信される。
画像データ送信部82は、データの送信要求が入力されると、その要求に係るデータを半導体メモリ20から読み込む。この最初のデータの要求に基づいて、画像データ送信部82は、指定されたファイル名のEXIF画像ファイル32の先頭バイトから、キャッシュバッファ72のサイズに相当するバイトまでのデータを読み込む。
画像データ送信部82に読み込まれたデータは、画像データ送信部82から出力された後、DSC1のUSBマスストレージクラス83、DSC1のUSB通信I/F19、プリンタ2のUSB通信I/F46およびプリンタ2のUSBマスストレージクラス95を介して、キャッシュシステム92へ送信される。
キャッシュシステム92は、要求していたデータが入力されると、そのデータを空いているキャッシュバッファ72に書き込む(ステップS33)。また、キャッシュシステム92は、そのキャッシュバッファ72に格納したデータのファイル名および格納しているデータ位置の範囲を示す情報と、キャッシュした時刻の情報とを記憶する。なお、空いているキャッシュバッファ72が無い場合には、キャッシュシステム92は、最も早くデータをキャッシュしたキャッシュバッファ72を選択し、その選択したキャッシュバッファ72に受信したデータを上書きする。
そして、キャッシュシステム92は、そのデータをデコーダ93へ出力する(ステップS34)。
キャッシュシステム92に要求した1ワード分のデータがキャッシュシステム92から入力されると、図13に示すように、デコーダ93は、そのデータの入力によって、ブロック1つ分のすべてのデータの読み込みが完了したか否かを判断する(ステップS13)。そして、デコーダ93は、JPEGの符号化ブロック1つ分のすべてのデータの読み込みが完了するまで、次の1ワード分のデータの出力要求をキャッシュシステム92へ繰り返し出力する。
キャッシュシステム92は、デコーダ93から1ワード分のデータの出力要求が入力される度に、キャッシュバッファ72のデータの範囲を示す情報と要求されたデータの位置とを比較して、その要求に係るデータがキャッシュメモリ71内にあるか否かを判断する(ステップS31)。また、キャッシュシステム92は、キャッシュメモリ71内にデータがある場合には、キャッシュメモリ71から読み出して出力し(ステップS34)、キャッシュメモリ71内にデータがない場合には、DSC1から新たなデータを取得して(ステップS32,S33)、要求に係るデータを出力する(ステップS34)。
デコーダ93は、ブロック1つ分のすべてのデータの読み込みが完了すると、そのブロックのデコード処理を行う(ステップS14)。デコーダ93は、復号化したピクセル毎のピクセルのデータを印刷制御データ生成部94へ出力する。なお、デコード処理は、1ブロック毎ではなく所定の数のブロックに対してまとめて行うようにしてもよい。
デコード処理が完了すると、デコーダ93は、印刷指示データ解釈部91が指定したファイルのEXIF画像データをすべて読み込んだか否かを判断する(ステップS15)。そして、デコーダ93は、指定されたファイルのすべてのEXIF画像データを読み込んだ場合には、デコード処理を終了する。
なお、ファイルのすべてのEXIF画像データを読み込んだ否かは、ファイルの最後に付加されているEOFデータを読み込んだか否かに基づいて判断すればよい。
指定されたファイルのすべてのEXIF画像データの読込みが完了していない場合には、デコーダ93は、次のブロックの先頭ビットから、ワード毎のデータ読み込み処理を再開する(ステップS16)。
なお、ブロック1つ分のすべてのデータの読み込みが完了したと判断する際に、デコーダ93は、その最後に読み込んだデータの最終バイトの次のバイトを次のブロックの先頭バイトと判断する。
以上の処理により、印刷指示データ解釈部91がデコーダ93に指定したファイルのEXIF画像データはすべて、ピクセル毎のピクセルデータへ変換され、印刷制御データ生成部94へ出力される。
印刷制御データ生成部94は、ブロック毎に入力されるピクセルデータを保持する。そして、印刷制御データ生成部94は、少なくとも1印刷行(つまり、少なくとも1回のキャリッジ走査)分のピクセルデータがそろったら、その1印刷行分のピクセルデータに基づいて印刷制御データを生成する。印刷デバイス47は、この印刷制御データを用いて用紙58に少なくとも1行分の印刷処理を行う。
また、印刷制御データ生成部94は、この1印刷行分のピクセルデータに基づく印刷制御データの生成処理を、すべてのピクセルデータについて繰り返す。これにより、排紙トレイ54に排出される用紙58には、印刷指示データ解釈部91がデコーダ93に指定したファイルのEXIF画像データに基づく画像が所定のレイアウトにて形成される。また、その画像は、画像の長手方向が用紙58の給紙方向となる姿勢にて形成される。
ところで、デコーダ93によるワード単位でのデータ読み込みが進んで、キャッシュバッファ72内にデコーダ93により要求されるデータがなくなると、キャッシュシステム92は、1つのキャッシュバッファ72分のデータをDSC1から新たに取得する。また、キャッシュシステム92は、DSC1から新たに取得したデータを、空いているキャッシュバッファ72、あるいは、空いているキャッシュバッファ72が無い場合には最も更新時刻が古いキャッシュバッファ72に格納する。また、キャッシュシステム92は、新たに取得したデータの中から、デコーダ93により要求されたデータを読み出して、デコーダ93へ出力する。
このように、キャッシュメモリ71にキャッシュされるデータは、デコーダ93によるワード単位でのデータ読み込みが進むにつれて更新される。また、先にキャッシュしたデータは、後からキャッシュしたデータによって消去される。
図15は、画像を回転しない場合におけるキャッシュメモリ71の状態変化の一例を示す図である。図15(A)は、キャッシュメモリ71に読み込まれるEXIF画像データのデータ構造を示すものである。図15(B)は、画像を回転させずにデコードする場合において、デコードを開始した直後のキャッシュメモリ71の記憶状態の一例を示す図である。図15(C)は、画像を回転させずにデコードする場合において、デコードを終えた時のキャッシュメモリ71の記憶状態の一例を示す図である。
画像を回転させずにデコードする場合、図15に例示するように、キャッシュメモリ71には、EXIF画像データの先頭から順番に読み込まれる。また、空いているキャッシュバッファ72が無くなったら、古いデータを記憶するキャッシュバッファ72から順番に、新たに読み込んだデータにて上書きされる。
したがって、EXIF画像データを回転させずに印刷する場合には、キャッシュシステム92は、EXIF画像データを、キャッシュバッファ72のサイズ分ずつ先頭から順番にキャッシュする。また、EXIF画像データの各バイトは、1回ずつキャッシュメモリ71に読み込まれる。
図13および図14に戻り、印刷指示データ解釈部91からのデコード指示に画像を回転させる指示が含まれている場合には、デコーダ93は、そのデコードを指示されたEXIF画像データのプレスキャンを開始する(ステップS17)。
プレスキャンにおいて、デコーダ93は、ファイル名を指定して、キャッシュシステム92に対して1ワード単位でデータ読込み指示を出力し、EXIF画像データを先頭から最後まで順番に読み込む。キャッシュシステム92は、デコーダ93から要求されたデータがキャッシュメモリ71にある場合には、そのキャッシュメモリ71からデータを読み出してデコーダ93へ出力し(ステップS34)、デコーダ93から要求されたデータがキャッシュメモリ71にない場合には、そのデータを含むデータをDSC1からキャッシュバッファ72へ読み込み(ステップS32、S33)、その1ワードのデータをデコーダ93へ出力する(ステップS34)。
キャッシュシステム92から1ワード分のデータが入力されると、デコーダ93は、そのデータが、ブロック行の先頭バイトであるか否かを判断する。ブロック行の先頭バイトとは、画像においてブロック行の左端に位置するブロックの先頭バイトである。
そして、キャッシュシステム92から入力されたデータがブロック行の先頭バイトである場合には、デコーダ93は、その先頭バイトの、EXIF画像データにおけるデータ位置、すなわちEXIF画像データの先頭ビットから何バイト目のデータであるのかを記憶する。
デコーダ93は、EXIF画像データの終わりまでワード単位でのデータ取得を繰り返す。そして、EXIF画像データの終わりまでワード単位でのデータ取得を繰り返した後には、デコーダ93は、EXIF画像データに含まれる画像のすべてのブロック行の先頭バイトのデータ位置を記憶している。なお、各ブロック行の先頭バイトのデータ位置は、それぞれのポインタバッファに記憶される。
以上のプレスキャン処理を完了したら、デコーダ93は、EXIF画像データのデコードのための読み込みを開始する(ステップS18)。デコーダ93は、まず、画像の一番上のブロック行(つまり、画像データの先頭に最も近い1行分のブロック)の先頭バイトからワード単位でのデータ読み込みを開始する。キャッシュシステム92は、デコーダ93に要求されたデータを、必要に応じてキャッシュしながらデコーダ93へ出力する。なお、本実施の形態では、画像の上とは、画像データのはじめの部分による画像部分をいい、画像の左とは、画像データの最初のブロックによる画像が配置される側をいう。
また、デコーダ93は、ブロック1つ分のすべてのデータの読み込みが完了したか否かを判断し(ステップS19)、それが完了するまでワード単位のデータの読み込みを繰り返す。
そして、ブロック1つ分のすべてのデータの読み込みが完了すると、デコーダ93は、そのデータの次のバイトのデータ位置を記憶する。デコーダ93は、このブロック行について、この新たなデータ位置を、このブロック行のポインタバッファに上書きする(ステップS20)。
ポインタバッファに格納するデータ位置を更新したら、デコーダ93は、読み込んだブロックのデコード処理を行う(ステップS21)。また、デコーダ93は、デコード処理により生成したピクセル毎のピクセルのデータを印刷制御データ生成部94へ出力する。なお、デコーダ93は、複数ブロックをまとめて復号化するようにしてもよい。
デコード処理が完了すると、デコーダ93は、印刷指示データ解釈部91が指定したファイル32のEXIF画像データをすべてデコードしたか否かを判断する(ステップS22)。そして、デコーダ93は、指定されたファイルのすべてのEXIF画像データをデコードした場合には、デコード処理を終了する。
指定されたファイルのすべてのEXIF画像データの読込みが完了していない場合には、デコーダ93は、さらに画像のブロック列1列(つまり、少なくとも1回のキャリッジ走査による印刷に必要なブロック1列)分のデータ読込みが完了しているか否かを判断する(ステップS23)。
画像の左上のブロックのデコード処理が完了した時点では、EXIF画像データをデコードのためにすべて読み込んでおらず、また、画像のブロック列1列分のデータ読込みも完了していない。そのため、デコーダ93は、次のブロック行のデコード処理を開始する(ステップS24)。
具体的には、デコーダ93は、画像の上から二行目のブロック行に対応するポインタバッファからデータ位置を読み込み、このデータ位置からワード単位でのデータ読み込みを開始する。そして、デコーダ93は、ブロック1つ分のデータを読み込んだら(ステップS19)、その画像の上から二行目のブロック行のポインタバッファの値を、そのブロックの最後のデータの次のデータのデータ位置に更新し(ステップS20)、そのブロックのデコード処理を行う(ステップS21)。
また、デコーダ93は、このブロック行毎のデコード処理(ステップS19〜S24)を繰り返す。そして、画像の左端のブロック列のすべてのブロックについてデコード処理が完了すると、デコーダ93は、画像の一番上のブロック行についてのデコード処理を行う(ステップS25)。このとき、画像の一番上のブロック行に対応するポインタバッファには、画像の左端のブロックの最終バイトの次のバイトのデータ位置が格納されている。したがって、デコーダ93は、画像の一番上のブロック行の左から二番目のブロックのデコード処理を行うことになる。
以上のように、デコーダ93は、画像のブロック行毎にブロックの先頭ビットを格納するポインタバッファを設け、各ブロックのデータを読み込んだらこのポインタバッファに格納されるデータ位置を順次更新し、複数のブロック行について順番にデコード処理を繰り返す。これにより、デコーダ93は、画像の左側(つまり最初に印刷される画像に対応するブロック列)のブロック列から右側のブロック列までについて順番にデコード処理を行うことになる。
また、印刷制御データ生成部94は、ブロック毎に入力されるピクセルデータを保持する。そして、印刷制御データ生成部94は、少なくとも1印刷行(つまり、少なくとも1回のキャリッジ走査)分のピクセルデータがそろったら、その1印刷行分のピクセルデータに基づいて印刷制御データを生成する。印刷デバイス47は、この印刷制御データを用いて用紙58に少なくとも1行分の印刷処理を行う。
また、印刷制御データ生成部94は、この少なくとも1印刷行分のピクセルデータに基づく印刷制御データの生成処理を、すべてのピクセルデータについて繰り返し行う。これにより、排紙トレイ54に排出される用紙58には、印刷指示データ解釈部91がデコーダ93に指定したファイルのEXIF画像データに基づく画像が所定のレイアウトにて形成される。また、その画像は、画像の長手方向が用紙58の給紙方向となる姿勢にて、つまり90度あるいは270度に回転して形成される。
ところで、このように画像を回転して印刷する場合であっても、デコーダ93によるワード単位でのデータ読み込みが進んで、キャッシュバッファ72内にデコーダ93により要求されるデータがなくなると、キャッシュシステム92は、キャッシュバッファ72のサイズ分のデータをDSC1から新たに取得する。また、キャッシュシステム92は、DSC1から新たに取得したデータを、空いているキャッシュバッファ72、あるいは、空いているキャッシュバッファ72が無い場合には最も更新時刻が古いキャッシュバッファ72に格納する。
図16は、画像を回転する場合におけるキャッシュメモリ71の状態変化の一例を示す図である。図16(A)は、キャッシュメモリ71に読み込まれるEXIF画像データのデータ構造を示すものである。図16(B)は、画像を回転させてデコードする場合において、ブロックを一列分のデコード処理が完了した時点でのキャッシュメモリ71の記憶状態の一例を示す図である。図16(C)は、画像を回転させてデコードする場合において、ブロックを2列分のデコード処理が完了した時点でのキャッシュメモリ71の記憶状態の一例を示す図である。
なお、キャッシュシステム92は、画像のブロック行の行数m以上の本数Pのキャッシュバッファ72を有する。また、通常、キャッシュバッファ72のサイズは、1つのブロックのデータ量より大きい。ちなみに、JPEG形式の画像データにおいて一列分のブロックのデータ量は、数十バイト、大きくても数キロバイトであるのが一般的である。
そのため、画像を回転してデコードする場合において、画像の左端の一列(まり、最初に印刷される画像に対応するブロック列)分のブロックのデコードが完了した時点では、図16(B)に例示するように、キャッシュメモリ71の複数のキャッシュバッファ72には、画像の左端のブロック列のすべてのブロックのデータがキャッシュされることになる。また、画像の左端の一列分のブロックのデータとともにキャッシュされた画像の左から二列目のブロックのデータも、消されることなく、すべてキャッシュメモリ71内に残っている。したがって、この場合では、キャッシュシステム92がDSC1からデータをキャッシュしないでも、デコーダ93は、左から二列目以降のブロックをデコードすることができる。
また、キャッシュシステム92は、キャッシュメモリ71内にデコーダ93から要求されたデータがキャッシュメモリ71内に無い場合には、そのデータを先頭とするキャッシュバッファ72のサイズに相当するデータ量のデータを、DSC1からキャッシュバッファ72へ読み込む。つまり、図16(C)に例示するように、キャッシュシステム92は、画像の一番上の左から二番目のブロックがデコードされる際には、そのブロックのデータの中のキャッシュしていない分のデータだけを新たにキャッシュする。なお、このキャッシュの際に、左から三番目以降のブロックのデータも一緒にキャッシュされる。
ブロック列における各ブロックのデータ量が均一である理想的な場合には、ブロック行の本数と同数にキャッシュバッファ72に格納されているデータが、同時期に順番にキャッシュアウトし、各ブロック行の後続のデータがキャッシュインすることになる。この理想状態の場合では、各データは、一度だけキャッシュインし、そのデータのデコーダ93への読み込みが完了すると、キャッシュアウトしていく。
実際の場合、ブロック列における各ブロックのデータ量が均一となることは稀であると予想されるが、その場合でも、ブロック行数以上のキャッシュバッファ72が用意されていることにより、2つのブロック行を跨いだデータがキャッシュバッファ72に格納されず、また、印刷上の同一走査ラインに対応する、複数のブロック行に属する複数のブロックが、複数のキャッシュバッファ72に並行して架空のされた状態となる可能性が高くなる。これにより、データのキャッシュアウトおよび再度のキャッシュインの頻度が少なくて済み、キャッシュシステム92でのキャッシュヒット率が高まる。
さらに、キャッシュシステム92は、DSC1に対するデータリードの最小単位で、読み込みデータを指定する。このため、過去にキャッシュインしデコードに既に使用されたデータが再度キャッシュインする割合が低減する。なお、この実施の形態1では説明の都合上、データリードの最小単位を1バイト単位としているが、SCSIコマンドを使用する場合には、通常、データリードの最小単位は、512バイトか1024バイトとなる。また、データリードの最小単位は、使用するファイルシステムやファイル管理プロトコルによって異なるため、実装される方式の最小単位のデータ量を採用すればよい。
次に、本実施の形態1によるキャッシュシステム92の有効性を示すために、他のキャッシュ方式との比較について説明する。
図17は、他のキャッシュ方式でのキャッシュメモリの状態変化を示す図である。この方式では、画像を回転する場合においてキャッシュバッファの本数Pを画像のブロックの行数mより少なくしたものである。また、この方式では、キャッシュシステムがキャッシュバッファのサイズごとにEXIF画像データを分割し、その分割単位毎にデータをキャッシュする。
図17(A)は、画像を回転してデコードする場合において、デコードを開始した直後にキャッシュバッファが一杯になった時点でのキャッシュメモリの記憶状態の一例を示す図である。図17(B)は、画像を回転してデコードする場合において、ブロックを1列分デコードした時点でのキャッシュメモリの記憶状態の一例を示す図である。
キャッシュバッファの本数Pが画像のブロックの行数mより少ない場合、キャッシュメモリの容量が画像データより小さいと、図17(A)に示すように、キャッシュメモリには、ブロック一列分のデータをキャッシュすることができない。したがって、一列分のブロックのデコード処理が完了した時点では、図17(B)に示すように、画像の一番上のブロック行のデータは、キャッシュメモリに残っていない。そのため、キャッシュシステムは、デコーダが各ブロックをデコードする度に、DSC1からデータをキャッシュしなければならない。また、キャッシュバッファのサイズを読み込み単位としているため、キャッシュインしても使用されないデータが多くなる。
この従来の方式、つまり図17の方式のようにキャッシュバッファの本数Pが画像のブロックの行数mより少なく、EXIF画像データをキャッシュバッファのサイズごとに分割した単位でデータをキャッシュする場合に比べて、この実施の形態1に係るダイレクト印刷システムは、DSC1での印刷画像の選択操作からプリンタ2での印刷完了までの時間を格段に短縮することができる。
たとえば、縦3450ピクセル、横4600ピクセルの画像を8×8ピクセル毎にブロックのデータへ変換する場合、ブロック行の行数は、432(≒3450/8=431.25)行となる。この画像4つを1枚の用紙58に印刷する場合には、用紙58の給紙方向に垂直な方向に2つの画像を並べることになる。このとき、1印刷行を生成するためには、864(=432×2)個のブロックをデコードする必要がある。
このような4つの画像を3Mバイトのキャッシュメモリでキャッシュして回転して印刷する場合において、従来の方式で1本15kバイトのキャッシュバッファを200本だけ用いる場合に比べて、本実施の形態のキャッシュメモリの構造では、DSC1での印刷画像の選択操作からプリンタ2での印刷完了までの時間が約5分の1に減らすことができた。
なお、3Mバイトのキャッシュメモリ71において本実施の形態のキャッシュメモリの構造を実現する場合、キャッシュバッファ72のサイズは、3472(≒3M/864)バイトになる。
また、そのような3Mバイトのキャッシュメモリ71において864本のキャッシュバッファ72を構成した場合、4Mバイトの画像データによる1つの画像を1枚の用紙58に回転して印刷するときには、200本のキャッシュバッファを構成した場合に比べて、DSC1での印刷画像の選択操作からプリンタ2での印刷完了までの時間を約3分の1に減らすことができた。
以上のように、この実施の形態1に係るダイレクト印刷システムでは、上記構成により、キャッシュメモリ71の効率が向上し、容量が小さいキャッシュメモリ71であっても大きな画像データに基づく画像を迅速に印刷することができる。上述した理想的な状態の場合には、画像を回転して印刷する場合であっても、デコード処理の際には、およそEXIF画像データのデータ量をキャッシュバッファ72のサイズで割った回数(余りがある場合には商に1を加えた回数)だけ、DSC1からプリンタ2へデータをキャッシュするだけで、そのEXIF画像データに基づく画像を印刷することができる。
また、この実施の形態1では、キャッシュシステム92は、読み込むデータの先頭に、デコーダ93に要求されたデータが含まれるように半導体メモリ20からデータを読み込んでいる。そのため、キャッシュバッファ72には、それ以降の印刷で使用するデータがより多く先読みされる。その結果、たとえば、画像データを画像データバッファ71のサイズごとに分割し、その分割した単位毎に画像データを読み込む場合に比べて、画像データの読み込み回数を減らすことができる。
なお、この実施の形態1では、キャッシュシステム92は、画像データにおける画像のブロック行の行数(m)と同数あるいはそのブロック行の行数(m)より多い数の複数のキャッシュバッファ72を生成している。このほかにもたとえば、複数の画像データの画像をキャリッジ55の駆動方向に並べて印刷する場合には、キャッシュシステム92は、それら複数の画像データのブロック行の行数の総数と同数あるいはそのブロック行の行数の総数より多い数の複数のキャッシュバッファ72を生成するようにすれば、同様の効果を期待することができる。
実施の形態2.
本発明の実施の形態2に係るダイレクト印刷システムは、画像データのサイズに応じて、キャッシュメモリ71の構成を変更するようにしたものである。なお、DSC1の構成および動作は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。また、プリンタ2のハードウェア構成は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。
図18は、本発明の実施の形態2のプリンタ2における記憶部43の記憶内容を示す図である。また、図19は、本発明の実施の形態2のダイレクト印刷システムに実現される機能を示すブロック図である。プリンタ2の記憶部43には、印刷指示データ解釈プログラム101と、キャッシュシステムプログラム102と、デコーダプログラム63と、印刷制御データ生成プログラム64と、通信制御プログラム群とが記憶される。プリンタ2の通信制御プログラム群は、USBマスストレージクラスプログラム65とを有する。
デコーダプログラム63、印刷制御データ生成プログラム64およびUSBマスストレージクラスプログラム65は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。
印刷指示データ解釈プログラム101は、中央処理装置41に実行されることで印刷指示データ解釈部111を実現する。キャッシュシステムプログラム102は、中央処理装置41に実行されることで、形成手段、読込手段および出力手段としてのキャッシュシステム112を実現する。これら印刷指示データ解釈部111およびキャッシュシステム112は、実施の形態1のものと基本的に同じものであるが、後述するように、画像を回転して印刷する際の動作の一部が変更されている。
次に、以上のような構成を有するダイレクト印刷システムの動作を説明する。
DSC1では、印刷指示データ生成部81と、画像データ送信部82と、USBマスストレージクラス83とが実現される。また、プリンタ2では、印刷指示データ解釈部111と、キャッシュシステム112と、デコーダ93と、印刷制御データ生成部94と、USBマスストレージクラス95とが実現される。形成手段としてのキャッシュシステム112は、メモリ42に、所定のサイズを有するバッファメモリとしてのキャッシュメモリ113を生成する。この生成時のキャッシュメモリ113内のキャッシュバッファのサイズおよび本数は、実施の形態1のキャッシュメモリ71のものと同じである。
そして、プリンタ2のUSB通信I/F46とDSC1のUSB通信I/F19とによるコンフィグレーション処理が完了し、DSC1の印刷指示データ生成部81から印刷指示データ解釈部111へ印刷指示データが送信される。
図20は、図19中の印刷指示データ解釈部111の動作を示すフローチャートである。
印刷指示データ解釈部111は、印刷指示データが入力されると、その印刷指示データにて指定される印刷処理の制御を開始する(ステップS41)。具体的には、印刷指示データ解釈部111は、まず、印刷指示データの中からファイル名等を抽出し、そのファイル名のファイルのデータ量(ファイルサイズ)と、そのファイルに含まれる画像のサイズ情報との取得を要求するデータを生成する。
このファイルのデータ量および画像サイズ情報の取得要求データは、画像データ送信部82へ送信される。画像データ送信部82は、画像サイズ情報の取得要求データを受け取ると、その取得要求データに含まれるファイル名を抽出する。また、画像データ送信部82は、そのファイル名のファイル32から、そのデータ量および画像サイズ情報を読み込み、これらを印刷指示データ解釈部111へ送信する。
印刷指示データ解釈部111は、画像ファイル32のデータ量(ファイルサイズ)、画像の縦ピクセル数と横ピクセル数を受信すると、画像の回転が必要か否かを判断する(ステップS42)。
印刷指示データ解釈部111は、画像の回転が必要ではない場合には、キャッシュメモリ113の第一の再構成指示をキャッシュシステム112へ出力する。キャッシュシステム112は、この再構成指示を受け取ると、キャッシュバッファの本数を少なくし(たとえば200本)、一本のキャッシュバッファの容量を実施の形態1のキャッシュバッファの容量より大きくする(たとえば、15kバイト)(ステップS43)。
その後、実施の形態1と同様にしてデコーダ93により画像データのデコードが行われる(ステップS3)。この場合、キャッシュバッファのサイズが大きいので、キャッシュバッファ内のデータの入れ替えを行う回数が減る。
一方、印刷指示データ解釈部111は、画像の回転が必要である場合には、画像ファイル32のデータ量がキャッシュメモリ113のサイズ以下であるか否かを判断する(ステップS44)。
印刷指示データ解釈部111は、画像ファイル32のデータ量がキャッシュメモリ113のサイズ以下である場合、キャッシュメモリ113の第一の再構成指示をキャッシュシステム112に行わせる(ステップS45)。その後、デコーダ93により画像を回転させる順番で画像データのデコードが行われる(ステップS4)。この場合、画像の回転が行われるが、画像ファイル32のすべてのデータがキャッシュされているため、キャッシュデータのヒット率は高くなり、この点についての問題は特に生じない。
また、印差指示データ解釈部111は、画像ファイル32のデータ量がキャッシュメモリ113のサイズより大きい場合、キャッシュメモリ113の第二の再構成指示をキャッシュシステム112へ出力する。キャッシュシステム112は、この再構成指示を受け取ると、キャッシュバッファのサイズと本数を、実施の形態1の場合と同様に設定する(ステップS46)。つまり、ステップS43の場合と比べ、キャッシュバッファの本数は多くなり、一本のキャッシュバッファサイズは小さくなる。
その後、実施の形態1と同様にしてデコーダ93により、画像を回転させる順番で、画像データのデコードが行われる(ステップS4)。このように、実施の形態2では、キャッシュメモリ113のサイズが画像ファイル32のデータ量より小さく、かつ画像の回転が必要である場合にのみ、実施の形態1のキャッシュ方式で、キャッシュシステム112およびキャッシュメモリ113が動作する。
なお、印刷制御データ生成部94の動作および印刷デバイス47による用紙58への印刷処理については、実施の形態1の場合と同様であるので、その説明を省略する。
以上のように、この実施の形態2では、キャッシュメモリ113のサイズが画像ファイル32のデータ量より小さく、かつ画層の回転が必要である場合にのみ、実施の形態1のキャッシュ方式で、キャッシュシステム112およびキャッシュメモリ113が動作し、それ以上の場合では、キャッシュバッファの本数が少なくかつキャッシュバッファの容量が大きくされる。これにより、キャッシュメモリ113のサイズが画像ファイル32のデータ量より小さく、かつ画像の回転が必要である場合には、実施の形態1と同様にしてキャッシュデータヒット率を高くし印刷時間を低減でき、また、そうでない場合には、キャッシュメモリ113のデータの出し入れの回数を少なくして印刷時間を低減することができる。
なお、この実施の形態2では、キャッシュシステム112は、画像データにおける画像のブロック行の行数(m)と同数あるいはそのブロック行の行数(m)より多い数の複数のキャッシュバッファを生成している。このほかにもたとえば、複数の画像データの画像をキャリッジ55の駆動方向に並べて印刷する場合には、キャッシュシステム112は、それら複数の画像データのブロック行の行数の総数と同数あるいはそのブロック行の行数の総数より多い数の複数のキャッシュバッファを生成するようにすれば、同様の効果を期待することができる。
実施の形態3.
本発明の実施の形態3に係るダイレクト印刷システムは、画像ファイル32のデータ量に応じてキャッシュメモリ133の構成を変更するようにしたものである。なお、DSC1の構成および動作は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。また、プリンタ2のハードウェア構成は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。
図21は、本発明の実施の形態3のプリンタ2における記憶部43の記憶内容を示す図である。また、図22は、本発明の実施の形態3のダイレクト印刷システムに実現される機能を示すブロック図である。プリンタ2の記憶部43には、印刷指示データ解釈プログラム121と、キャッシュシステムプログラム122と、デコーダプログラム63と、印刷制御データ生成プログラム64と、通信制御プログラム群とが記憶される。プリンタ2の通信制御プログラム群は、USBマスストレージクラスプログラム65を有する。
デコーダプログラム63、印刷制御データ生成プログラム64およびUSBマスストレージクラスプログラム65は、実施の形態1のものと同じであり、同一の符号を付して説明を省略する。
印刷指示データ解釈プログラム121は、中央処理装置41に実行されることで印刷指示データ解釈部131を実現する。キャッシュシステムプログラム122は、中央処理装置41に実行されることで、形成手段、読込手段および出力手段としてのキャッシュシステム132を実現する。これら印刷指示データ解釈部131およびキャッシュシステム132は、実施の形態1のものと基本的に同じものであるが、後述するように、画像を回転して印刷する際の動作の一部が変更されている。
次に、以上のような構成を有するダイレクト印刷システムの動作を説明する。
DSC1では、印刷指示データ生成部81と、画像データ送信部82と、USBマスストレージクラス83とが実現される。また、プリンタ2では、印刷指示データ解釈部131と、キャッシュシステム132と、デコーダ93と、印刷制御データ生成部94と、USBマスストレージクラス95とが実現される。形成手段としてのキャッシュシステム132は、メモリ42に、所定のサイズを有するバッファメモリとしてのキャッシュメモリ133を生成する。
そして、プリンタ2のUSB通信I/F46とDSC1のUSB通信I/F19とによるコンフィグレーション処理が完了し、DSC1の印刷指示データ生成部81から印刷指示データ解釈部131へ印刷指示データが送信される。
図23は、図22中の印刷指示データ解釈部131の動作を示すフローチャートである。
印刷指示データ解釈部131は、印刷指示データが入力されると、その印刷指示データにて指定される印刷処理の制御を開始する(ステップS1)。具体的には、印刷指示データ解釈部131は、まず、画像サイズ情報の取得要求データを、画像データ送信部82へ送信する。画像データ送信部82は、画像サイズ情報の取得要求データを受け取ると、その取得要求データに含まれるファイル名等を抽出する。また、画像データ送信部82は、そのファイル名のファイル32から、その画像サイズ情報を読み込み、これを印刷指示データ解釈部131へ送信する。
印刷指示データ解釈部131は、これらの情報を受信したら、画像の縦方向のピクセル数および横方向のピクセル数の情報並びに用紙58への画像の印刷レイアウトに基づいて、画像を回転させる必要があるか否かを判断する(ステップS2)。
そして、画像を回転する必要がないと判断した場合、実施の形態1と同様にデコードおよび印刷処理が行われる(ステップS3)。
一方、画像を回転する必要があると判断した場合、印刷指示データ解釈部131は、画像の縦方向のピクセル数の情報と、印刷レイアウトとに基づいて、キャッシュメモリ133内のキャッシュバッファの本数および一本のキャッシュバッファの容量を演算する(ステップS51)。
具体的にはたとえば、用紙の給紙方向と垂直な方向に画像を並べることなく印刷する場合(たとえば1upの場合)には、印刷指示データ解釈部131は、画像の縦のピクセル数を1ブロックの縦のピクセル数(ここでは8)で割る。そして、印刷指示データ解釈部131は、その演算結果の商の値(余りがある場合には、商に1を加算した値)を、キャッシュメモリ133内のキャッシュバッファの本数として演算する。なお、一本のキャッシュバッファの容量は、たとえば、キャッシュメモリ133の容量をキャッシュバッファの本数で割り、読み込みの最小単位未満の端数を切り捨てることで得られる。
ほかにもたとえば、用紙の給紙方向と垂直な方向に2つの画像を並べて印刷する場合(たとえば4upの場合)には、印刷指示データ解釈部131は、画像の縦のピクセル数を1ブロックの縦のピクセル数(ここでは8)で割る。そして、印刷指示データ解釈部131は、その演算結果の商の値(余がある場合には、商に1を加算した値)の二倍を、キャッシュメモリ133内のキャッシュバッファの本数として演算する。
なお、用紙の給紙方向と垂直な方向にp(pは自然数)個の画像を並べる場合には、1画像あたりの演算結果のp倍を、キャッシュメモリ133内のキャッシュバッファの本数として演算すればよい。また、複数の画像を並べる場合に、各画像のピクセル数が異なるときには、各画像の縦ピクセル数の和からキャッシュバッファの本数を計算するようにしてもよい。
また、印刷指示データ解釈部131は、演算したキャッシュバッファの本数および容量の情報をキャッシュシステム132へ出力する。
印刷指示データ解釈部131からキャッシュバッファの本数の情報が入力されると、形成手段としてのキャッシュシステム132は、キャッシュメモリ133内のキャッシュバッファの本数がその指示された本数および容量となるように、キャッシュメモリ133を再構成する。
その後、実施の形態1のステップS45と同様にして、EXIF画像データの画像は回転しながらデコードされ、その画像が印刷される(ステップS4)。
以上のように、この実施の形態3では、印刷に係る画像データにおける画像のブロック行の数と同数のキャッシュバッファを形成し用いるので、キャッシュメモリ133の使用効率をより高くすることができ、画像データに応じた最適な印刷時間の短縮効果を期待することができる。
なお、この実施の形態3では、キャッシュシステム132は、画像データにおける画像のブロック行の行数(m)と同数あるいはそのブロック行の行数(m)より多い数の複数のキャッシュバッファを生成している。このほかにもたとえば、複数の画像データの画像をキャリッジ55の駆動方向に並べて印刷する場合には、キャッシュシステム132は、それら複数の画像データのブロック行の行数の総数と同数あるいはそのブロック行の行数の総数より多い数の複数のキャッシュバッファを生成するようにすれば、同様の効果を期待することができる。
以上の各実施の形態は、本発明の好適な実施の形態であるが、本発明はこれに限定されるものではなく、種々の変形、変更が可能である。
上記実施の形態では、画像を回転させる場合には、デコーダ93はプレスキャンをしてから、デコードのためのデータの読み込みを開始している。この他にもたとえば、デコード処理の前段階において画像の画質を変更するためのAPF(Auto Picture Fine)処理などの画像最適化処理をする場合には、その処理に使用するパラメータを生成するために画像データをスキャンする際に各ブロック行の先頭バイトのデータ位置をポインタバッファに格納し、デコーダ93によるプレスキャン処理を省略するようにしてもよい。
また、ほかにもたとえば、デコーダ93は、画像を回転する場合であっても画像を回転しない場合と同様にプレスキャンをすることなく、EXIF画像データの先頭から順番にデータを読み込んでその画像の左端のブロック列のデコード処理を開始し、その画像の左端のブロック列のデコード処理の際に各ブロック行の左から二番目のブロックの先頭バイトのデータ位置をポインタバッファに格納し、各ブロック行の左から二番目以降のブロック列のデコード処理においてはそのポインタバッファを用いてブロック行毎の読み込み処理を行うようにしてもよい。
上記各実施の形態では、EXIF画像データをキャッシュして印刷処理をしている。この他にもたとえば、ダイレクト印刷システムは、JPEG画像データ、ビットマップ形式の画像データなどを印刷してもよい。たとえば横長の画像のビットマップ形式の画像データの場合には、その画像における画像の行数はピクセル行となるので、その縦方向のピクセル数と同数あるいはそれ以上の数のキャッシュバッファを用いれば、実施の形態1と同様の効果を得ることができる。つまり、ビットマップ形式の画像データなどでは、1回のデータのキャッシュによって、キャリッジの複数回の走査で使用するデータを読み込むことができ、それによる印刷時間の短縮効果を得ることができる。
上記各実施の形態では、DSC1のカードリーダ16に挿入された半導体メモリ20のEXIF画像データの画像を回転して印刷している。この他にもたとえば、本発明は、プリンタにカードリーダを設け、このカードリーダに挿入された半導体メモリ20のEXIF画像データの画像を回転して印刷する場合にも適用することができる。
また、上記各実施の形態では、DSC1とプリンタ2がUSBにより接続されているが、その代わりに、別のインタフェースを採用してもよい。その場合、有線のインタフェースや有線の通信方式の他、ブルートゥース(商標)、赤外線通信などの無線のインタフェースや無線LANなどの有線の通信方式を使用してもよい。また、DSC1とプリンタ2との間のダイレクト印刷の制御コマンドやその応答などをUSBマスストレージクラスを利用して行っているが、その代わりに、PictBridge(商標)などを利用するようにしてもよい。
また、上記各実施の形態では、DSC1に画像ファイル32が格納されているが、その代わりに、携帯電話機、音楽プレーヤ、撮影機能のないストレージ装置などといった他の電子機器を使用してもよい。その場合、その電子機器には、プリンタ2と通信可能な通信手段が設けられる。
また、上記各実施の形態では、キャッシュシステム92,112,132、デコーダ93、印刷制御データ生成部94は、ソフトウェアにより実現されているが、これらのうちの一部または全部を専用のハードウェアにより実現するようにしてもよい。
なお、上記各実施の形態では、EXIF画像データ32のデータ量としてファィルサイズを使用しているが、その代わりに、EXIF画像データ32のEXIFヘッダを除いたデータ量としてもよい。
1 DSC(画像供給装置)、2 プリンタ、19 USB通信I/F(第一の通信手段)、20 半導体メモリ、46 USB通信I/F(第二の通信手段)、55 キャリッジ、72 キャッシュバッファ(画像データバッファ)、82 画像データ送信部(送信手段)、93 デコーダ(要求手段)、92 キャッシュシステム(読込手段、出力手段)、113,133 キャッシュメモリ(バッファメモリ)、112,132 キャッシュシステム(形成手段、読込手段、出力手段)