Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker Hacker

Dark-forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Dark-forum » Исходные коды » Сканирование картинок при помощи TWAIN-драйвера в .NET


Сканирование картинок при помощи TWAIN-драйвера в .NET

Сообщений 1 страница 20 из 524

1

Сканирование картинок при помощи TWAIN-драйвера в .NET

В Windows-приложениях, предназначенных для обработки графики, чаще всего используются TWAIN API-функции. К сожалению, .NET Framework не имеет встроенной поддержки для TWAIN, поэтому с TWAIN приходится работать через методы фреймворка для доступа к этим API. В приведённом примере не содержится готовой библиотеки, а только некоторые существенные шаги по минимальной адаптации к TWAIN приложений написанных в .NET.

Детали

Первым шагом было портирование самых важных частей TWAIN.H, они находятся в TwainDefs.cs . Основная логика для вызова TWAIN расположена в классе Twain, в файле TwainLib.cs . Так как TWAIN API предоставляются в виде Windows DLL (twain_32.dll), то необходимо использовать механизм DllImport для взаимодействия со старым кодом. Эта DLL имеет центральную DSM_Entry() с порядковым номером функции №1, экспортируемым в качестве отправной точки для TWAIN. Эта функция имеет множество параметров, последний из которых является переменной типа!

[DllImport("twain_32.dll", EntryPoint="#1")]
private static extern TwRC DSMparent(
    [In, Out] TwIdentity origin,
    IntPtr zeroptr,
    TwDG dg, TwDAT dat, TwMSG msg,
    ref IntPtr refptr );
Класс Twain имеет простой 5-ступенчатый интерфейс:

class Twain
{
    Init();
    Select();
    Acquire();
    PassMessage();
    TransferPictures();
}
Для различных колбэков, TWAIN использует специальные Windows-сообщения, которые должны быть пойманы из цикла сообщений приложения. В .NET нашёлся единственный подходящий для этого способ IMessageFilter.PreFilterMessage(), который активируется вызовом Application.AddMessageFilter(). В фильтре мы должны направлять каждое сообщение в Twain.PassMessage().

Пример приложения

Приложение выполнено в виде MDI Windows Forms. Оно имеет два пункта меню, связанные с TWAIN: Select Source... и Acquire... Как только изображение сосканировано, мы можем сохранить его в файл в любом из GDI+ поддерживаемых форматов (BMP, GIF, TIFF, JPEG. ..)

Ограничения

Весь код был протестирован только на Windows 2000SP2, с usb-сканером Epson Perfection и цифровой фотокамерой Olympus. Сканированное изображение (по TWAIN спецификации) является Windows DIB, а пример кода содержит очень мало перехватчиков исключительных ситуаций. К сожалению, в .NET нет прямого метода для преобразования DIB в управляемый класс Bitmap ... С цветовой палитрой и меню могут возникать некоторые общеизвестные проблемы.

Обратите внимание, корни TWAIN берут своё начало в 16-разрядных версиях Windows! Если необходимо использовать более современные API поддерживаемые в Windows ME/XP, посмотрите в сторону Windows Image Acquisition (WIA).

2

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

3

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

4

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

5

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

6

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

7

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

8

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

9

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

10

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

11

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

12

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

13

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

14

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

15

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

16

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

17

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

18

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

19

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.

20

Скрытый текст:

Для просмотра скрытого текста - войдите или зарегистрируйтесь.


Вы здесь » Dark-forum » Исходные коды » Сканирование картинок при помощи TWAIN-драйвера в .NET


Рейтинг форумов | Создать форум бесплатно