Pergunta

Eu estou usando TWAIN em C ++ e eu estou tentando definir o DPI manualmente para que um usuário não é exibida com o diálogo de verificação, mas em vez disso a página apenas verifica com os padrões estabelecidos e é armazenado para eles. Eu preciso definir o DPI manualmente, mas eu não consigo fazê-lo funcionar. Tenho experimentado definindo a capacidade usando o ICAP_XRESOLUTION eo ICAP_YRESOLUTION. Quando eu olho para informações da imagem que ele sempre mostra a mesma resolução não importa o que eu defini-lo para usar os ICAPS. Existe outra maneira para definir a resolução de uma varredura na imagem ou há apenas um passo adicional que precisa ser feito que não consigo encontrar em qualquer lugar documentação?

Graças

Foi útil?

Solução

Eu uso ICAP_XRESOLUTION eo ICAP_YRESOLUTION para definir a resolução de digitalização para um scanner, e ele funciona, pelo menos para um número de scanners HP.

Código 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;
}

O valor deve ser do tipo TW_FIX32 que é um formato de ponto flutuante definida por dois (estranho mas é verdade).

Espero que funcione para você!

Outras dicas

Ele deve funcionar o caminho.

Mas, infelizmente, não estamos vivendo em um mundo perfeito. drivers TWAIN estão entre as maioria dos motoristas de buggy lá fora. Controlando o processo de digitalização com TWAIN sempre foi uma grande dor de cabeça porque a maioria dos motoristas têm não foi testado sem o diálogo de digitalização.

Tanto quanto eu sei, também não há test-suite para TWAIN motoristas, de modo que cada um deles vai se comportar um pouco diferente.

Eu escrevi uma volta aplicativo de OCR no 90 e teve de lidar com estas questões também. O que eu acabei era ter uma lista de scanners suportados e um módulo de scanner com muitos de hacks e soluções alternativas para cada driver diferente.

Leve o ICAP_XRESOLUTION por exemplo: A documentação TWAIN sais você tem que enviar a resolução como 32 bit float. Você já tentou defini-lo usando um inteiro em vez disso? Ou enviá-lo como flutuador mas colocar o bit de representação de um número inteiro dentro do flutuador, ou vice-versa. Tudo isso poderia funcionar para o driver que você está trabalhando. Ou ele não poderia trabalhar em tudo.

Eu duvido que a situação mudou muito desde então. Então, boa sorte fazê-lo funcionar em pelo menos metade das máquinas que estão lá fora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top