(58)【調査した分野】(Int.Cl.,DB名)
前記生成部は、前記(B1)において、前記スキャンデータの仮のサイズ情報を前記ヘッダ部に記述して、前記仮のサイズ情報が記述されている前記ヘッダ部と前記第1の部分スキャンデータとを含む前記第1の部分ファイルを前記内部メモリ内に生成する、請求項1から5のいずれか一項に記載のスキャナ。
前記仮のサイズ情報は、前記スキャン実行部がスキャン可能な最大原稿サイズと、前記スキャン実行部が利用可能な最高スキャン解像度と、に基づいて決定される最大サイズ情報である、請求項6に記載のスキャナ。
【発明を実施するための形態】
【0009】
(通信システム2の構成;
図1)
図1に示すように、通信システム2は、スキャナSCと、端末TEと、複数個のサーバSE1,SE2と、を備える。各デバイスSC,TE,SE1,SE2は、LAN4に接続されており、LAN4を介して相互に通信可能である。
【0010】
(スキャナSCの構成)
スキャナSCは、操作部10と、表示部12と、スキャン実行部14と、ネットワークインターフェイス16と、USBインターフェイス18と、制御回路30と、を備える。各部10〜30は、バス線(符号省略)に接続されている。なお、以下では、インターフェイスのことを「I/F」と記載する。
【0011】
操作部10は、複数のキーによって構成される。ユーザは、操作部10を操作することによって、様々な指示をスキャナSCに入力することができる。表示部12は、様々な情報を表示するためのディスプレイである。ネットワークI/F16は、スキャナSCをLAN4に接続するためのI/Fであり、有線I/Fでもよいし、無線I/Fでもよい。USBI/F18には、可搬型の外部メモリであるUSBメモリ20が装着される。
【0012】
スキャン実行部14は、透明板と、自動原稿搬送装置(ADF(Auto Document Feederの略))と、スキャン機構と、を備える。スキャン機構は、複数個のイメージセンサを備える。各イメージセンサは、CCD(Charge Coupled Deviceの略)であってもよいし、CIS(Contact Image Sensorの略)であってもよい。スキャン機構は、複数個のイメージセンサが並ぶ方向(以下では「副走査方向」と呼ぶ)に直交する方向(以下では「主走査方向」と呼ぶ)に移動可能である。スキャン機構は、主走査方向に移動することによって、透明板に載置される原稿をスキャンすることができる。また、スキャン機構は、スキャン機構自身が静止した状態で、自動原稿搬送装置によって主走査方向に搬送される原稿をスキャンすることができる。
【0013】
制御回路30は、CPU32と、ROM34と、NVRAM36と、VRAM38と、を備える。CPU32は、ROM34に格納されているプログラムPGに従って、様々な処理を実行する。
【0014】
NVRAM36は、不揮発性メモリであり、各デバイスTE,SE1,SE2に関係する各関係情報を記憶する。各関係情報は、ユーザによってNVRAM36内に予め登録される。端末TEの関係情報では、端末TEの名称「TN」と、端末TEと通信するための通信プロトコルの種類を示すプロトコル情報「P1」と、が対応付けられている。同様に、サーバSE1(又はSE2)の関係情報では、名称「SN1(又はSN2)」と、プロトコル情報「P1」とは異なるプロトコル情報「P2」と、が対応付けられている。
【0015】
VRAM38は、揮発性メモリであり、CPU32によって取得又は生成される様々なデータを記憶する。VRAM38は、1枚の原稿を表わすスキャンデータの最大データサイズよりも大きいメモリサイズを有する。最大データサイズは、スキャン実行部14がスキャン可能な最大原稿サイズ(例えばA3)を有する1枚の原稿を、スキャン実行部14が利用可能な最高スキャン解像度(例えば1200dpi)でスキャンすることによって生成されるスキャンデータのサイズを意味する。なお、スキャンデータは所定の圧縮方式に従って圧縮され得るが、ここでの最大データサイズは、圧縮されていない状態のスキャンデータの最大データサイズを意味する。なお、変形例では、VRAM38は、上記の最大データサイズよりも小さいメモリサイズを有していてもよい。
【0016】
(他のデバイスTE,SE1,SE2の構成)
端末TEは、PC(Personal Computerの略)、PDA(Personal Digital Assistantの略)、スマートフォン等のデバイスである。図示省略しているが、端末TEは、スキャン指示をスキャナSCに送信するためのスキャナドライバを備える。各サーバSE1,SE2は、JPEG(Joint Photographic Experts Groupの略)ファイル等の各種ファイルを記憶するためのサーバである。
【0017】
(JPEGファイル100の構成;
図2)
続いて、
図2を参照して、スキャナSCによって生成されるJPEGファイル100の構成を説明する。以下では、JPEGファイルのことを簡単に「ファイル」と呼ぶことがある。
図2は、1枚の原稿のスキャンを実行することによって生成されるファイル100の模式図を示す。ファイル100は、ヘッダ部110と、スキャンデータ130と、フッタ部140と、を含む。スキャナSCは、各データ部110,130,140の順序で、各データ110,130,140の生成及び送信を順次実行する。
【0018】
ヘッダ部110は、SOIマーカ112と、SOFマーカ114と、SOF116と、SOSマーカ118と、SOS120と、を含む。SOIマーカ112は、ファイル100の先頭を示すマーカであり、具体的な値として「0xFFD8」を示す。SOFマーカ114は、SOFマーカ114に続いてSOF116が記述されることを示すマーカであり、具体的な値として「0xFFC0」を示す。なお、SOFマーカ114の値として「0xFFC0」を例示しているが、変形例では別の値(例えば、「0xFFC1」、「0xFFC2」等)であってもよい。SOF116は、幅領域SW及び高さ領域SHを含む。SOSマーカ118は、SOSマーカ118に続いてSOS120が記述されることを示すマーカであり、具体的な値として「0xFFDA」を示す。SOS120には、スキャンデータ130に関する情報が記述される。SOS120に続いてスキャンデータ130が記述される。換言すると、SOS120は、ヘッダ部110の最後を示すデータである。
【0019】
SOF116内の幅領域SW、高さ領域SHには、それぞれ、スキャンデータ130の幅方向の画素数を示す幅情報、高さ方向の画素数を示す高さ情報が記述される。幅方向、高さ方向は、それぞれ、副走査方向、主走査方向に対応する。原稿の幅方向の長さが大きい程又は副走査方向のスキャン解像度が高い程、幅情報が大きくなる。原稿の高さ方向の長さが大きい程又は主走査方向のスキャン解像度が高い程、高さ情報が大きくなる。
【0020】
スキャンデータ130は、原稿を表わす複数個の画素によって構成されるビットマップデータが所定の圧縮方式に従って圧縮されたデータである。各画素は、RGBの多階調(例えば256階調)の画素値を有する。
【0021】
フッタ部140は、DNLマーカ142と、DNL144と、EOIマーカ146と、を含む。スキャンデータ130に続いてDNLマーカ142が記述される。換言すると、DNLマーカ142は、フッタ部140の先頭を示すデータである。DNLマーカ142は、DNLマーカ142に続いてDNL144が記述されることを示すマーカであり、具体的な値として「0xFFDC」を示す。DNL144は、上記の幅情報が記述され得る幅領域DWと、上記の高さ情報が記述され得る高さ領域DHと、を含む。EOIマーカ146は、ファイル100の最後を示すマーカであり、具体的な値として「0xFFD9」を示す。
【0022】
(スキャナSCの処理の概要)
スキャナSCは、各データ110,130,140のうちのヘッダ部110を最初に生成する。ただし、1枚の原稿のスキャンが終了しないと、即ち、1枚の原稿を表わすスキャンデータ130の全ての生成が終了しないと、スキャンデータ130の実際の高さ(即ち主走査方向の画素数)が不明である。従って、スキャナSCは、ヘッダ部110を生成する時点では、スキャンデータ130の実際の幅を示す実際幅情報をヘッダ部110内の幅領域SWに記述することができるが、スキャンデータ130の実際の高さを示す実際高さ情報をヘッダ部110内の高さ領域SHに記述することができない。スキャナSCは、通常、スキャンデータ130の全てを生成した後に、実際高さ情報をヘッダ部110内に記述する。その後、スキャナSCは、実際高さ情報が記述されているヘッダ部110、スキャンデータ130、及び、フッタ部140を外部に順次送信する。
【0023】
上述したように、スキャンデータ130の全ての生成が終了しなければ、実際高さ情報をヘッダ部110内に記述することができない。そして、ヘッダ部110は、スキャンデータ130よりも先に外部に送信されるべきデータである。このために、スキャナSCは、例えば、ファイル100をVRAM38内に生成すべき場合には、スキャンデータ130の全ての生成が終了して、スキャンデータ130の全てがVRAM38内に記憶されている状態で、実際高さ情報をヘッダ部110内に記述する。本実施例では、VRAM38は、スキャンデータ130の最大データサイズよりも大きいメモリサイズを有する。従って、スキャナSCは、通常、スキャンデータ130の全てをVRAM38内に同時的に記憶させることができ、スキャンデータ130の全てがVRAM38内に記憶されている状態で、実際高さ情報をヘッダ部110内に記述することができる。しかしながら、スキャナSCは、VRAM38を利用してスキャン処理とは異なる処理を実行する可能性があり、この場合、VRAM38内の空きメモリサイズがスキャンデータ130のデータサイズよりも小さくなり得る。このような状況では、スキャンデータ130の全てをVRAM38内に生成する前に、VRAM38がメモリフルになってしまうので、スキャナSCは、実際高さ情報をヘッダ部110内に記述することができない。なお、上記の異なる処理の例として、以下の各処理を挙げることができる。例えば、スキャナSCがウェブサーバ機能を実行可能である場合には、上記の異なる処理は、ウェブサーバとして動作するための処理を含む。また、例えば、スキャナSCが印刷機能を実行可能な多機能機に搭載されている場合には、上記の異なる処理は、印刷処理を含む。
【0024】
上記の実情に鑑みて、本実施例では、スキャナSCは、VRAM38がメモリフルにならない状況では、実際高さ情報をヘッダ部110内に記述する。この場合、スキャナSCは、実際高さ情報が記述されているヘッダ部110を含むファイル100を外部に送信する。一方、スキャナSCは、VRAM38がメモリフルになり得る状況では、実際高さ情報をヘッダ部110内に記述せずに、実際高さ情報をフッタ部140内の高さ領域DHに記述する。この場合、スキャナSCは、実際高さ情報が記述されていないヘッダ部110と、実際高さ情報が記述されているフッタ部140と、を含むファイル100を外部に送信する。
【0025】
ファイル100内に記述される幅情報及び高さ情報は、ファイル100によって表わされる画像を出力(表示、印刷等)する出力デバイスによって利用される。例えば、端末TEは、ファイル100によって表わされる画像を表示すべき際に、ファイル100内の幅情報及び高さ情報に従った画素数を有する画像を表示する。多くの出力デバイスは、ヘッダ部110内の幅情報及び高さ情報を利用して、画像を出力することができる。しかしながら、フッタ部140内の幅情報及び高さ情報を利用することができない出力デバイスが存在する。従って、スキャナSCは、実際高さ情報をヘッダ部110内に記述することを優先する。スキャナSCの処理の詳細を次に説明する。
【0026】
(スキャナSCの処理の詳細;
図3)
続いて、
図3を参照して、スキャナSCのCPU32によって実行される処理の内容を説明する。S10では、CPU32は、スキャン設定情報を含むスキャン指示を取得することを監視する。スキャン設定情報は、ファイルの送信先デバイスを示す送信先情報と、スキャン解像度を示す解像度情報と、原稿サイズを示す原稿サイズ情報と、を含む。
【0027】
例えば、CPU32は、ユーザがスキャナSCの操作部10を操作することに応じて、スキャン設定情報を含むスキャン指示を取得する。この場合、CPU32は、NVRAM36内の複数個の名称(例えば「TN」、「SN1」等)の中からユーザによって選択される1個の名称を送信先情報として取得する。また、CPU32は、複数個の画質(例えば「高画質」、「普通画質」等)の中からユーザによって選択される1個の画質に対応するスキャン解像度を解像度情報として取得する。当該スキャン解像度は、副走査方向のスキャン解像度と、主走査方向のスキャン解像度と、を含む。また、CPU32は、複数個の原稿サイズ(例えば「A4」、「A3」等)の中からユーザによって選択される1個の原稿サイズを原稿サイズ情報として取得する。なお、CPU32は、原稿サイズがユーザによって選択されない場合には、公知の手法を利用して原稿サイズを自動的に検知して、検知済みの原稿サイズを原稿サイズ情報として取得してもよい。また、CPU32は、いずれかのスキャン設定情報がユーザによって選択されない場合には、予め設定されているデフォルトのスキャン設定情報を取得してもよい。
【0028】
また、CPU32は、ユーザが端末TEの操作部(図示省略)を操作することに応じて、端末TEからLAN4を介してスキャン設定情報を含むスキャン指示を取得することもできる。この場合、例えば、NVRAM36内の複数個の名称がスキャナSCから端末TEに予め送信される場合には、ユーザは、端末TEの操作部を操作して、複数個の名称の中から1個の名称を送信先情報として選択する。この場合、CPU32は、ユーザによって選択された送信先情報を含むスキャン指示を取得する。また、端末TEがいわゆるプルスキャンをスキャナSCに実行させる場合には、ユーザによって送信先情報が選択されなくてもよい。この場合、CPU32は、端末TEのIPアドレスを含むスキャン指示を取得し、当該IPアドレスを送信先情報として取得する。なお、本実施例では、S10で取得される送信先情報は、1個の送信先デバイスのみを示すことを想定している。以下では、送信先情報によって示される送信先デバイスのことを「対象送信先デバイス」と呼ぶ。
【0029】
S12では、CPU32は、スキャン実行部14が原稿のスキャンを実行する前に、即ち、JPEGファイルを生成する前に、S10で取得された解像度情報及び原稿サイズ情報を利用して、スキャンデータの推測データサイズを算出する。具体的には、CPU32は、まず、原稿サイズ情報(例えば「A4」)に基づいて、原稿の副走査方向の長さと、原稿の主走査方向の長さと、を特定する。そして、CPU32は、原稿の副走査方向の長さと、解像度情報に含まれる副走査方向のスキャン解像度と、を利用して、スキャンデータの副走査方向(即ち幅方向)の推定画素数を算出する。また、CPU32は、原稿の主走査方向の長さと、解像度情報に含まれる主走査方向のスキャン解像度と、を利用して、スキャンデータの主走査方向(即ち高さ方向)の推定画素数を算出する。次いで、CPU32は、副走査方向の推定画素数と主走査方向の推定画素数とを乗算して、スキャンデータの合計の推定画素数を算出する。CPU32は、さらに、スキャンデータの合計の推定画素数に予め決められている仮の圧縮率(即ち「1」より小さい正の値)を乗算して、スキャンデータの推測データサイズを算出する。スキャンデータをどの程度圧縮できるのかは、スキャンデータが実際に生成されるまで不明であるので、ここでは、予め決められている仮の圧縮率が利用される。特に、本実施例では、比較的に低い圧縮効率を示す仮の圧縮率(例えば「0.9」等の比較的に大きい値)が利用される。圧縮済みスキャンデータの実際のデータサイズが推測データサイズよりも大きくなる事象が発生するのを抑制するためである。なお、変形例では、CPU32は、スキャンデータの合計の推定画素数に仮の圧縮率を乗算せずに、当該合計の推定画素数をスキャンデータの推測データサイズとして利用してもよい。本変形例によると、上記の事象が発生するのを適切に抑制することができる。
【0030】
S20では、CPU32は、VRAM38内の状態をチェックして、VRAM38内の現在の空きメモリサイズを特定し、S12で算出された推定データサイズが当該空きメモリサイズ以下であるのか否かを判断する。CPU32は、推定データサイズが空きメモリサイズ以下であると判断する場合(S20でYES)にはS22に進み、推定データサイズが空きメモリサイズより大きいと判断する場合(S20でNO)にはS30に進む。なお、変形例では、VRAM38には、スキャンデータを記憶するための所定の記憶領域が予め確保されていてもよい。この場合、CPU32は、当該所定の記憶領域のメモリサイズ(即ち予め決められている固定値)を空きメモリサイズとして利用して、S20の判断を実行してもよい。
【0031】
S22(即ち推定データサイズ≦空きメモリサイズ)では、CPU32は、スキャン処理を開始する。具体的に言うと、CPU32は、スキャンの開始を指示するための開始コマンドをスキャン実行部14に供給して、原稿のスキャンをスキャン実行部14に実行させる。開始コマンドは、S10で取得された解像度情報及び原稿サイズ情報によって示されるスキャン解像度及び原稿サイズを示す。スキャン実行部14は、CPU32から開始コマンドを取得すると、開始コマンド内のスキャン解像度及び原稿サイズに従って、原稿のスキャンを実行して、スキャン結果をCPU32に供給する。この結果、CPU32は、スキャン実行部14から取得されるスキャン結果(即ちアナログデータ)を利用して、ファイルをVRAM38内に生成する。ファイルの生成手法を次に詳しく説明する。
【0032】
CPU32は、まず、SOIマーカ112、SOFマーカ114、SOF116等を含むヘッダ部110(
図2参照)をVRAM38内に生成する。この段階では、CPU32は、SOF116内の幅領域SW及び高さ領域SHに幅情報及び高さ情報を記述しない。
【0033】
次いで、CPU32は、1ライン分のスキャン結果を利用して、1ライン分の複数個の画素によって構成される1ライン分のビットマップデータ(即ちデジタルデータ)をVRAM38内に生成する。ここで、上記の「1ライン」は、幅方向(即ち副走査方向)に沿って伸びる1ラインを意味する。従って、上記の「1ライン分の複数個の画素」は、幅方向に沿って並ぶ複数個の画素を意味する。そして、CPU32は、1ライン分のビットマップデータを所定の圧縮方式に従って圧縮して、1ライン分のスキャンデータをVRAM38内に生成する。
【0034】
CPU32は、最初の1ライン分のスキャンデータを生成する際に、スキャンデータ130の実際の幅を示す実際幅情報(即ち副走査方向の画素数)を特定する。この際に、CPU32は、ヘッダ部110のSOF116内の幅領域SWに実際幅情報を記述する。ただし、この段階では、スキャンデータ130の実際の高さを示す実際高さ情報(即ち主走査方向の画素数)が不明であるので、CPU32は、SOF116内の高さ領域SHに実際高さ情報を記述しない。
【0035】
CPU32は、上記の1ライン分のスキャンデータを生成する処理を繰り返すことによって、スキャンデータ130の全てをVRAM38内に生成する。その後、CPU32は、DNLマーカ142、DNL144、EOIマーカ146等を含むフッタ部140(
図2参照)をVRAM38内に生成する。CPU32は、DNL144内の幅領域DW及び高さ領域DHに幅情報及び高さ情報を記述しない。
【0036】
次いで、S24では、CPU32は、スキャンデータ130の実際の高さを示す実際高さ情報を特定して、ヘッダ部110のSOF116内の高さ領域SHに実際高さ情報を記述する。これにより、実際幅情報及び実際高さ情報が記述されているヘッダ部110と、幅情報及び高さ情報が記述されていないフッタ部140と、を含むファイル100が完成する。S24が終了した段階では、ファイル100の全てがVRAM38内に記憶されている。
【0037】
続いて、S26では、CPU32は、VRAM38内のファイル100を、ネットワークI/F16を介して、S10で取得された送信先情報によって示される対象送信先デバイスに送信する。例えば、送信先情報が端末TEの名称「TN」を示す場合には、CPU32は、名称「TN」を利用して名前解決を実行して、端末TEのIPアドレスを取得し、当該IPアドレスを利用してファイル100を端末TEに送信する。この場合、CPU32は、NVRAM36内において、端末TEの名称「TN」に対応付けられている通信プロトコル「P1」に従って、ファイル100を端末TEに送信する。また、例えば、送信先情報が端末TEのIPアドレスを示す場合には、CPU32は、当該IPアドレスを利用してファイル100を端末TEに送信する。この場合、CPU32は、当該IPアドレスを利用して名前解決を実行して、端末TEの名称「TN」を取得し、NVRAM36内において、端末TEの名称「TN」に対応付けられている通信プロトコル「P1」に従って、ファイル100を端末TEに送信する。なお、以下でも、データが外部に送信される場合には、上記の名前解決等の処理が実行されるが、当該処理の説明を省略する。
【0038】
S26では、CPU32は、ファイル100を複数個の部分ファイルに分割して、各部分ファイルの生成順序と同じ順序で、各部分ファイルを対象送信先デバイスに順次送信する。具体的には、CPU32は、ヘッダ部110を送信し、次いで、スキャンデータ130を送信し、次いで、フッタ部140を送信する。CPU32は、S26が終了すると、VRAM38内のファイル100を消去して、
図3の処理を終了する。
【0039】
一方、S30(即ち推定データサイズ>空きメモリサイズ)では、CPU32は、USBメモリ20を利用可能であるのか否かを判断する。CPU32は、USBメモリ20がUSBI/F18に装着されている場合には、USBメモリ20内の空きメモリサイズを取得する。そして、CPU32は、S12で算出された推定データサイズがUSBメモリ20内の空きメモリサイズ以下である場合には、USBメモリ20を利用可能であると判断して(S30でYES)、S32に進む。一方、CPU32は、S12で算出された推定データサイズがUSBメモリ20内の空きメモリサイズよりも大きい場合、又は、USBメモリ20がUSBI/F18に装着されていない場合には、USBメモリ20を利用不可能であると判断して(S30でNO)、S40に進む。
【0040】
なお、USBメモリ20は、通常、比較的に大きい空きメモリサイズを有する。従って、S12で算出された推定データサイズは、通常、USBメモリ20内の空きメモリサイズ以下になる。このような実情に鑑みて、変形例では、S30において、CPU32は、USBメモリ20内の空きメモリサイズを取得しなくてもよい。即ち、CPU32は、USBメモリ20が装着されている場合には、S30でYESと判断し、USBメモリ20が装着されていない場合には、S30でNOと判断してもよい。
【0041】
S32〜S36は、VRAM38の代わりにUSBメモリ20が利用される点を除くと、S22〜S26と同様である。S36が終了すると、
図3の処理が終了する。
【0042】
CPU32がVRAM38を利用してファイルを生成するための速度は、通常、CPU32がUSBメモリ20を利用してファイルを生成するための速度よりも速い。このような実情に鑑みて、本実施例では、CPU32は、S20の判断をS30の判断よりも先に実行して、VRAM38及びUSBメモリ20のうち、ファイル100をVRAM38内に生成することを優先する。これにより、CPU32は、ファイル100を迅速に対象送信先デバイスに送信し得る。
【0043】
S40では、CPU32は、問合せメッセージを表示させる。問合せメッセージは、スキャンデータ130によって表わされる画像を出力することができない可能性があることを示す文字列と、スキャンを実行するのか否かをユーザに問い合わせるための文字列と、を含む。ユーザがスキャナSCの操作部10を操作することに応じて、S10のスキャン指示が取得される場合には、CPU32は、スキャナSCの表示部12に問合せメッセージを表示させる。この場合、CPU32は、ユーザがスキャナSCの操作部10を操作することに応じて、問合せ結果を取得する。また、S10のスキャン指示が端末TEから取得される場合には、CPU32は、問合せメッセージを端末TEに送信することによって、端末TEの表示部(図示省略)に問合せメッセージを表示させる。この場合、CPU32は、ユーザが端末TEの操作部(図示省略)を操作することに応じて、端末TEから問合せ結果を取得する。
【0044】
S42では、CPU32は、問合せ結果が、スキャンを実行することを意味する「OK」を示すのか、スキャンを実行しないことを意味する「キャンセル」を示すのか、を判断する。CPU32は、問合せ結果が「OK」を示すと判断する場合(S42でYES)には、S50の第1の特別処理を実行して、
図3の処理を終了する。CPU32は、問合せ結果が「キャンセル」を示すと判断する場合(S42でNO)には、スキャン実行部14にスキャンを実行させることなく、
図3の処理を終了する。
【0045】
(第1の特別処理;
図4)
続いて、
図4を参照して、
図3のS50で実行される第1の特別処理の内容を説明する。S52では、CPU32は、スキャン処理を開始する。S52は、
図3のS22と同様である。
【0046】
S54では、CPU32は、最初の1ライン分のスキャンデータをVRAM38内に生成する際に、ヘッダ部110のSOF116内の幅領域SW、高さ領域SHに、それぞれ、実際幅情報、仮の高さ情報を記述する。本実施例では、仮の高さ情報として最大高さ情報を採用する。最大高さ情報は、スキャン実行部14がスキャン可能な最大原稿サイズ(例えばA3)の長辺の長さと、スキャン実行部14が利用可能な主走査方向の最高スキャン解像度(例えば1200dpi)と、に基づいて、予め決定されている。即ち、最大高さ情報は、最大データサイズを有するスキャンデータ130の高さ(即ち主走査方向の画素数)を示す。
【0047】
S60では、CPU32は、VRAM38内の空きメモリサイズが所定値以下になるまで、即ち、VRAM38がメモリフルになるまで、1ライン分のスキャンデータをVRAM38内に生成することを繰り返す。CPU32は、VRAM38がメモリフルになることなく、スキャンデータ130の全ての生成が終了した場合には、S60でNOと判断してS64に進む。上述したように、
図3のS12では、仮の圧縮率を利用して、スキャンデータ130の推測データサイズが算出される。このために、スキャンデータ130の実際の圧縮効率が比較的に高い場合には、スキャンデータ130の実際のデータサイズが推測データサイズよりも小さくなり、この結果、VRAM38がメモリフルになることなく、スキャンデータ130の全てがVRAM38内に生成され得る。一方、CPU32は、VRAM38がメモリフルになる場合には、S60でYESと判断してS70に進む。
【0048】
S64では、CPU32は、ヘッダ部110のSOF116内の高さ領域SHに、最大高さ情報(S54参照)に代えて実際高さ情報を記述する。CPU32は、さらに、DNL144内に幅情報及び高さ情報が記述されていないフッタ部140をVRAM38内に生成する。これにより、実際幅情報及び実際高さ情報が記述されているヘッダ部110と、幅情報及び高さ情報が記述されていないフッタ部140と、を含むファイル100が完成する。S66は、
図3のS26と同様である。CPU32は、S66が終了すると、VRAM38内のファイル100を消去して、
図5の処理を終了する。
【0049】
一方、S70では、CPU32は、VRAM38内の部分ファイルを対象送信先デバイスに送信する。1回目のS70が実行される段階では、部分ファイルは、実際幅情報及び最大高さ情報が記述されているヘッダ部110と、スキャンデータ130の一部である部分スキャンデータと、を含む。
【0050】
次いで、S72では、CPU32は、S70で送信された部分ファイルをVRAM38から消去して(即ちVRAM38内の領域を解放して)、スキャンデータ130の残りをVRAM38内に生成する。そして、CPU32は、VRAM38がメモリフルになることなく、スキャンデータ130の全ての生成が終了したのか否かを判断する。CPU32は、VRAM38がメモリフルになる場合には、S72でNOと判断して、S70を再び実行し(即ちスキャンデータ130の一部を含む部分ファイルを対象送信先デバイスに送信し)、S72を再び実行する。一方、CPU32は、スキャンデータ130の全ての生成が終了した場合には、S72でYESと判断して、S80に進む。
【0051】
S80では、CPU32は、フッタ部140をVRAM38内に生成して、フッタ部140のDNL144内に実際幅情報及び実際高さ情報を記述する。これにより、ファイル100が完成する。
【0052】
S82では、CPU32は、VRAM38内の部分ファイルを対象送信先デバイスに送信する。当該部分ファイルは、スキャンデータ130の一部である部分スキャンデータと、フッタ部140と、を含む。S82が実行されると、ファイル100の全てが対象送信先デバイス内に記憶される。以下では、対象送信先デバイス内のファイル100のことを「対象ファイル」と呼ぶ。CPU32は、S82が終了すると、VRAM38内の部分ファイルを消去して、S84に進む。
【0053】
S84では、CPU32は、対象送信先デバイスから対象ファイルを受信可能であるのか否かを判断する。具体的には、CPU32は、対象ファイルの送信を要求するための要求コマンドを対象送信先デバイスに送信して、対象送信先デバイスから応答コマンドを受信する場合に、対象送信先デバイスから対象ファイルを受信可能であると判断して(S84でYES)、S86に進む。一方、CPU32は、対象送信先デバイスから応答コマンドを受信しない場合に、対象送信先デバイスから対象ファイルを受信不可能であると判断して(S84でNO)、
図4の処理を終了する。この場合、対象送信先デバイスでは、実際幅情報及び最大高さ情報が記述されているヘッダ部110と、実際幅情報及び実際高さ情報が記述されているフッタ部140と、を含む対象ファイルが利用される。
【0054】
S86では、CPU32は、対象ファイルの内容を変更するためのJPEGファイル変更処理を実行する。具体的には、CPU32は、VRAM38がメモリフルにならないように、対象送信先デバイスから、対象ファイルを構成する複数個の部分ファイルのうちの1個目の部分ファイルを受信して、1個目の部分ファイルをVRAM38内に記憶させる。1個目の部分ファイルは、ヘッダ部110と、スキャンデータ130の一部である部分スキャンデータと、を含む。この場合、CPU32は、ヘッダ部110のSOF116内の高さ領域SHに、最大高さ情報(S54参照)に代えて実際高さ情報を記述して、変更済み部分ファイルを生成する。そして、CPU32は、対象送信先デバイス内の1個目の部分ファイルに代えて変更済み部分ファイルが記憶されるように、変更済み部分ファイルを対象送信先デバイスに送信する。これにより、送信対象先デバイスでは、1個目の部分ファイルが変更済み部分ファイルに変更される。
【0055】
次いで、CPU32は、VRAM38内の変更済み部分ファイルを消去して、対象送信先デバイスから2個目の部分ファイルを受信して、2個目の部分ファイルをVRAM38内に記憶させる。2個目の部分ファイルは、スキャンデータ130の一部である部分スキャンデータを少なくとも含み、フッタ部140を含み得る。CPU32は、2個目の部分ファイルがフッタ部140を含まない場合には、2個目の部分ファイルを変更することなく、2個目の部分ファイルを対象送信先デバイスに送信する。これにより、送信対象先デバイスでは、2個目の部分ファイルがそのまま維持される。一方、CPU32は、2個目の部分ファイルがフッタ部140を含む場合には、フッタ部140のDNL144から実際幅情報及び実際高さ情報を消去して、変更済み部分ファイルを生成する。そして、CPU32は、対象送信先デバイス内の2個目の部分ファイルに代えて変更済み部分ファイルが記憶されるように、変更済み部分ファイルを対象送信先デバイスに送信する。これにより、送信対象先デバイスでは、2個目の部分ファイルが変更済み部分ファイルに変更される。CPU32は、フッタ部140を含む変更済み部分ファイルを対象送信先デバイスに送信するまで、上記と同様の処理を実行する。CPU32は、フッタ部140を含む変更済み部分ファイルを対象送信先デバイスに送信すると、S86を終了し、
図5の処理を終了する。この場合、対象送信先デバイスでは、実際幅情報及び実際高さ情報が記述されているヘッダ部110と、幅情報及び高さ情報が記述されていないフッタ部140と、を含む対象ファイルが利用される。
【0056】
(具体的なケース;
図5〜
図7)
続いて、
図5〜
図7を参照して、
図3及び
図4の各処理によって実現される具体的なケースを説明する。なお、各ケースの丸で囲まれた数字は、各データの生成順序(即ち各データの送信順序)を示す。
【0057】
(ケースA;
図5)
図5のケースAは、推測データサイズが空きメモリサイズ以下である例(
図3のS20でYES)を示す。また、ケースAでは、対象送信先デバイスが端末TEである。スキャナSCは、ヘッダ部110、複数個の部分スキャンデータ130a〜130c、及び、フッタ部140をVRAM38内に順次生成する(S22)。次いで、スキャナSCは、実際高さ情報AHをヘッダ部110に記述する(S24)。図示省略しているが、実際幅情報もヘッダ部110に記述される。そして、スキャナSCは、実際幅情報及び実際高さ情報AHが記述されているヘッダ部110を含むファイルを端末TEに送信する(S26)。
【0058】
端末TEは、ケースAのファイルを表示すべき際に、ヘッダ部110内の実際幅情報及び実際高さ情報AHを利用する。具体的には、端末TEは、ヘッダ部110内の実際幅情報及び実際高さ情報AHによって示される幅方向の画素数及び高さ方向の画素数を特定する。次いで、端末TEは、ファイル内の圧縮済みのスキャンデータ130a〜130cを解凍して、特定済みの幅方向の画素数及び特定済みの高さ方向の画素数を有するビットマップデータを生成する。そして、端末TEは、ビットマップデータを表示用の画像データに変換して、当該画像データによって表わされる表示画像を表示する。
【0059】
ケースAに示されるように、スキャナSCは、推測データサイズが空きメモリサイズ以下である場合に、スキャンデータ130a〜130cの全てをVRAM38内に生成し、スキャンデータ130a〜130cの全てがVRAM38内に記憶されている状態で、実際高さ情報AHをヘッダ部110に記述する。従って、スキャナSCは、実際高さ情報AHが記述されているヘッダ部110を含むファイルを端末TEに適切に送信することができる。この結果、端末TEは、ヘッダ部110内の実際高さ情報を利用して、スキャンデータ130a〜130cによって表わされる表示画像を適切に表示することができる。
【0060】
(ケースB;
図5)
図5のケースBは、推測データサイズが空きメモリサイズよりも大きく、かつ、USBメモリ20を利用可能である例(
図3のS20でNO、S30でYES)を示す。ケースBは、VRAM38の代わりに、USBメモリ20が利用される点を除くと、ケースAと同様である(S32〜S36)。
【0061】
ケースBに示されるように、スキャナSCは、推測データサイズが空きメモリサイズよりも大きく、かつ、USBメモリ20を利用可能である場合に、スキャンデータ130a〜130cの全てをUSBメモリ20内に生成し、スキャンデータ130a〜130cの全てがUSBメモリ20内に記憶されている状態で、実際高さ情報AHをヘッダ部110に記述する。このために、スキャナSCは、実際高さ情報AHが記述されているヘッダ部110を含むファイルを端末TEに適切に送信することができる。この結果、端末TEは、ヘッダ部110内の実際高さ情報を利用して、スキャンデータ130a〜130cによって表わされる表示画像を適切に表示することができる。
【0062】
(ケースC1;
図6)
図6のケースC1は、推測データサイズが空きメモリサイズよりも大きく、かつ、USBメモリ20を利用不可能である例(
図3のS20でNO、S30でNO)を示す。また、ケースC1では、対象送信先デバイスが端末TEである。スキャナSCは、ヘッダ部110及び部分スキャンデータ130aをVRAM38内に順次生成する(
図4のS52)。スキャナSCは、実際幅情報(図示省略)及び最大高さ情報MHをヘッダ部110に記述する(S54)。部分スキャンデータ130aがVRAM38内に生成されると、VRAM38がメモリフルになる(S60でYES)。この場合、スキャナSCは、ヘッダ部110及び部分スキャンデータ130aを含む部分ファイルを端末TEに送信し(S70)、その後、当該部分ファイルをVRAM38から消去する。
【0063】
次いで、スキャナSCは、各部分スキャンデータ130b,130cをVRAM38内に順次生成する(S72)。部分スキャンデータ130cがVRAM38内に生成されると、VRAM38がメモリフルになる(S72でNO)。この場合、スキャナSCは、各部分スキャンデータ130b,130cを含む部分ファイルを端末TEに送信し(S70)、その後、当該部分ファイルをVRAM38から消去する。
【0064】
次いで、スキャナSCは、部分スキャンデータ130dをVRAM38内に生成し、この結果、スキャンデータの全ての生成が終了する(S72でYES)。この場合、スキャナSCは、フッタ部140をVRAM38内に生成し、実際幅情報(図示省略)及び実際高さ情報AHをフッタ部140に記述する(S80)。そして、スキャナSCは、部分スキャンデータ130d及びフッタ部140を含む部分ファイルを端末TEに送信し(S82)、その後、当該部分ファイルをVRAM38から消去する。
【0065】
スキャナSCが対象送信先デバイス(ケースC1では端末TE)からファイルを受信することができるのか否かは、通常、対象送信先デバイスと通信するための通信プロトコルに依存する。例えば、端末TEは、通信プロトコル「P1」を利用して、スキャナSCからファイルを受信することができるが、スキャナSCからの要求コマンドに応じて、ファイルをスキャナSCに送信することができない。このために、スキャナSCは、端末TEからファイルを受信することができず(S84でNO)、この結果、端末TEでは、実際幅情報及び最大高さ情報MHが記述されているヘッダ部110と、実際幅情報及び実際高さ情報AHが記述されているフッタ部140と、を含むファイルが利用される。
【0066】
フッタ部140内の情報(即ち実際幅情報及び実際高さ情報AH)を利用可能であるのか否かは、端末TEに依存する。端末TEがフッタ部140内の情報を利用可能である場合には、端末TEは、ヘッダ部110内の情報(即ち実際幅情報及び最大高さ情報MH)を利用せずに、フッタ部140内の情報を利用して、表示画像DI1を表示する。この結果、高さ方向(
図6の上下方向)において、表示画像DI1の長さは、スキャンデータ130a〜130dによって表わされるスキャン画像の長さに一致する。
【0067】
上述したように、スキャナSCは、スキャンデータ130a〜130dの全てをVRAM38内に同時的に記憶させずに済むので、VRAM38の使用メモリサイズを低減させつつ、ファイルを生成して端末TEに送信することができる。しかも、スキャナSCは、スキャンデータ130a〜130dの全てをVRAM38内に生成した後に、実際高さ情報AHをフッタ部140に記述し、実際高さ情報AHが記述されているフッタ部140を端末TEに送信する。このために、スキャナSCは、実際高さ情報AHを含むファイルを端末TEに適切に送信することができる。この結果、端末TEは、フッタ部140内の実際高さ情報AHを利用して、表示画像DI1を適切に表示することができる。
【0068】
一方、端末TEがフッタ部140内の情報を利用不可能である場合には、端末TEは、ヘッダ部110内の情報を利用して、表示画像DI2を表示する。具体的には、端末TEは、スキャンデータ130a〜130dの高さ方向の画素数が最大高さ情報MHによって示される画素数に満たないと判断する。この場合、端末TEは、通常、不足の画素数を増やすために、予め決められているパディング画像データをスキャンデータ130a〜130dに追加(即ちパディング)する。この結果、高さ方向において、表示画像DI2の長さは、スキャンデータ130a〜130dによって表わされるスキャン画像の長さと、パディング画像データによって表わされるパディング画像の長さと、の和に一致する。
【0069】
なお、仮に、スキャンデータ130a〜130dの高さ方向の画素数がヘッダ部110内の高さ情報によって示される画素数よりも大きい場合には、端末TEは、通常、過剰の画素数を減らすために、スキャンデータ130a〜130dの一部を消去して、表示画像を表示する。この結果、高さ方向において、スキャン画像の一部を含まない表示画像が表示される。ただし、本実施例では、スキャナSCで生成され得る最大データサイズに基づいて決定される最大高さ情報MHが、ヘッダ部110内に記述される。このために、スキャンデータ130a〜130dの高さ方向の画素数がヘッダ部110内の最大高さ情報MHによって示される画素数よりも大きくなることが抑制される。この結果、スキャン画像の全てを含む表示画像が適切に表示される。なお、変形例では、
図4のS54で記述される仮の高さ情報は、最大高さ情報でなくてもよく、最大高さ情報よりも小さい画素数又は大きい画素数を示す高さ情報であってもよい。
【0070】
(ケースC2;
図7)
図7のケースC2では、対象送信先デバイスがサーバSE1である点が、
図6のケースC1とは異なる。各データ110,130a〜130d,フッタ部140が順次生成されてサーバSE1に送信される点(
図4のS52,S54,S70〜S82)は、ケースC1と同様である。
【0071】
ケースC2では、スキャナSCは、サーバSE1からファイルを受信することができる(S84でYES)。即ち、サーバSE1と通信するための通信プロトコル「P2」は、スキャナSCがサーバSE1からファイルを受信することを許容するプロトコルである。このようなプロトコルの一例として、例えば、FTP(File Transfer Protocolの略)、CIFS(Common Internet File Systemの略)等を挙げることができる。
【0072】
スキャナSCは、サーバSE1からファイルを受信して、以下のように、JPEGファイル変更処理を実行する(S86)。スキャナSCは、まず、ヘッダ部110及び部分スキャンデータ130aを含む部分ファイルをサーバSE1から受信して、当該部分ファイルをVRAM38内に記憶させる。次いで、スキャナSCは、最大高さ情報MHに代えて、実際高さ情報AHをヘッダ部110に記述する。そして、スキャナSCは、実際高さ情報AHが記述されているヘッダ部110を含む変更済み部分ファイルをサーバSE1に送信する。これにより、サーバSE1では、最大高さ情報MHが記述されているヘッダ部110を含む部分ファイルに代えて、実際高さ情報AHが記述されているヘッダ部110を含む変更済み部分ファイルが記憶される。
【0073】
次いで、スキャナSCは、各部分スキャンデータ130b,130cを含む部分ファイルをサーバSE1から受信して、当該部分ファイルを変更することなく、当該部分ファイルをサーバSE1に送信する。これにより、サーバSE1では、当該部分ファイルが維持される。
【0074】
次いで、スキャナSCは、部分スキャンデータ130d及びフッタ部140を含む部分ファイルをサーバSE1から受信して、当該部分ファイルをVRAM38内に記憶させる。次いで、スキャナSCは、実際高さ情報AH(さらには図示省略の実際幅情報)をフッタ部140から消去する。そして、スキャナSCは、実際高さ情報AHが記述されていないフッタ部140を含む変更済み部分ファイルをサーバSE1に送信する。これにより、サーバSE1では、実際高さ情報AHが記述されているフッタ部140を含む部分ファイルに代えて、実際高さ情報AHが記述されていないフッタ部140を含む変更済み部分ファイルが記憶される。
【0075】
本ケースC2によると、スキャナSCは、サーバSE1内のファイルを変更して、実際高さ情報AHが記述されているヘッダ部110を含むファイルをサーバSE1に適切に記憶させることができる。
【0076】
(対応関係)
CPU32及びROM34が、「制御部」の一例である。VRAM38、USBメモリ20が、それぞれ、「内部メモリ」、「外部メモリ」の一例である。実際高さ情報AH、最大高さ情報MHが、それぞれ、「実際サイズ情報」、「仮のサイズ情報」の一例である。S20でYESと判断される場合、又は、S30でYESと判断される場合が、「所定の条件が満たされる場合」の一例である。S20でNOと判断され、かつ、S30でNOと判断される場合が、「所定の条件が満たされない場合」の一例である。
図6及び
図7において、ヘッダ部110及び部分スキャンデータ130aを含む部分ファイルが、「第1の部分ファイル」の一例である。部分スキャンデータ130b,130cを含む部分ファイル、又は、部分スキャンデータ130d及びフッタ部140を含む部分ファイルが、「第2の部分ファイル」の一例である。
【0077】
(第2実施例)
本実施例では、
図3のS10で取得されるスキャン指示が、複数個の送信先デバイスを示す複数個の送信先情報を含むことを想定している。この場合、S26又はS36では、CPU32は、複数個の送信先デバイスの全てにファイルを送信する。S50の第1の特別処理では、
図4の処理に代えて、
図8の処理が実行される。
【0078】
(第1の特別処理;
図8)
図8のS52〜S66は、
図4のS52〜S66と同様である。ただし、S66では、CPU32は、複数個の送信先デバイスの全てにファイルを送信する。S68では、CPU32は、複数個の送信先デバイスのうちの少なくとも1個の送信先デバイスからファイルを受信可能であるのか否かを判断する。具体的には、CPU32は、まず、NVRAM36から、複数個の送信先デバイスの名称に対応付けられている複数個の通信プロトコルを読み出す。そして、CPU32は、複数個の通信プロトコルの中に所定の通信プロトコル(本実施例ではFTP又はCIFS)が存在する場合には、S68でYESと判断してS70Bに進み、複数個の通信プロトコルの中に所定の通信プロトコルが存在しない場合にはS68でNOと判断してS70Aに進む。
【0079】
S70A〜S82Aは、
図4のS70〜S82と同様である。ただし、S70A及びS82Aでは、CPU32は、複数個の送信先デバイスの全てに部分ファイルを送信する。S82Aが終了すると、
図8の処理が終了する。
【0080】
S70B〜S82Bは、
図4のS70〜S82と同様である。ただし、S70B及びS82Bでは、CPU32は、複数個の送信先デバイスのうちの1個の対象送信先デバイスのみに部分ファイルを送信する。対象送信先デバイスは、上記の所定の通信プロトコルに対応付けられている名称を有するデバイス(例えばサーバSE1)である。S90は、
図4のS86と同様である。ただし、S90では、CPU32は、対象送信先デバイス内のファイルを変更する際に、複数個の送信先デバイスの全てにファイルを送信する。これにより、複数個の送信先デバイスのいずれにおいても、実際高さ情報が記述されているヘッダ部を含むファイルが記憶される。
【0081】
(ケースD;
図9)
図9を参照して、本実施例の具体的なケースDを説明する。ケースDでは、スキャン指示内の送信先情報は、2個のサーバSE1,SE2を示す。スキャナSCは、各データ110,130a〜130d,フッタ部140を順次生成して、各データ110等をサーバSE1のみに順次送信する(
図8のS52,S54,S70B〜S82B)。これにより、サーバSE1において、最大高さ情報MHが記述されているヘッダ部110と、実際高さ情報AHが記述されているフッタ部140と、を含むファイルが記憶される。
【0082】
次いで、スキャナSCは、以下のように、JPEGファイル変更処理を実行する(S90)。即ち、スキャナSCは、サーバSE1からヘッダ部110を含む部分ファイルを受信して、最大高さ情報MHに代えて実際高さ情報AHをヘッダ部110内に記述する。そして、スキャナSCは、変更済み部分ファイルをサーバSE1,SE2の全てに送信する。これにより、サーバSE1では、最大高さ情報MHが記述されているヘッダ部110を含む部分ファイルに代えて、実際高さ情報AHが記述されているヘッダ部110を含む変更済み部分ファイルが記憶される。また、サーバSE2では、変更済み部分ファイルが新たに記憶される。
【0083】
次いで、スキャナSCは、各部分スキャンデータ130b,130cを含む部分ファイルをサーバSE1から受信して、当該部分ファイルを変更することなく、当該部分ファイルをサーバSE1,SE2の全てに送信する。これにより、サーバSE1では、当該部分ファイルが維持され、サーバSE2では、当該部分ファイルが新たに記憶される。
【0084】
次いで、スキャナSCは、部分スキャンデータ130d及びフッタ部140を含む部分ファイルをサーバSE1から受信して、実際高さ情報AHをフッタ部140から消去する。そして、スキャナSCは、変更済み部分ファイルをサーバSE1,SE2の全てに送信する。これにより、サーバSE1では、実際高さ情報AHが記述されているフッタ部140を含む部分ファイルに代えて、実際高さ情報AHが記述されていないフッタ部140を含む変更済み部分ファイルが記憶される。また、サーバSE2では、変更済み部分ファイルが新たに記憶される。
【0085】
本実施例によると、スキャナSCは、実際高さ情報AHが記述されているヘッダ部110を含むファイルを複数個の送信先デバイス(
図9の例では2個のサーバSE1,SE2)のそれぞれに適切に記憶させることができる。なお、本実施例では、サーバSE1、サーバSE2が、それぞれ、「対象送信先デバイス」、「1個以上の送信先デバイス」の一例である。
【0086】
(第3実施例;
図10)
本実施例では、CPU32は、端末TEからスキャン指示を取得する場合(
図3のS10でYES)に、スキャン指示の送信元の端末TEで利用されているスキャナドライバが所定のスキャナドライバであるのか否かを判断する。所定のスキャナドライバは、仮の高さ情報(即ち最大高さ情報)がヘッダ部110に記述されていると共に、実際高さ情報がフッタ部140に記述されている場合に、フッタ部140から実際高さ情報を読み出して、仮の高さ情報に代えて実際高さ情報をヘッダ部110に記述するスキャナドライバである。CPU32は、スキャン指示内のドライバ情報(例えばソフトウェア名)が上記の所定のスキャナドライバを示さない場合には、
図3のS12に進み、第1実施例と同様に、S12〜S50を実行する。一方、CPU32は、スキャン指示内のドライバ情報が上記の所定のスキャナドライバを示す場合には、
図3のS12〜S50を実行せずに、第2の特別処理を実行する。
【0087】
図10のケースEを参照して、第2の特別処理の内容を説明する。CPU32は、まず、VRAM38内の現在の空きメモリサイズよりも小さい所定のデータサイズを有する記憶領域をVRAM38内に確保する。そして、CPU32は、上記の所定のデータサイズを超えない範囲で、ヘッダ部110及び部分スキャンデータ130aをVRAM38内に順次生成する。この際に、CPU32は、幅情報及び高さ情報をヘッダ部110に記述しない。そして、CPU32は、幅情報及び高さ情報が記述されていないヘッダ部110を含む部分ファイルを端末TEに送信し、その後、当該部分ファイルをVRAM38から消去する。
【0088】
次いで、CPU32は、上記の所定のデータサイズを超えない範囲で、各部分スキャンデータ130b,130cをVRAM38内に順次生成する。そして、CPU32は、各部分スキャンデータ130b,130cを含む部分ファイルを端末TEに送信し、その後、当該部分ファイルをVRAM38から消去する。
【0089】
次いで、CPU32は、部分スキャンデータ130d及びフッタ部140をVRAM38内に順次生成する。この際に、CPU32は、実際幅情報(図示省略)及び実際高さ情報AHをフッタ部140に記述する。そして、CPU32は、実際幅情報及び実際高さ情報AHが記述されているフッタ部140を含む部分ファイルを端末TEに送信する。これにより、端末TEにおいて、幅情報及び高さ情報が記述されていないヘッダ部110と、実際幅情報及び実際高さ情報AHが記述されているフッタ部140と、を含むファイルが記憶される。
【0090】
端末TEのスキャナドライバは、ファイルを記憶した後に、フッタ部140から実際幅情報及び実際高さ情報AHを読み出して、実際幅情報及び実際高さ情報AHをヘッダ部110に記述する。スキャナドライバは、さらに、フッタ部140から実際幅情報及び実際高さ情報AHを消去する。これにより、端末TEにおいて、実際幅情報及び実際高さ情報AHが記述されているヘッダ部110と、幅情報及び高さ情報が記述されていないフッタ部140と、を含むファイルが記憶される。
【0091】
本実施例によると、スキャナSCは、VRAM38内の空きメモリサイズが十分であるのか否かに関わらず(即ちS20の判断に関わらず)、さらには、USBメモリ20を利用可能であるのか否かに関わらず(即ちS30の判断に関わらず)、第2の特別処理を実行する。このために、スキャナSCは、スキャンデータ130a〜130dの全てをVRAM38内に同時的に記憶させずに済むので、VRAM38の使用メモリサイズを低減させつつ、ファイルを生成して端末TEに送信することができる。特に、端末TEが実際高さ情報AHをヘッダ部110に記述するので、実際高さ情報AHが記述されているヘッダ部110を含むファイルを端末TEに適切に記憶させることができる。しかも、スキャナSCは、
図3のS12、S20、S30等の処理を実行せずに済むので、ファイルを端末TEに迅速に送信することができる。
【0092】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。上記の実施例の変形例を以下に列挙する。
【0093】
(変形例1)スキャナSCによって生成される画像ファイルは、JPEGファイルでなくてもよく、スキャンデータの実際サイズ情報が記述される他の形式のファイルであってもよい。また、実際サイズ情報は、実際高さ情報でなくてもよく、スキャンデータの合計データサイズ等であってもよい。即ち、実際サイズ情報は、1枚の原稿のスキャンが完了するまで不明である情報であればよい。
【0094】
(変形例2)
図3のS30〜S36を省略して、S20でNOの場合にS40に進むようにしてもよい。即ち、「第2の判断部」は省略可能である。また、
図3のS12〜S26を省略して、S10でYESの場合にS30に進むようにしてもよい。即ち、「解像度情報取得部」、「原稿サイズ情報取得部」、「算出部」、及び、「第1の判断部」は省略可能である。また、
図4のS84及びS86を省略してもよい。即ち「変更部」は省略可能である。また、
図3のS40及びS42を省略して、S30でNOの場合にS50に進むようにしてもよい。即ち、「表示制御部」は省略可能である。
【0095】
(変形例3)上記の各実施例では、スキャナSCのCPU32がプログラムPGを実行することによって、
図3〜
図10の各処理が実現される。これに代えて、これらの各処理のうちの少なくとも1つの処理は、論理回路等のハードウェアによって実現されてもよい。
【0096】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。