Domanda

Sto usando TWAIN in C ++ e sto cercando di impostare il DPI manualmente in modo che un utente non venga visualizzato con la finestra di dialogo di scansione ma invece la pagina scansiona solo con le impostazioni predefinite e viene memorizzata per loro. Devo impostare manualmente il DPI ma non riesco a farlo funzionare. Ho provato a impostare la funzionalità utilizzando ICAP_XRESOLUTION e ICAP_YRESOLUTION. Quando guardo le informazioni sull'immagine, mostra sempre la stessa risoluzione, indipendentemente da ciò che le ho impostato usando gli ICAP. C'è un altro modo per impostare la risoluzione di un'immagine scansionata o c'è solo un passaggio aggiuntivo che non è possibile trovare nella documentazione da nessuna parte?

Grazie

È stato utile?

Soluzione

Uso ICAP_XRESOLUTION e ICAP_YRESOLUTION per impostare la risoluzione di scansione per uno scanner e funziona almeno per un numero di scanner HP.

Codice snipset:

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

Il valore dovrebbe essere di tipo TW_FIX32 che è un formato a virgola mobile definito da twain (strano ma vero).

Spero che funzioni per te!

Altri suggerimenti

Dovrebbe funzionare così.

Ma sfortunatamente non viviamo in un mondo perfetto. I driver TWAIN sono tra i driver più buggy là fuori. Il controllo del processo di scansione con TWAIN è sempre stato un grosso mal di testa perché la maggior parte dei driver non è mai stata testata senza la finestra di dialogo di scansione.

Per quanto ne so, non esiste anche una suite di test per due driver, quindi ognuno di loro si comporterà in modo leggermente diverso.

Ho scritto un'applicazione OCR negli anni 90 e ho dovuto affrontare anche questi problemi. Alla fine ho avuto un elenco di scanner supportati e un modulo scanner con lotti di hack e soluzioni per ogni driver diverso.

Prendi ad esempio ICAP_XRESOLUTION: la documentazione TWAIN dice che devi inviare la risoluzione come float a 32 bit. Hai provato a impostarlo utilizzando un numero intero? Oppure invialo come float ma metti la rappresentazione bit di un numero intero nel float, o viceversa. Tutto questo potrebbe funzionare per il driver con cui stai lavorando. O potrebbe non funzionare affatto.

Dubito che la situazione sia cambiata molto da allora. Quindi buona fortuna per farlo funzionare su almeno la metà delle macchine che sono là fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top