Notes d’implémentation pour les filtres de segmentation
Il est important de noter les propriétés que le filtre de segmentation définit dans chaque élément enfant qu’il crée. Ces propriétés sont les suivantes : WIA_IPS_XPOS, WIA_IPS_YPOS, WIA_IPS_XEXTENT, WIA_IPS_YEXTENT et éventuellement WIA_IPS_DESKEW_X et WIA_IPS_DESKEW_Y. Ces valeurs de propriété correspondent à la position de l’élément sur le plateau, et non dans l’image passée dans le paramètre pInputStream .
Par conséquent, il est important que le filtre de segmentation accorde une attention particulière aux propriétés WIA_IPS_XPOS, WIA_IPS_YPOS et WIA_IPS_ROTATION de l’image transmise.
Par exemple, supposons qu’une application effectue une analyse en préversion où elle définit WIA_IPS_XPOS = WIA_IPS_YPOS = 200 dans l’élément (parent) avant d’acquérir l’image d’aperçu. Il appelle ensuite le filtre de segmentation pour détecter les sous-régions possibles. Toutefois, l’algorithme réel utilisé dans le filtre de segmentation agit sur l’image qui y est passée. Si cet algorithme détecte un coin de sous-région de 150 pixels à droite du bord gauche de l’image et 200 pixels vers le bas du haut de l’image, cela correspond en fait à un point situé à (350 400) sur le scanneur.
Dans la figure suivante, la région externe représente le scanneur à plat. Bien que l’algorithme trouve que les coordonnées du coin supérieur gauche de la région sont (150, 200), les valeurs que le filtre de segmentation doit définir dans l’élément enfant pour WIA_IPS_XPOS et WIA_IPS_YPOS sont 350 et 400.
Si, par exemple, une application affiche visuellement les régions détectées par le filtre de segmentation, elle doit savoir que le filtre de segmentation définit les coordonnées correspondant à leur position dans le lit plat. Cela signifie que l’application doit mapper les coordonnées à plat aux coordonnées de l’image d’aperçu. Dans la plupart des cas, toutefois, une application effectue une analyse en préversion avec WIA_IPS_XPOS = WIA_IPS_YPOS = 0 et aucune rotation (WIA_IPS_ROTATION = PORTRAIT). Si c’est le cas, il existe un mappage direct entre les coordonnées sur le plat et celles de l’image d’aperçu.
Une autre propriété à laquelle le filtre de segmentation doit prêter attention est la propriété de rotation, WIA_IPS_ROTATION, à condition que le pilote implémente cette propriété. Supposons, par exemple, que lors de l’acquisition de l’image d’aperçu, l’application définisse WIA_IPS_ROTATION sur ROT180. Dans ce cas, le coin supérieur gauche de l’image passée dans le filtre de segmentation correspond en fait au coin inférieur droit sur le plat. Par conséquent, le filtre de segmentation doit mapper les coordonnées de chaque sous-région qu’il détecte dans l’image pivotée à ce que leurs coordonnées sur le plateau doivent être. Une fois que le filtre de segmentation a effectué ce mappage, il peut définir WIA_IPS_XPOS, WIA_IPS_YPOS et d’autres valeurs de propriété dans l’élément enfant correspondant à la sous-image.
Notez que, dans la plupart des cas, WIA_IPS_XPOS et WIA_IPS_YPOS seront définis sur zéro, et WIA_IPS_ROTATION défini sur PORTRAIT. Toutefois, la segmentation doit être en mesure de gérer un cas dans lequel elles ne sont pas définies sur ces valeurs.
Notez également que même si une application peut passer une image au filtre de segmentation qui a été pivoté par le pilote, elle ne doit pas passer une image sur laquelle le découpage a déjà été effectué.