2009-08-11 8 views
8

Estoy jugando con el código de http://www.codeproject.com/KB/dotnet/twaindotnet.aspxPregunta doble: ¿es posible escanear solo un documento del alimentador?

Tengo un problema porque twain devuelve el control solo después de escanear todos los documentos en el alimentador. Esto conduce a un uso elevado de memoria si escaneo 20 o más documentos.

Pensé en escanear solo un documento a la vez desde el alimentador y guardar la imagen y llamar a la API de nuevo en un bucle.

me he fijado cap_xfercount a 1, pero esto no parece ayudar:

TwCapability cap = new TwCapability(TwCap.XferCount, 1); 
    rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); 

¿Qué necesito hacer para escanear sólo un documento desde el alimentador? Cualquier sugerencia apreciada.

+1

Debe consultar http://code.google.com/p/twaindotnet/ también; está basado en el código del proyecto de código. –

Respuesta

1

Este es un problema de alimentador. ¿Has intentado configurar la capacidad del alimentador habilitado en falso?

EDIT:

Parece que la PAC _ AUTOFEED es el camino a seguir. De acuerdo con la TWAIN 2.0 specification:

PAC _ AUTOFEED Descripción Si es TRUE, la Fuente alimentará automáticamente la siguiente página del alimentador de documentos después de que el número de fotogramas negociados para la captura de cada página son adquiridos. CAP _ FEEDERENABLED debe ser VERDADERO para utilizar esta capacidad. Aplicación Establezca la capacidad de VERDADERO para habilitar el proceso de alimentación automática de la Fuente, o FALSE para deshabilitarlo. Después de completar cada transferencia, marque TW _ PENDINGXFERS. Cuente para determinar si la fuente tiene más imágenes para transferir. A -1 significa que hay más imágenes para transferir, pero se desconoce el número exacto de . CAP _ FEEDERLOADED indica si el alimentador de la fuente está cargado. (El proceso de alimentación automática continúa siempre que esta capacidad sea VERDADERA.)

+0

Sí, lo hice e intenta escanear desde la plataforma –

+0

¿Qué tal el CAP_AUTOFEED? – Filmund

+0

Parece que no puedo desactivar la autocalibración de caP, ¿quizás esta capacidad no sea compatible con el escáner? Intenté cap = new TwCapability (TwCap.CAP_AUTOFEED, 0); rc = DScap (appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); rc contiene 'falla' –

0

El orden de las cababilities es importante; consulte este documento www.twain.org/docs/CapOrderForWeb.

EDIT:

Estos son algunos fragmentos de código a partir de una solución

instalación de la alimentación automática

capFeederEnabled = _twEntities.GetCapability(TwCap.FeederEnabled, (short)1); 
TwRC rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, capFeederEnabled); 

TwCapability cap = _twEntities.GetCapability(TwCap.XferCount, 1); 
rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap); 

y luego, cuando la cuando se envía el mensaje Twain Ventana

rc = DSixfer(_applicationId, _sourceId, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, ref hbitmap); 
rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.EndXfer, pxfr); 

finalmente restablecer el escáner para el próximo documento

rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.Reset, pxfr); 
6

Lamento que no esté familiarizado con el proyecto twaindotnet, pero tengo mucha experiencia con el escaneo de documentos a través de TWAIN.

Primera nota: No todos los alimentadores de documentos pueden alimentar en modo de una sola página; algunas familias importantes de escáneres siempre escanean todo en el alimentador una vez que comenzó. Y, bastantes controladores TWAIN no respetarán XFERCOUNT = 1, sin importar lo que diga la norma.

Si intenta resolver el problema forzando al escáner a escanear "trabajos de una página", se limitará al conjunto (indeterminado) de escáneres que lo soportan. El estándar TWAIN simplemente no requiere esta característica. (Pero sí - CAP_AUTOSCAN = FALSE y XFERCOUNT = 1 sería el combo para probar.)

Hay una mejor solución (tiempo & si la paciencia lo permite) - Parece que lo que quiere hacer es procesar y deshacer cada imagen como llega, en lugar de recogerlos todos en la memoria. Averigüe cómo conseguir que su biblioteca TWAIN le entregue cada imagen (o escríbala en un archivo) a medida que llega, en lugar de apilarlas en la memoria, y tendrá una solución que funciona con todos los escáneres de alimentación de documentos. Y escaneará bastante más rápido con la mayoría de los escáneres, también ...

Cuestiones relacionadas