Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Компьютерное железо
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2011, 17:20   #1
Glen
Форумчанин
 
Аватар для Glen
 
Регистрация: 09.02.2011
Сообщений: 150
По умолчанию TWAIN сканер: дуплексный режим

Мне необходимо быстро разобраться в такой задаче: доработать существующий софт, читающий данные со сканера по протоколу TWAIN. Текущая версия этого софта рассчитана на сканирование одной страницы за раз. Грубо говоря: мы нажали в нашем GUI кнопку, считали первую пришедшую картинку со сканера (по сообщению TransferReady), и на этом всё.

Мне нужно доработать эту программу так чтобы она:
- Распознала (сама, без явного указания пользователя) в каком режиме поступают отсканированные изображения – simplex или duplex.
- Сложить принятые изображения в массив. Если это был simplex режим, то в каждом элементе массива должна быть одна картинка. Если это был duplex режим, то в каждом элементе массива должно быть две картинки – одна для верхней стороны и вторая для нижней

Вопрос; как это сделать? -:) Я вижу в TWAIN константы CAP_DUPLEX и CAP_DUPLEXENABLED; но пока не могу сообразить – как их использовать в этой моей задаче.

В частности мне непонятно:
1. Всегда ли моё Приложение может рассчитывать, что оно ТОЧНО знает – в каком режиме в данный момент поступают изображения со сканера, и как именно они поступают? Или бывают ситуации когда это в принципе неизвестно?
2. Я считал что моё Приложение само не будет пытаться ‘заставить’ сканер работать в duplex mode. Пользователь выберет (кнопками на сканере или в некоем софте сканера) нужный режим, а моё приложение распознает его. Это – правильное предположение? А то я пока даже duplex сканера в глаза не видел; не знаю как он выглядит
Glen вне форума Ответить с цитированием
Старый 27.10.2011, 21:01   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Glen Посмотреть сообщение
Мне нужно доработать эту программу так чтобы она:
- Распознала (сама, без явного указания пользователя) в каком режиме поступают отсканированные изображения – simplex или duplex.
Помойму эта хрень задаётся в TWAIN диалоге сканера и распознавать тут нечего. Разве что серьезные промышленные сканеры, которые сканируют за раз обе стороны, сами определяют пустые стороны и включают/отключают дуплекс. У меня на работе только МФУ с автоподатчиком и ему нужно явно указать: сканировать с обеих сторон или с одной. Он тупо сканит одну сторону, потом переворачивает лист, сканирует вторую сторону, переворачивает назад как было и выплёвывает лист. С отключенным дуплексом, он соответственно, ничего переворачивать не будет и отсканит одну сторону.
Цитата:
Сообщение от Glen Посмотреть сообщение
Вопрос; как это сделать? - Я вижу в TWAIN константы CAP_DUPLEX и CAP_DUPLEXENABLED; но пока не могу сообразить – как их использовать в этой моей задаче.
Сразу говорю, что я ПО для сканеров не писал и тут помочь ничем не могу
Цитата:
Сообщение от Glen Посмотреть сообщение
В частности мне непонятно:
1. Всегда ли моё Приложение может рассчитывать, что оно ТОЧНО знает – в каком режиме в данный момент поступают изображения со сканера, и как именно они поступают? Или бывают ситуации когда это в принципе неизвестно?
Подозреваю, что всё зависит от реализации TWAIN-драйвера конкретного сканера.
На работе есть МФУ Canon ir2018 с автоподатчиком. Автоподатчик умеет двухстороннее сканирование, правда я его использовал только для ксерокопий. Как-то пытался несколько страниц из автоподатчика отсканить, но так и не нашел бесплатную программу, которая умела TWAIN и получала все страницы с устройства (какие пробовал - прогоняли все страницы, но сохраняли только первую).
Так что, если такой сканер устроит и скажете как это сделать (прога может есть, которая при сканировании записывает всю "переписку" с устройством, чтобы узнать какие параметры последнее передавало на комп), могу предоставить инфу что он там по TWAIN на разных настройках гоняет. Есть еще пара МФУ (самсунг и еще один сапоп), но они дуплекс помойму не умеют.
А вот чисто сканеров с дуплексом нету и я их тоже не видел, но разницы в TWAIN быть не должно по идее.
Цитата:
Сообщение от Glen Посмотреть сообщение
2. Я считал что моё Приложение само не будет пытаться ‘заставить’ сканер работать в duplex mode. Пользователь выберет (кнопками на сканере или в некоем софте сканера) нужный режим, а моё приложение распознает его. Это – правильное предположение? А то я пока даже duplex сканера в глаза не видел; не знаю как он выглядит
Дешевый дуплекс содержит один сканирующий блок, т.е. обе стороны листа по очереди прогоняются через сканер, а, следовательно, скорость процедуры и дуплексе в 2 раза медленнее. Заставлять пользователя дольше ждать - не есть хорошо, а значит пусть он сам указывает что ему там надо. Для настройки есть так называемые TWAIN-диалоги.
pu4koff вне форума Ответить с цитированием
Старый 28.10.2011, 12:24   #3
Glen
Форумчанин
 
