分段筛选器的实现说明

请务必注意分段筛选器将设置到它创建的每个子项的属性。 这些属性包括: WIA_IPS_XPOSWIA_IPS_YPOS、WIA_IPS_XEXTENTWIA_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。

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

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

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

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

另请注意,虽然应用程序可以将图像传递到驱动程序轮换的分段筛选器,但它不得传入已执行桌面设置的图像。