画像処理フィルターの概要
画像処理フィルターは、WIA 拡張機能です。 画像処理フィルターは、次の 2 つの主な目的を果たします。
画像処理コードをドライバーから分離できるようにするため。 たとえば、画像処理フィルターを使用し画像の明るさとコントラストを変更したり、傾き補正や回転を行えます。 画像処理フィルターは、ユーザー モード ドライバー DLL とは別に、独自の DLL 内にあります。 画像処理フィルターは、フィルター処理を実行するドライバーからフィルター処理されていないイメージング データを受け取ります。
正確なライブ プレビューを有効にするため。 画像処理フィルターは、正確なライブ プレビューを提供する Windows Vista WIA プレビュー コンポーネント (Microsoft Windows SDK ドキュメントで説明) の新機能から使用されます。 このコンテキストの "ライブ" とは、このセクションで後述するいくつかのプロパティ設定を変更した後、アプリケーションがスキャナーからイメージを再取得する必要がないことを意味します。 フィルター処理は完全に別の画像に対するランダム フィルターではなく、実際のプレビュー イメージのベンダー コンポーネントによって実際に実行されるため、プレビューは正確です。
正確なプレビューを提供するには、フィルターで明るさとコントラストのプロパティを少なくとも実装する必要があります。 そのため、ユーザーに明るさとコントラストのコントロールを提供する一般的な UI では、正確なプレビューを表示できます。
画像処理フィルターは、イメージがスキャンされるときに常に実行されます。 そのため、最初に画像処理フィルターを適用せずにアプリケーションがスキャナーからイメージを取得する方法はありません。 アプリケーションでフィルターを認識する必要はありません。
Microsoft は、スキャナーから取得されたフィルター処理されていない元のプレビュー イメージをキャッシュする、WIA プレビュー コンポーネントを提供します。 プレビュー コンポーネントを使用すると、スキャナーからイメージを再取得しなくても、画像にフィルターを複数回適用できます。 WIA プレビュー コンポーネントは通常、アプリケーションでユーザーがコントラストや明るさなどの設定を変更できる場合にプレビュー イメージに使用されます。 ユーザーが設定を変更している間、アプリケーションはイメージを再スキャンすることなく結果の画像をプレビュー ウィンドウに継続的に表示できます。
画像処理フィルターは WIA 拡張機能であり、インプロセス COM コンポーネントとして実行されます。 セグメント化フィルターとは異なり、アプリケーションでは通常、IWiaItem2::GetExtension (Windows SDK ドキュメントで説明) を呼び出し、画像処理フィルター自体のインスタンスを作成しません。 代わりに、アプリケーションは WIA プレビュー コンポーネントのインスタンスを作成し、IWiaItem2::GetExtension メソッドを使用して実際の画像処理フィルターを読み込みます。 また、アプリケーションが IWiaTransfer::Download を呼び出すと、画像処理フィルターも自動的に呼び出されます。
画像処理フィルターはドライバーに関連付けられ、通常はドライバーと共に配布されます。 WIA プレビュー コンポーネントは sti.dll で使用でき、オペレーティング システムに付属しています。
次の図は、WIA コンポーネントによってアプリケーションのプロセスに読み込まれる画像処理フィルターを示しています。 画像処理フィルターの複数のインスタンスをアプリケーションのプロセスに同時に読み込む可能性があるため、フィルターの書き込みには注意が必要です。 たとえば、グローバル (静的) 変数を使用する場合、フィルター ライターは適切な同期を確保する必要があります。