Вопрос о Twain: действительно ли возможно отсканировать всего один документ от фидера?

Единственные заметные различия - то, что, если Вы передаете .c gcc, он скомпилирует как C, тогда как g ++ будет всегда рассматривать его как C++.

9
задан 11 August 2009 в 13:26
поделиться

3 ответа

Это проблема фидера. Вы пробовали установить для функции подачи фидера значение false?

EDIT:

Похоже, CAP_AUTOFEED - правильный выбор. Согласно спецификации TWAIN 2.0 :

CAP_AUTOFEED Описание Если TRUE, источник автоматически подаст следующую страницу из устройства подачи документов после получения количества кадров, согласованного для захвата с каждой страницы. CAP_FEEDERENABLED должно быть ИСТИНА, чтобы использовать эту возможность. заявка Установите для возможности значение TRUE, чтобы включить процесс автоматической подачи источника, или FALSE, чтобы отключить его. После завершения каждой передачи проверьте TW_PENDINGXFERS. Подсчитайте, чтобы определить, Источник имеет больше изображений для передачи. -1 означает, что есть еще изображения для передачи, но точное номер не известен. CAP_FEEDERLOADED указывает, загружен ли источник подачи. (Автоматическая подача процесс продолжается, когда эта возможность ИСТИНА.)

1
ответ дан 4 December 2019 в 23:07
поделиться

Порядок возможностей важен, см. Этот документ www.twain.org/docs/CapOrderForWeb .

РЕДАКТИРОВАТЬ:

Это некоторые фрагменты кода из решения

Настройте автоматическую подачу

capFeederEnabled = _twEntities.GetCapability(TwCap.FeederEnabled, (short)1);
TwRC rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, capFeederEnabled);

TwCapability cap = _twEntities.GetCapability(TwCap.XferCount, 1);
rc = DScap(_applicationId, _sourceId, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);

, а затем, когда будет отправлено сообщение Twain Window

rc = DSixfer(_applicationId, _sourceId, TwDG.Image, TwDAT.ImageNativeXfer, TwMSG.Get, ref hbitmap);
rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.EndXfer, pxfr);

, наконец, сбросьте сканер для следующего документа

rc = DSpxfer(_applicationId, _sourceId, TwDG.Control, TwDAT.PendingXfers, TwMSG.Reset, pxfr);
0
ответ дан 4 December 2019 в 23:07
поделиться

Мне жаль, что я не знаком с проектом twaindotnet, но у меня есть большой опыт сканирования документов через TWAIN.

Прежде всего, заметка: не все устройства подачи документов можно кормить в одностраничном режиме; некоторые важные семейства сканеров всегда сканируют все в податчике после запуска. И довольно много драйверов TWAIN не поддерживают XFERCOUNT = 1, что бы ни говорилось в стандарте.

Если вы попытаетесь решить проблему, заставив сканер сканировать «одностраничные задания», вы будете ограничены (неопределенный) набор сканеров, которые это поддерживают. Стандарт TWAIN просто не требует этой функции. (Но да - CAP_AUTOSCAN = FALSE и XFERCOUNT = 1 можно попробовать.)

Есть лучшее решение (время и если позволяет терпение) - Похоже, вы хотите обрабатывать и удалять каждое изображение по мере его поступления, вместо того, чтобы собирать их все в памяти. Выясните, как заставить вашу библиотеку TWAIN передавать вам каждое изображение (или записывать его в файл) по мере его поступления, а не складывать их в памяти, и вы получите решение, которое работает со всеми сканерами подачи документов. И с большинством сканеров он будет сканировать немного быстрее ...

6
ответ дан 4 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: