分段筛选器的实现说明

请务必注意分段筛选器为其创建的每个子项设置的属性。 这些属性包括: WIA_IPS_XPOSWIA_IPS_YPOSWIA_IPS_XEXTENT、WIA_IPS_YEXTENT,可能 还有WIA_IPS_DESKEW_XWIA_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。

图中演示了应用于板的一部分的分段筛选器。

例如,如果应用程序将以可视方式显示分段筛选器检测到的区域,则必须注意分段筛选器设置与其在平板中的位置对应的坐标。 这意味着应用程序必须将平面坐标映射到预览图像中的坐标。 但是,在大多数情况下,应用程序将执行预览扫描,WIA_IPS_XPOS = WIA_IPS_YPOS = 0,不 (WIA_IPS_ROTATION = PORTRAIT) 。 如果是这种情况,则平板上的坐标与预览图像中的坐标之间存在直接映射。

分段筛选器必须注意的另一个属性是旋转属性,WIA_IPS_ROTATION,提供驱动程序实现此属性。 例如,假设在获取预览图像时,应用程序将WIA_IPS_ROTATION设置为 ROT180。 在这种情况下,传递到分段筛选器的图像的左上角实际上对应于平板上的右下角。 因此,分段筛选器必须将它在旋转图像中检测到的每个子元素的坐标映射到它们应在平板上的坐标。 分段筛选器执行此映射后,可以将WIA_IPS_XPOS、WIA_IPS_YPOS和其他属性值设置为对应于子图像的子项。

请注意,在大多数情况下,WIA_IPS_XPOS和WIA_IPS_YPOS将设置为零,WIA_IPS_ROTATION将设置为 PORTRAIT。 但是,分段应能够处理它们未设置为这些值的情况。

另请注意,虽然应用程序可以将图像传递到已由驱动程序旋转的分段筛选器,但不得传入已对其执行了扭曲的图像。