次の方法で共有


セグメンテーション フィルターの実装上の注意

セグメント化フィルターが作成する各子項目に設定されるプロパティには、十分注意してください。 これらのプロパティには、WIA_IPS_XPOSWIA_IPS_YPOSWIA_IPS_XEXTENT、WIA_IPS_YEXTENT、場合によってはWIA_IPS_DESKEW_X および WIA_IPS_DESKEW_Y があります。 これらのプロパティ値は、pInputStream パラメーターに渡されたイメージではなく、フラットベッド上の項目の位置に対応します。

したがって、セグメント化フィルターでは、渡された画像のWIA_IPS_XPOS、WIA_IPS_YPOS、および WIA_IPS_ROTATION プロパティに細心の注意を払う必要があります。

たとえば、プレビュー イメージを取得する前に、アプリケーションがプレビュー スキャンを実行し WIA_IPS_XPOS = WIA_IPS_YPOS = 200 を (親) 項目に設定するとします。 その後、セグメント化フィルターを呼び出し、可能なサブ領域を検出します。 ただし、セグメント化フィルターで使用される実際のアルゴリズムは、それに渡されるイメージに作用します。 このアルゴリズムによって、画像の左端の右側に 150 ピクセル、画像の上端から 200 ピクセル下のサブ領域コーナーが検出された場合、これは実際にはスキャナー上の (350, 400) にあるポイントに対応します。

次の図では、外側の領域はスキャナーのフラットベッドを表しています。 アルゴリズムは領域の左上隅の座標 (150,200) を検出しますが、セグメント化フィルターがWIA_IPS_XPOSとWIA_IPS_YPOSの子項目に設定する必要がある値は 350 と 400 になります。

diagram illustrating a segmentation filter applied to a portion of a platen.

たとえば、アプリケーションがセグメント化フィルターによって検出された領域を視覚的に表示する場合、セグメント化フィルターによってフラットベッド内での位置に対応する座標が設定されることに注意してください。 つまり、アプリケーションはフラットベッド座標をプレビュー画像の座標にマップする必要があります。 ただしほとんどの場合、アプリケーションは、WIA_IPS_XPOS = WIA_IPS_YPOS = 0、回転なし (WIA_IPS_ROTATION = PORTRAIT) でプレビュー スキャンを実行します。 その場合、フラットベッド上の座標とプレビューイメージ内の座標との間に直接マッピングが行われます。

セグメント化フィルターが注意すべきもう 1 つのプロパティに、ドライバーがこのプロパティを実装する、WIA_IPS_ROTATION回転プロパティがあります。 たとえば、プレビュー イメージを取得する際、アプリケーションで WIA_IPS_ROTATION が ROT180 に設定されているとします。 この場合、セグメント化フィルターに渡される画像の左上隅は、実際にはフラットベッドの右下隅に対応します。 したがって、セグメント化フィルターは回転した画像で検出した各サブ領域の座標をフラットベッド上の座標にマップする必要があります。 セグメント化フィルターがこのマッピングを実行すると、サブイメージに対応する子項目にWIA_IPS_XPOS、WIA_IPS_YPOS、およびその他のプロパティ値を設定できるようになります。

ほとんどの場合、WIA_IPS_XPOSとWIA_IPS_YPOSは 0 に設定され、WIA_IPS_ROTATIONは PORTRAIT に設定されます。 ただし、セグメント化はこれらの値に設定されていないケースを処理できる必要があります。

また、アプリケーションはドライバーによって回転されたセグメント化フィルターに画像を渡すことができるものの、デスクイングが既に実行されているイメージを渡してはなりません。