Compartir a través de


Ejemplo de formulario de papel escaneado

En este ejemplo de C#, se ha escaneado un formulario de papel como un archivo Portable Network Graphics (PNG) y se ha especificado como la imagen de fondo durante la ejecución para un control InkPicture. En el ejemplo se usa un cuadro de mensaje para mostrar los resultados del reconocimiento de escritura a mano.

El ejemplo incluye un archivo de lenguaje de marcado extensible (XML), Formdata.xml. El archivo XML contiene el nombre del archivo PNG. También contiene los FieldInfo elementos que definen las áreas rectangulares del formulario donde un usuario puede introducir tinta. La información del FieldInfo elemento se muestra en el ejemplo siguiente:

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

Los elementos Left, Top, Right y Bottom son definiciones de coordenadas de píxel para cada campo.

El ejemplo inicializa un nuevo conjunto de datos con los datos contenidos en Formdata.xml:

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

La imagen de formulario especificada en Formdata.xml se carga como fondo del control InkPicture :

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

A continuación, se habilita la recopilación de tinta para el control InkPicture:

    inkPicture1.InkEnabled = true;

La aplicación incluye manejadores de eventos de clic para todos los menús que se muestran en la parte superior del formulario.

Reconocer elemento de menú

El controlador de eventos del clic en el menú Reconocer deshabilita la recolección de trazos para el control y verifica si hay un reconocedor de escritura a mano. Si no hay ningún reconocedor instalado, se muestra un cuadro de diálogo. A continuación, un usuario debe hacer clic en la opción de menú Tinta o Lápiz para volver a habilitar el control de entrada de lápiz.

Si se instala un reconocedor, la Recognize función recupera los datos XML que especifican coordenadas de píxel para cada campo de formulario. Las coordenadas se convierten en coordenadas de espacio de tinta y se define un rectángulo para cada campo de formulario. Después de definir los rectángulos, la función busca los trazos que se intersecan y se encuentran dentro de cada rectángulo. Por último, realiza el reconocimiento en la entrada de tinta y muestra los resultados en un cuadro de diálogo.

Elemento del menú Tinta

El controlador de eventos de clic en el menú Ink habilita el control InkPicture .

Elemento de menú Lápiz

El controlador de eventos de clic del menú Pluma realiza las siguientes tareas:

  • Deshabilita la colección de lápiz para el control InkPicture (que es necesario antes de cambiar la propiedad EditingMode ).
  • Establece la propiedad EditingMode para recopilar tinta.
  • Vuelva a habilitar la colección de lápiz para el control InkPicture y alterna los menús Lápiz, Seleccionar y Borrador para indicar el modo activo.

Editar elemento de menú

El controlador del evento de clic del menú Editar es similar al controlador del evento del menú Pen. Realiza las siguientes tareas:

  • Deshabilita la colección de tinta.
  • Establece la propiedad EditingMode en Select, lo que permite al usuario realizar la selección de tinta.
  • Vuelve a activar la recopilación de tinta y alterna los menús de Lápiz, Editar y Borrador para indicar el modo activo.

Elemento del menú Borrador

El controlador de eventos del menú Borrador establece el control InkPictureEditingMode en Eliminar, lo que permite al usuario borrar la tinta. También cambia las opciones de menú Lápiz, Editar y Borrador.

Borrar elemento de menú

El manejador de eventos del clic en el menú 'Borrar' elimina la colección Strokes actual para el control InkPicture, borrando de esta manera toda la tinta del formulario.

Cerrar el formulario

En el código generado por el Diseñador de Windows Forms, el control InkPicture se agrega a la lista de componentes del formulario cuando se inicializa el formulario. Cuando se cierra el formulario, se elimina el control InkPicture, así como los demás componentes del formulario, mediante el método Dispose del formulario.

InkEdit Control

InkPicture Control