Pregunta

Estoy usando TWAIN en C ++ y estoy tratando de configurar el DPI manualmente para que un usuario no se muestre con el cuadro de diálogo de escaneo, sino que la página solo escanea con los valores predeterminados establecidos y se almacena para ellos. Necesito configurar el DPI manualmente, pero parece que no puedo hacer que funcione. He intentado configurar la capacidad usando ICAP_XRESOLUTION y ICAP_YRESOLUTION. Cuando miro la información de la imagen, aunque siempre muestra la misma resolución, independientemente de lo que configuré con los ICAP. ¿Hay otra forma de establecer la resolución de una imagen escaneada o solo hay un paso adicional que debe hacerse que no puedo encontrar en la documentación en ninguna parte?

Gracias

¿Fue útil?

Solución

Utilizo ICAP_XRESOLUTION y ICAP_YRESOLUTION para establecer la resolución de escaneo de un escáner, y funciona al menos para varios escáneres HP.

Fragmento de código:

float x_res = 1200;
cap.Cap = ICAP_XRESOLUTION;
cap.ConType = TWON_ONEVALUE;
cap.hContainer = GlobalAlloc(GHND, sizeof(TW_ONEVALUE));
if(cap.hContainer)
{
    val_p = (pTW_ONEVALUE)GlobalLock(cap.hContainer);
    val_p->ItemType = TWTY_FIX32;
    TW_FIX32 fix32_val = FloatToFIX32(x_res);
    val_p->Item = *((pTW_INT32) &fix32_val);
    GlobalUnlock(cap.hContainer);
    ret_code = SetCapability(cap);
    GlobalFree(cap.hContainer);
}

TW_FIX32 FloatToFIX32(float i_float)
{
    TW_FIX32 Fix32_value;
    TW_INT32 value = (TW_INT32) (i_float * 65536.0 + 0.5);
    Fix32_value.Whole = LOWORD(value >> 16);
    Fix32_value.Frac = LOWORD(value & 0x0000ffffL);
    return Fix32_value;
}

El valor debe ser del tipo TW_FIX32, que es un formato de coma flotante definido por twain (extraño pero cierto).

¡Espero que funcione para ti!

Otros consejos

Debería funcionar de la misma manera.

Pero desafortunadamente no estamos viviendo en un mundo perfecto. Los controladores TWAIN se encuentran entre los controladores más defectuosos que existen. Controlar el proceso de escaneo con TWAIN siempre ha sido un gran dolor de cabeza porque la mayoría de los controladores nunca han sido probados sin el diálogo de escaneo.

Hasta donde yo sé, tampoco hay un conjunto de pruebas para twain-drivers, por lo que cada uno de ellos se comportará ligeramente diferente.

Escribí una aplicación de OCR en el 90 y tuve que lidiar con estos problemas también. Lo que terminé fue tener una lista de escáneres compatibles y un módulo de escáner con lotes de hacks y soluciones para cada controlador diferente.

Tome la ICAP_XRESOLUTION, por ejemplo: la documentación TWAIN dice que debe enviar la resolución como un flotante de 32 bits. ¿Has intentado configurarlo usando un número entero? O envíelo como flotante pero coloque la representación de bits de un entero en el flotante, o viceversa. Todo esto podría funcionar para el controlador con el que está trabajando. O no podría funcionar en absoluto.

Dudo que la situación haya cambiado mucho desde entonces. Así que buena suerte para que funcione en al menos la mitad de las máquinas que están ahí fuera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top