Как установить разрешение сканирования с помощью TWAIN в C++?

StackOverflow https://stackoverflow.com/questions/1012642

  •  06-07-2019
  •  | 
  •  

Вопрос

Я использую TWAIN в C++ и пытаюсь установить DPI вручную, чтобы пользователь не отображался в диалоговом окне сканирования, а вместо этого страница просто сканировалась с установленными настройками по умолчанию и сохранялась для них.Мне нужно установить DPI вручную, но я не могу заставить его работать.Я попытался настроить эту возможность, используя ICAP_XRESOLUTION и ICAP_YRESOLUTION.Когда я смотрю на информацию об изображении, оно всегда показывает одно и то же разрешение, независимо от того, какое значение я установил с помощью ICAP.Есть ли другой способ установить разрешение отсканированного изображения или нужно выполнить только дополнительный шаг, который я нигде не могу найти в документации?

Спасибо

Это было полезно?

Решение

Я использую ICAP_XRESOLUTION и ICAP_YRESOLUTION для установки разрешения сканирования для сканера, и это работает, по крайней мере, для ряда сканеров HP.

Фрагмент кода:

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

Значение должно иметь тип TW_FIX32, который представляет собой формат с плавающей запятой, определенный twain (странно, но это правда).

Надеюсь, это сработает для вас!

Другие советы

Это должно сработать.

Но, к сожалению, мы живем не в идеальном мире.Драйверы TWAIN являются одними из самых ошибочных драйверов.Управление процессом сканирования с помощью TWAIN всегда было большой головной болью, поскольку большинство драйверов никогда тестировался без диалогового окна сканирования.

Насколько мне известно, для твин-драйверов также нет набора тестов, поэтому каждый из них будет вести себя немного по-разному.

Я написал приложение OCR еще в 90-х, и мне тоже приходилось сталкиваться с этими проблемами.В итоге у меня был список поддерживаемых сканеров и модуль сканера с много хаков и обходных путей для каждого отдельного драйвера.

Возьмем, к примеру, ICAP_XRESOLUTION:В документации TWAIN указано, что разрешение необходимо отправлять в виде 32-битного числа с плавающей запятой.Вы пытались установить его, используя целое число?Или отправьте его как число с плавающей запятой, но поместите битовое представление целого числа в число с плавающей запятой, или наоборот.Все это может сработать для водителя, с которым вы работаете.Или вообще не могло работать.

Я сомневаюсь, что с тех пор ситуация сильно изменилась.Так что удачи в том, чтобы он заработал хотя бы на половине существующих машин.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top