フラットベッド スキャナー用基本スキャン
WIA アプリケーションは、スキャナー項目ツリーのルート項目と最上位の子項目を列挙して、スキャナーのサポートされている機能を決定します。 その後、アプリケーションはこの子項目をスキャン ソースとして使用します。 たとえば、フラットベッド スキャナー項目はフラットベッドからのスキャンに使用されますが、フィーダー アイテムはドキュメント フィーダーからのスキャンなどに使用されます。
Windows Vista のフラットベッド項目のプログラミングとスキャンの動作は、Windows XP と Windows Me で使用されるオーバーロード システムと同じです。 このオーバーロード システムは、すべての WIA 属性フラグを配置することで、項目ツリー内の最初の子項目をプログラムします。
普通は、アプリケーションはスキャナーのフラットベッドをプログラムするときに次の操作を実行しますが、必ずしもこの順序であるとは限りません。
最上位の WIA 項目を列挙し、 WiaItemTypeProgrammableDataSource 項目フラグでマークされ、 WIA_IPA_ITEM_CATEGORY プロパティが WIA_CATEGORY_FLATBED に設定されている項目を探します。
WIA_IPA_TYMED プロパティと WIA_IPA_FORMAT プロパティの有効な値を読み取ります。
WIA_IPA_TYMED プロパティを設定して、メモリ転送またはファイル転送の種類を選択します。 使用可能な転送の種類の詳細については、 「データ転送」 を参照してください。 IStream ベースの転送の場合、WIA_IPA_TYMED は既定で TYMED_FILE に設定され、変更しないでください。
WIA_IPA_FORMAT プロパティを設定して、データの最終形式を選択します。
WIA_IPA_DEPTH や WIA_IPA_DATATYPE などのイメージ設定を選択します。
この WIA 項目を使用してデータを転送します。
ドライバーは通常、スキャナーのフラットベッドを使用してスキャンする場合に、次の操作を実行します。
IWiaMiniDrv::drvValidateItemProperties と IWiaMiniDrv::drvReadItemProperties を呼び出します。 WIA ドライバーは、アプリケーションのプロパティ設定フェーズ中にプロパティ設定を検証する必要があります。
IWiaMiniDrv::drvWriteItemProperties を呼び出す。 渡される WIA 項目コンテキストはフラットベッド スキャナー項目に属しているため、ドライバーは、アプリケーションがスキャナーのフラットベッドを使用してスキャンすることを認識します。
IWiaMiniDrv::drvAcquireItemData を呼び出します。 渡される WIA 項目コンテキストはフラットベッド スキャナー項目に属しているため、ドライバーは、フラットベッド プラテンを使用してアプリケーションがスキャンすることを簡単に判断できます。
現在のフラットベッド項目プロパティを使用して、デバイスをプログラミングし、フラットベッドからスキャンします。 WIA ドライバーがフラットベッド スキャン モードでない場合は、スキャンのためにこのモードに切り替えようとします。 アプリケーションがフラットベッドを使用するように切り替える特別な設定はありません。 フラットベッド項目をスキャンに使用することは、アプリケーションとドライバーの間のコントラクトです。フラットベッドがデータ転送に使用されることに同意します。
ドライバーは、スキャン前にスキャナーのフラット ベッド部分に適用する設定として、フラットベッド スキャナー項目の WIA プロパティを使用する必要があります。 WIA アプリケーションは、WIA ドライバーによって返されるデータのヘッダーを常に信頼する必要があります。 たとえば、スキャナーが指定した幅の画像をスキャンできないことを判断し、その結果、値をスキャンできる幅に丸める場合、ドライバーは変更された幅情報でイメージ ヘッダーを更新する必要があります。 この更新プログラムにより、アプリケーションで正しい情報を使用できるようになります。 WIA ドライバーは、デバイスから返される実際の情報で WIA プロパティの更新を試みる必要があります。
フラットベッド スキャナーの高度なスキャン
フラットベッドからのマルチリージョン スキャンは、手動構成でも、 WIA セグメント化フィルター を使用して自動的に実行することもできます。 セグメント化フィルターは、アプリケーションと何ができるか、できないことに違いがないことに注意してください。 セグメント化フィルターに関して説明されているのと同じ手順をアプリケーションで直接実行して、新しいスキャン領域の子項目を作成できます。