Примечания по реализации фильтров сегментации
Важно отметить свойства, которые фильтр сегментации задает для каждого создаваемого дочернего элемента. Это следующие свойства: WIA_IPS_XPOS, WIA_IPS_YPOS, WIA_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.
Например, если приложение визуально отображает области, обнаруженные фильтром сегментации, оно должно учитывать, что фильтр сегментации задает координаты, соответствующие их положению в планшете. Это означает, что приложение должно сопоставить координаты планшета с координатами на изображении предварительного просмотра. Однако в большинстве случаев приложение выполняет предварительную проверку с 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 — КНИЖНАЯ. Однако сегментация должна иметь возможность обрабатывать случай, в котором они не имеют этих значений.
Кроме того, обратите внимание, что хотя приложение может передавать образ в фильтр сегментации, который был повернут драйвером, оно не должно передавать образ, на котором уже выполнено развертывание рабочих столов.