Question

J'utilise TWAIN en C ++ et j'essaie de définir manuellement le DPI afin qu'un utilisateur ne soit pas affiché avec la boîte de dialogue de numérisation, mais que la page numérise simplement avec des valeurs définies par défaut et soit stockée pour eux. Je dois régler le DPI manuellement mais je n'arrive pas à le faire fonctionner. J'ai essayé de définir la capacité à l'aide de ICAP_XRESOLUTION et de ICAP_YRESOLUTION. Lorsque je regarde les informations de l'image, elles affichent toujours la même résolution, quelle que soit la configuration choisie pour l'utilisation des ICAP. Existe-t-il un autre moyen de régler la résolution d’une image numérisée ou existe-t-il simplement une étape supplémentaire que je ne peux pas trouver dans la documentation?

Merci

Était-ce utile?

La solution

J'utilise ICAP_XRESOLUTION et ICAP_YRESOLUTION pour définir la résolution de numérisation d'un scanner et fonctionne au moins pour plusieurs scanners HP.

Jeu de code:

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;
}

La valeur doit être de type TW_FIX32, qui est un format à virgule flottante défini par twain (étrange mais vrai).

J'espère que cela fonctionne pour vous!

Autres conseils

Cela devrait marcher comme il faut.

Mais malheureusement, nous ne vivons pas dans un monde parfait. Les pilotes TWAIN sont parmi les pilotes les plus buggés. Contrôler le processus de numérisation avec TWAIN a toujours été un casse-tête, car la plupart des pilotes n'ont jamais été testés sans la boîte de dialogue de numérisation.

Autant que je sache, il n’existe pas non plus de suite de tests pour deux pilotes. Chacun d’eux se comportera donc légèrement différemment.

J'ai écrit une application OCR à la 90ème et je devais également gérer ces problèmes. J'ai fini par avoir une liste des scanners pris en charge et un module de scanneur avec beaucoup de hacks et de solutions de contournement pour chaque pilote différent.

Prenons par exemple ICAP_XRESOLUTION: la documentation TWAIN indique que vous devez envoyer la résolution sous forme de virgule flottante 32 bits. Avez-vous essayé de le définir en utilisant un entier à la place? Ou envoyez-le en tant que float, mais placez la représentation en bits d'un entier dans le float, ou inversement. Tout cela pourrait fonctionner pour le pilote avec lequel vous travaillez. Ou cela ne pourrait pas fonctionner du tout.

Je doute que la situation ait beaucoup changé depuis. Alors, bonne chance pour le faire fonctionner sur au moins la moitié des machines qui sont là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top