Найти в Дзене
Антон Наянзин

Подключение сканера по Easy TWAIN

Фото автора
Фото автора

Целью данной статьи я вижу рассказ о том, как просто и быстро подключить к своей программе TWAIN-совместимый сканер, используя интерфейс Easy TWAIN. При этом я не ставлю перед собой задачу подробного анализа этого интерфейса, исчерпывающую информацию на этот счёт можно найти на специальных сайтах, посвящённым стандартам TWAIN и Easy TWAIN. Если заинтересуетесь, то крайне рекомендую англоязычные ресурсы, там в разы больше полезной информации. А я же начну знакомство с Easy TWAIN. Поехали!

Интерфейс Easy TWAIN (EZTWAIN) под Win32 представляет собой динамическую библиотеку eztw32. dll. В своей работе EZTWAIN использует промышленный стандарт TWAIN, но существенно упрощает использование его в прикладных программах (собственно, отсюда и название "Easy TWAIN", что означает "простой TWAIN"). Для работы со сканером нужно просто динамически подключить эту библиотеку и вызывать из неё необходимые функции.

Где найти эту библиотеку? Она распространяется свободно, и её возможностей вам вполне хватит. Вы скачали файл eztwl. zip. Распаковав его, вы обнаружите листинги самой библиотеки (файлы VC\EZTWAIN. C и VC\EZT-WAIN. H), приложение иллюстрирующее пример её использования (VC\TWERP. С) и заголовочный файл TWAIN (VC\TWAIN. Н). Из всего этого для нас представляет интерес только сама библиотека (VC\RELEASE\EZTW32. DLL) и её заголовочный файл (VC\EZTWAIN. H). Найдите их и скопируйте в каталог своего проекта. Easy TWAIN предоставляет разработчику солидный набор функций. Однако, для того, чтобы просто получить изображение со сканера нам понадобятся всего две. Полное описание всех функций можно найти в файле EZTWAIN. Н.

Обратите внимание, это важно: ни одна из функций EZTWAIN не будет работать, если на вашем компьютере нет самого интерфейса TWAIN. Признак его присутствия - наличие в каталоге WINDOWS или WINDOWS\SYSTEM библиотек TWAIN. DLL и TWAIN_32. DLL. Программно этот факт можно проверить, вызвав функцию EZTWAIN TWAIN_IsAvailable().

Переходим к созданию приложения - попробуем на практике получить изображение со сканера. Будем использовать среду разработки C++ Builder 5. 0. Для начала - создадим новый проект. На его форму положим элемент TImage, в который и будет помещаться изображение со сканера. Ещё поместим на форму кнопку TButton, по нажатию которой будет происходить сканирование. В заголовочный файл формы надо включить EZTWAIN. Н. Подключать библиотеку будем в конструкторе главной формы. Сделаем это так:

_fastcall TForml:: TForml(TComponent* Owner): TForm(0wner) { // Подключаем EasyTwain hLib=LoadLibrary("eztw32. dll"); (void *) SelectImageSource = GetProcAddress(hLib, "TWAIN_SelectImageSource"); (void *) AcquireToClipboard = GetProcAddress(hLib, "TWAIN_AcquireToClipboard"); bIsChoseScaner=FALSE; }

Здесь: hLib - хэндл модуля, SelectlmageSource и AcquireToClipboard - указатели на функции библиотеки, blsChoseScaner - флаг, показывающий, выбран ли сканер. Все эти переменные описаны в заголовке класса формы. Сделаем так, чтобы сканер выбирался при показе формы. Для этого напишем обработчик события OnShow, в котором будем просто вызывать функцию TWAIN_SelectlmageSource:

void _fastcall TForml:: FormShow(TObject *Sender) { bIsChoseScaner=FALSE; // Окно выбора сканера if(SelectlmageSource(Handle)) bIsChoseScaner=TRUE; }

Последний шаг - создание обработчика кнопки сканирования: void _fastcall TForml:: ScanClick(TObject *Sender) { // Если выбран сканер

if(bIsChoseScaner) // Если есть образ

if(AcquireToClipboard(Handle, TWAIN. ANYTYPE)) { // Извлекаем из буфера обмена

TClipboard *pCB=Clipboard(); Imagel->Picture->Bitmap->LoadFrom ClipboardFormat(CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0); }

Тут надо обратить внимание на небольшую тонкость. Второй параметр функции AcquireToClipboard задаёт тип получаемого изображения. Он не всегда может соответствовать физическим возможностям сканера. Гораздо проще присваивать этому параметру значение TWAIN_ANYTYPE (или просто 0), а нужный тип выбирать в появившемся после вызова функции диалоге сканирования.

Вот собственно, и всё. Довольно просто, не правда ли? Осталось только запустить наше приложение, выбрать сканер, нажать кнопку сканирования - и получить готовое изображение!