Поделиться через


Пример отсканированной бумажной формы

В этом примере C# бумажная форма была отсканирована как PNG-файл и указана в качестве фонового изображения во время выполнения для элемента управления InkPicture . В примере используется окно сообщения для отображения результатов распознавания рукописного ввода.

Пример содержит XML-файл, Formdata.xml. XML-файл содержит имя PNG-файла. Он также содержит FieldInfo элементы, определяющие прямоугольные области в форме, где пользователь может вводить рукописный ввод. Сведения в элементе FieldInfo показаны в следующем примере:

    <FieldInfo>
        <Name>first name</Name>
        <Left>88</Left>
        <Top>65</Top>
        <Right>332</Right>
        <Bottom>94</Bottom>
    </FieldInfo>

Элементы Left, Top, Right и Bottom — это определения координат пикселей для каждого поля.

Пример инициализирует новый набор данных с данными, содержащимися в Formdata.xml:

    formData = new DataSet("FormData");
    formData.ReadXml("formdata.xml"); 

Изображение формы, указанное в Formdata.xml, загружается в качестве фона элемента управления InkPicture :

    inkPicture1.BackgroundImage = 
        System.Drawing.Image.FromFile(
        (string) formData.Tables["FormData"].Rows[0]["Image"]);

Затем для элемента управления InkPicture включается сбор рукописного ввода:

    inkPicture1.InkEnabled = true;

Приложение включает обработчики событий щелчка для всех меню, отображаемых в верхней части формы.

Элемент меню "Распознать"

Обработчик событий щелчка меню Распознать отключает сбор рукописного ввода для элемента управления и проверяет наличие распознавателя рукописного ввода. Если распознаватель не установлен, отображается диалоговое окно. Затем пользователь должен щелкнуть пункт меню Рукописный ввод или Перо, чтобы повторно включить элемент управления для ввода рукописного ввода.

Если распознаватель установлен, Recognize функция извлекает XML-данные, указывающие пиксельные координаты для каждого поля формы. Координаты преобразуются в координаты пространства рукописного ввода, и для каждого поля формы определяется прямоугольник. После определения прямоугольников функция находит штрихи, которые пересекаются и находятся внутри каждого прямоугольника. Наконец, он выполняет распознавание рукописного ввода и отображает результаты в окне сообщения.

Элемент меню рукописного ввода

Обработчик событий click меню Ink включает элемент управления InkPicture .

Элемент меню пера

Обработчик событий click меню Перо выполняет следующие задачи:

  • Отключает сбор рукописного ввода для элемента управления InkPicture (что необходимо перед изменением свойства EditingMode ).
  • Задает свойство EditingMode для сбора рукописного ввода.
  • Повторно включает сбор рукописного ввода для элемента управления InkPicture и переключает меню Перо, Выбор и Ластик, чтобы указать активный режим.

Пункт меню "Изменить"

Обработчик событий click меню Правка аналогичен обработчику событий меню Перо. Он выполняет следующие задачи:

  • Отключает сбор рукописного ввода.
  • Задает для свойства EditingMode значение Select, что позволяет пользователю выполнять выбор рукописного ввода.
  • Повторно включает сбор рукописного ввода и переключает меню Перо, Правка и Ластик, чтобы указать активный режим.

Элемент меню "Ластик"

Обработчик событий щелчка в меню Eraser задает для элемента управления InkPictureEditingMode значение Delete, что позволяет пользователю стереть рукописный фрагмент. Он также переключает пункты меню Перо, Правка и Ластик.

Пункт меню "Очистить"

Обработчик событий нажатия меню Очистить удаляет текущую коллекцию Strokes для элемента управления InkPicture , тем самым стирая все рукописные фрагменты в форме.

Закрытие формы

В Windows Forms Designer созданном коде элемент управления InkPicture добавляется в список компонентов формы при инициализации формы. Когда форма закрывается, элемент управления InkPicture удаляется, а также другие компоненты формы методом Dispose формы.

Элемент управления InkEdit

Элемент управления InkPicture