Histórico

El protocolo Twain

Uno de los tipos de periféricos que más auge ha adquirido con la generalización de la tecnología multimedia es el de adquisición de imágenes. Sin embargo, para que desde cualquier aplicación se puedan controlar este tipo de dispositivos, es necesario contar con un sistema de acceso común al hardware. El protocolo TWAIN cubre esta necesidad.

Desde hace ya unos cuantos años están apareciendo en el mercado una gran cantidad de dispositivos cuyo objetivo, de una u otra forma, es el tratamiento de la imagen. Estos periféricos mediante una u otra tecnología adquieren una imagen, la cual es transferida al ordenador para su posterior tratamiento mediante algún tipo de software de retoque fotográfico. Por lo tanto, hoy en día el usuario puede encontrar en el mercado una amplísima variedad de dispositivos: escáneres (tanto de mano como de sobremesa), tarjetas digitalizadoras de vídeo, cámaras digitales, etc.

Todos los dispositivos anteriormente citados tienen peculiaridades propias, lo cual hace necesario que cada uno de ellos incluya un software específico para la transferencia al ordenador de las imágenes adquiridas mediante este hardware.

Cuando el sistema operativo MS-DOS dominaba el mercado los fabricantes de este tipo de hardware solían incluir un controlador de dispositivo para DOS, mediante el cual las aplicaciones podían comunicarse con el periférico. Sin embargo, en la mayoría de los casos, cada fabricante de hardware diseñaba un controlador de dispositivo que era incompatible con los creados por otros fabricantes. Por lo tanto el usuario que adquiría un determinado hardware de adquisición de imágenes se encontraba limitado, en la mayoría de los casos, a la utilización de dicho equipo junto con el software proporcionado por el fabricante del dispositivo.

La generalización de las interfaces gráficas de usuario que se produjo con la introducción de sistemas operativos como Windows, MacOS u OS/2 hizo evidente la necesidad de contar con un protocolo o con una API mediante la cual una aplicación pudiese comunicarse con cualquier tipo de hardware de adquisición de imágenes. Esta necesidad fue cubierta por el protocolo TWAIN, fruto de la colaboración llevada a cabo por varias empresas punteras en el campo del desarrollo de hardware y software de tratamiento de imágenes, entre las que cabe destacar a Hewlett-Packard, Kodak, Logitech y Caere.

Arquitectura del protocolo TWAIN

Lo primero que hay que señalar es que el protocolo TWAIN se encuentra disponible actualmente para plataformas Macintosh, Windows 3.1, Windows 95 y Windows NT. Durante la explicación que a continuación se va a llevar a cabo siempre nos estaremos refiriendo a la implementación que se ha realizado del protocolo sobre las distintas plataformas Windows existentes hoy en día. Las diferencias con la versión para Macintosh no son demasiado acusadas, detallándose en el SDK de TWAIN las variantes existentes entre ambas implementaciones (en el recuadro titulado Cómo obtener el SDK del protocolo TWAIN se comenta cómo se puede conseguir el SDK, mediante el cual se pueden desarrollar tanto aplicaciones como fuentes TWAIN).

Cualquier aplicación que haga uso del protocolo TWAIN debe tener, en su menú Archivo, un par de opciones denominadas Adquirir y Seleccionar fuente TWAIN. Cuando el usuario selecciona esta última opción se le presenta un cuadro de diálogo como el que se muestra en la figura 1, el cual contiene una lista de todos los dispositivos instalados en el sistema que son compatibles con el protocolo TWAIN. Una vez seleccionado uno de estos dispositivos el usuario puede adquirir una imagen haciendo clic sobre la opción de menú titulada Adquirir.

El componente más importante está formado por un par de librerías de enlace dinámico, denominadas TWAIN.DLL y TWAIN_32.DLL, las cuales contienen el código del llamado Administrador de fuentes TWAIN. Este componente es el encargado de buscar los dispositivos compatibles con el protocolo TWAIN que se encuentran instalados en el sistema y de mostrarlos en el cuadro de diálogo que aparece en la figura 1. Estas DLL residen en el directorio WINDOWS, dentro del cual se crean un par de directorios, denominados TWAIN y TWAIN_32, en los cuales reside el código de las fuentes TWAIN.

