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


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

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

В примере содержится XML-файл расширяемого языка разметки (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>

Элементы "Слева", "Сверху", "Справа" и "Вниз" — это определения координат пикселей для каждого поля.

Пример инициализирует новый набор данных DataSet с данными, содержащимися в 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-данные, указывающие координаты пикселей для каждого поля формы. Координаты преобразуются в координаты пространства рукописного ввода, а прямоугольник определяется для каждого поля формы. После определения прямоугольников функция находит штрихи, пересекающиеся и лежащие в пределах каждого прямоугольника. Наконец, он выполняет распознавание рукописного ввода и отображает результаты в окне сообщения.

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

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

Элемент меню "Перо"

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

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

Изменение элемента меню

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

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

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

В меню "Ластик" обработчик событий задает элемент управления InkPictureEditingModeDelete, что позволяет пользователю удалить рукописный ввод. Он также переключает элементы меню пера, ластика и редактирования.

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

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

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

В созданном коде конструктора форм Windows элемент управления InkPicture добавляется в список компонентов формы при инициализации формы. При закрытии формы элемент управления InkPicture, а также все компоненты формы удаляются с помощью метода Dispose формы.

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

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