Аватар для Glen
 
Регистрация: 09.02.2011
Сообщений: 150
По умолчанию

"Помойму эта хрень задаётся в TWAIN диалоге сканера и распознавать тут нечего. Разве что серьезные промышленные сканеры, которые сканируют за раз обе стороны, сами определяют пустые стороны и включают/отключают дуплекс. У меня на работе только МФУ с автоподатчиком и ему нужно явно указать: сканировать с обеих сторон или с одной. Он тупо сканит одну сторону, потом переворачивает лист, сканирует вторую сторону, переворачивает назад как было и выплёвывает лист. С отключенным дуплексом, он соответственно, ничего переворачивать не будет и отсканит одну сторону."
------------

Хорошо, допустим у меня будет именно такой сценарий. В этом случае моему Приложению как раз и нужно как-то 'распознать', в каком режиме сейчас (в данным момент) работает сканер - дуплексном или простом? Если в простом, то Приложение интерпретирует поступающие изображения как: Лист_1_Сторона_1, Лист_2_Сторона_1, ...... Если в дуплексном, то Приложение интерпретирует поступающие изображения как Лист_1_Сторона_1, Лист_1_Сторона_2, Лист_2_Сторона_1, Лист_2_Сторона_2,....
То есть я могу в GUI своего приложения заставит пользователя явно указать, в каком режиме работает сейчас сканер. Да, так можно, и тогда ничего не надо 'распознавать'. Но я всё0таки зхотел бы чтобы Приложенеи распознало это само, без пользователя. Вот этому и посвящена тема.
Glen вне форума Ответить с цитированием
Старый 28.10.2011, 14:23   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Glen Посмотреть сообщение
Хорошо, допустим у меня будет именно такой сценарий. В этом случае моему Приложению как раз и нужно как-то 'распознать', в каком режиме сейчас (в данным момент) работает сканер - дуплексном или простом? Если в простом, то Приложение интерпретирует поступающие изображения как: Лист_1_Сторона_1, Лист_2_Сторона_1, ...... Если в дуплексном, то Приложение интерпретирует поступающие изображения как Лист_1_Сторона_1, Лист_1_Сторона_2, Лист_2_Сторона_1, Лист_2_Сторона_2,....
То есть я могу в GUI своего приложения заставит пользователя явно указать, в каком режиме работает сейчас сканер. Да, так можно, и тогда ничего не надо 'распознавать'. Но я всё0таки зхотел бы чтобы Приложенеи распознало это само, без пользователя. Вот этому и посвящена тема.
Логичнее всего почитать таки стандарт TWAIN и узнать как там всё собственно происходит. Кто кому что и как передаёт.
http://www.twain.org/docs/TWAIN_2_1_Spec.pdf
Судя по этому документу, TWAIN версии 2.1 умеет автоматически объединять обе стороны в один файл (см. TWEI_IMAGEMERGED)
Так же там есть сообщение MSG_GETCURRENT, которое, как я понял, возвращает текущие настройки и там можно про дуплекс узнать.
pu4koff вне форума Ответить с цитированием
Старый 29.10.2011, 23:36   #5
Glen
Форумчанин
 
Аватар для Glen
 
Регистрация: 09.02.2011
Сообщений: 150
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Логичнее всего почитать таки стандарт TWAIN и узнать как там всё собственно происходит. Кто кому что и как передаёт.
http://www.twain.org/docs/TWAIN_2_1_Spec.pdf
Судя по этому документу, TWAIN версии 2.1 умеет автоматически объединять обе стороны в один файл (см. TWEI_IMAGEMERGED)
Так же там есть сообщение MSG_GETCURRENT, которое, как я понял, возвращает текущие настройки и там можно про дуплекс узнать.
“Логичнее всего почитать таки стандарт TWAIN” – если бы наша жизнь была такой простой чтобы ‘почитать и понять’ :-) Есть же ещё проблема ИНТЕРПРЕТАЦИИ прочитанного. Недаром у иудеев есть целая профессия ТОЛКОВАТЕЛЕЙ священных текстов.

Вот из описания CAP_DUPLEX я вижу: эта опция говорит что сканер поддерживает duplex ‘в принципе’. Но мне этого мало: я хочу знать, в каком режиме работает сканер В ДАННЫЙ МОМЕНТ.

В описании же CAP_DUPLEXENABLED сказано: “Application should send MSG_GET to determine if the duplex option is enabled or not”. Это то что мне надо? Запрошу текущее значение CAP_DUPLEXENABLED и пойму – в каком режиме СЕЙЧАС работает сканер? Или я неправильно всё понял? Пока я просто не уверен.
Glen вне форума Ответить с цитированием
Старый 30.10.2011, 08:47   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Судя по спецификации, да. Нужно смотреть на CAP_DUPLEXENABLED.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с Twain Qwed Помощь студентам 0 22.10.2011 23:55
ActiveX, TWAIN gojohnygo Помощь студентам 1 29.09.2008 13:20
Twain или работа со сканером в Delphi D-mon Win Api 2 08.12.2007 17:23
Взаимодействие с twain jonbc Win Api 4 06.04.2007 23:35