Una fuente TWAIN es en realidad una librería de enlace dinámico a la que se ha cambiado su tradicional extensión DLL por DS (Data Source, Fuente de Datos). Este archivo es específico de cada dispositivo de adquisición de imágenes, conteniendo el código necesario para comunicarse con el dispositivo y para proceder a la adquisición de la o las imágenes que sean necesarias.

Con las versiones más recientes de los archivos necesarios para el funcionamiento del protocolo TWAIN se incluyen, en el caso de las versiones para las plataformas Windows de 32 bits, un par de ficheros, llamados TWUNK_16.EXE y TWUNK_32.EXE, cuya función es proporcionar compatibilidad entre aplicaciones de 32 bits y fuentes TWAIN de 16 bits y viceversa. De esta forma se garantiza el funcionamiento de fuentes TWAIN de 16 bits que son utilizadas por aplicaciones de 32 bits, lo cual no es relativamente difícil que suceda al utilizar aplicaciones de retoque fotográficos sobre Windows 95.

Fases del protocolo TWAIN

El primer paso que debe dar un programa que desee utilizar una fuente TWAIN es cargar la DLL denominada TWAIN.DLL, o TWAIN_32.DLL, y obtener la dirección de la rutina DSM_Entry. La DLL anteriormente mencionada se puede cargar utilizando la función LoadLibrary. La carga de esta DLL también se puede realizar mediante una importación durante el enlazado de la aplicación. Si se procede de esta forma se corre el riesgo de que TWAIN no esté instalado en la máquina en la cual se está ejecutando el programa, en cuyo caso se producirá un error cuando la aplicación no se ejecute ya que el sistema operativo no encontrará el archivo TWAIN.DLL o TWAIN_32.DLL.

Si la carga de TWAIN.DLL o TWAIN_32.DLL se realiza dinámicamente, el programador de la aplicación debe comprobar que el puntero que se obtiene al buscar la dirección de la rutina DSM_Entry no es nulo, ya que si lo fuese significaría que TWAIN no está instalado en el sistema. En el listado 1 se muestra el código fuente en C de una rutina que carga la librería TWAIN.DLL dinámicamente y averigua la dirección de la rutina DSM_Entry. El prototipo de la función DSM_Entry es el que aparece a continuación:

TW_UINT16 FAR PASCAL

DSM_Entry( pTW_IDEN

TITY pOrigin,

pTW_IDENTITY pDest,

TW_UINT32 DG,

TW_UINT16 DAT,

TW_UINT16 MSG,

TW_MEMREF pData);

Como el lector puede observar el prototipo de la función anterior indica que se devuelve un tipo de dato TW_UINT16, el cual no existe en C estándar. Esto se debe a que en los ficheros de cabecera del SDK de TWAIN se definen una serie de tipos de datos que ayudan a que el código TWAIN, tanto de aplicaciones como de fuentes, sea fácilmente portable entre las distintas plataformas hardware soportadas por el protocolo.

Una vez que la aplicación ha obtenido la dirección de la rutina DSM_Entry, se establece un diálogo entre dicha rutina, la aplicación y la fuente TWAIN seleccionada por el usuario. La primera fase de este diálogo consiste en abrir el administrador de fuentes TWAIN, cuya interfaz de usuario se muestra en la figura 1. Para realizar esta función la aplicación debe rellenar los campos de una estructura de tipo TW_IDENTITY excepto el denominado Id. Una vez que la estructura ha sido creada y sus campos cargados con los valores apropiados, el parámetro pOrigin que se pasa a DSM_Entry debe apuntar a esta estructura. El parámetro pDest de DSM_Entry debe ser nulo y pData debe apuntar al handle de la ventana que actúa como padre de la ventana de la fuente TWAIN que más

Revista Digital

Revistas Digitales

DealerWorld Digital

 



Otros Contenidos

juniper Fabricantes
Registro:

Eventos: