Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
olegoner
162 / 76 / 21
Регистрация: 22.04.2012
Сообщений: 221
1

Работа со сканером TWAIN

23.09.2012, 18:14. Просмотров 7664. Ответов 5
Метки нет (Все метки)

Приветствую. Посоветуйте пожалуста компонент или нормальную библиотеку для работы со сканером.

Требуется что бы была возможность настройки поля сканирования, режима сканирования (чёрно белый, оттенки серого, цветной) и отключение стандартного диалога (где какраз всё выше перечисленное "ручками" и задаётся). Т.е. сканирование по заданным параметрам должно происходить по нажатию одной кнопки.

Пробовал следующие компоненты:
AcquireImage v.1.4.1
DelphiTwain
Но у них таких свойств не нашёл.

Пробовал использовать библиотеку EZTWAIN
но помимо того что половины необходимых функций в ней нет (которые описаны например тут, так ещё возникают ошибки при их использовании.

Например



Delphi
1
hDib = TWAIN_AcquireNative(handle,0);//сканирует в наилучшем качестве
Delphi
1
2
TWAIN_SetCurrentPixelType(TWPT_GRAY);//говорит что это надо делать на 4 стадии
hDib = TWAIN_AcquireNative(handle,0);// сканирует в наилучшем качестве цветным
а так
Delphi
1
2
3
TWAIN_OpenDefaultSource;//переходим на 4 стадию
TWAIN_SetCurrentPixelType(TWPT_GRAY);
hDib = TWAIN_AcquireNative(handle,0);// не сканирует вообще!!! с ошибкой "TWAIN_reportLastError : an error occred"
Помогите пожалуйста разобраться что, да как тут делать...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 18:14
Ответы с готовыми решениями:

Работа со сканером штрих кодов - для профессионалов
Работа со сканером штрих кодов - для профессионалов. Задача - есть у меня на работе сканер штрих...

Поиск компонента для Rad Studio XE7 - работа со сканером
какие есть компоненты для работы со сканером, камерой (Для стандартного VCL приложения)

TWAIN. Вопросы. Решения.
Всем привет. Ненашел по форуму такой темы, а она оочень важна для меня сейчас. Конкретно: надо...

Сканирование изображений с TWAIN с заданными параметрами (dpi, глубина цвета и др.)
Граждане! Это безобразие! Я переюзал уже около десяти разных средств доступа к TWAIN-устройствам,...

Работа со сканером
public class ReadFileByScanner { public ReadFileByScanner() { File file = new...

5
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.09.2012, 21:08 2
EZTWAIN
...
и отключение стандартного диалога
TWAIN_SetHideUI(1)
0
olegoner
162 / 76 / 21
Регистрация: 22.04.2012
Сообщений: 221
23.09.2012, 21:48  [ТС] 3
Это я знаю. Работает. Как задать сканировать только чёрно0белое изображение например областью 0,0,200,200?
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.09.2012, 07:55 4
...ваши слова выше, раз написали, значит не знали.

областью 0,0,200,200
eztwain - это DS-прослойка между специфичным драйвером с API производителя сканнера и приложениями верхнего уровня (вами), есть подозрение урезания в сторону универсальности. Хотя вполне вероятно, хэдеры я просмотрел невнимательно
0
olegoner
162 / 76 / 21
Регистрация: 22.04.2012
Сообщений: 221
24.09.2012, 20:05  [ТС] 5
...ваши слова выше, раз написали, значит не знали.
Я это применял в LZTwain и AcquireImage v.1.4.1, а вот
в DelphiTwain такой возможности не нашёл.

Что касается области сканирования
я нашёл следющий код
TWAIN_SetImageLayout(0,0,200,200);

TWAIN_SetImageLayout
int TWAIN_SetImageLayout(double L, double T, double R, double B)
Lower-level region-of-interest (ROI) function. Set the area to scan, using
DAT_IMAGELAYOUT/MSG_SET.
Note: Even though the TWAIN standard lists this feature as required most cameras
ignore it, along with some ADF scanners and other devices. This call is only valid in
State 4 that is, when a device is open.
L, T, R, B = distance to left, top, right, and bottom edge respectively of area to scan,
measured in the current unit of measure from the top-left corner of the 'original
page' (TWAIN 1.6 8-22). See the warning below about units.
Returns TRUE (1) if successful, FALSE (0) otherwise. Common causes of failure:
1. Not in State 4 / Source open. See TWAIN_OpenDefaultSource.
2. The device does not support image layout.
3. Incorrect parameters – see the example below.
Do not assume that image layout is pixel-precise. Many devices deliver images that
differ from the requested image layout by a few pixels in width or height.
In theory the numbers used in image layout are measurements in the current unit
of measure (see TWAIN_GetCurrentUnits / TWAIN_SetUnits.)
In practice quite a few TWAIN devices ignore the unit setting and always measure
image layout in inches.
но в библиотеке которую я использую данной функции нет, кроме того, есть проблемы с переходом на 4 стадию.
После выполнения функции TWAIN_OpenDefaultSource сканирование не происходит (хотя если её убрать, то всё нормально), выдаёт ошибку "TWAIN_reportLastError : an error occred".
Подозреваю, что она неправильно устанавливает устройство для сканирования, но в чём причина понять не могу...

Добавлено через 5 минут
Нашёл следующую вещь
http://www.eztwain.com/eztwain3.htm

щас посмотрю как работает

Добавлено через 48 минут
Вообщем с этой библиотекой всё работает, но она использует собственный eztwain3.dll
который во первых бесплатно работает только 30 дней (как он мне выдал) и во вторых его надо как-то прилагать к программе, потому-что на другом компе его нет например.

Добавлено через 2 часа 2 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function Scan(hand:handle; Res:integer; ColorPar:byte; FileName:string; var Bitmap:Tbitmap; sizeh,sizew:string):boolean;
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width:integer;
{ÔóГ*êöèÿ âîçâåäåГ*ГЁГї 2 Гў Г±ГІГҐГЇГҐГ*Гј}
function stp2(s:byte):longint;
 var
  m: longint;
  i: byte;
begin
  m:=2;
  for i:=2 to s do m:=m*2;
  stp2:=m;
end;
 
 
begin
addtolog('SCAN>>start');
result:=true;
 
  If TWAIN_OpenDefaultSource=0 then
  begin
    result:=false;
    addtolog('SCAN>>fail openDefaultSource>>EXIT');
    exit;
  end;
  TWAIN_SetHideUi(1); //ñêðûâåì äèГ*ëîã Г±ГЄГ*Г*èðîâГ*Г*ГЁГї
  TWAIN_SetCurrentPixelType(ColorPar); //ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ ГІГЁГЇ Г±ГЄГ*Г*èðîâГ*Г*ГЁГї
  TWAIN_SetCurrentResolution(Res);// ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ Г°Г*çðåøåГ*ГЁГҐ
 
  dat:=TWAIN_AcquireNative(hand,0);
  if dat = 0 then
  begin
    addtolog('SCAN>>dat=0>>Exit');
    result:=false;
    exit;
  end;
 
    {Ïîëó÷Г*ГҐГ¬ ГіГЄГ*Г§Г*òåëü Г*Г* îáëГ*Г±ГІГј ГЇГ*ìÿòè ñîäåðæГ*Г№ГҐГ© DIB
   Г¤Г*Г*Г*ûå ГЁ áëîêèðóåì îáëГ*Г±ГІГј ГЇГ*ìÿòè}
    PInfo:=GlobalLock(dat);
 
    Height:=PInfo.biHeight ;
    Width:=PInfo.biWidth ;
    SizeW:=floatToStrF(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3)+' cm';
    SizeH:=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3)+' cm';
    {ГђГ*çáëîêèðóåì ГЇГ*ìÿòü}
    GlobalUnlock(dat);
 
    {ÏåðåäГ*ГҐГ¬ Гў áèòîâóþ Г¬Г*òðèöó ГЈГ°Г*ГґГЁГ·ГҐГ±ГЄГЁГҐ Г¤Г*Г*Г*ûå}
    {Г€ ГіГ±ГІГ*Г*Г*âëèâГ*ГҐГ¬ ïåðåõâГ*ГІ îøèáîê}
    Bitmap.Free;
    Bitmap:=TBitmap.Create;
    try
      BitMap.Palette :=TWAIN_CreateDibPalette(dat);
      BitMap.Width := Width;
      BitMap.Height := Height;
      TWAIN_DrawDibToDC(BitMap.Canvas.Handle,0,0,Width,Height,dat,0,0);
    except
   {ГЋГЎГ°Г*ГЎГ*òûâГ*ГҐГ¬ Г*Г*èáîëåå âåðîÿòГ*ГіГѕ îøèáêó Г±ГўГїГ§Г*Г*Г*ГіГѕ Г± Г*ГҐ õâГ*òêîé ðåñóðñîâ
    äëÿ Г§Г*ãðóçêè èçîáðГ*æåГ*ГЁГї}
   on EOutOFResources do
      MessageDlg('TBitMap: ГЌГҐГІ ðåñóðñîâ äëÿ Г§Г*ãðóçêè èçîáðГ*æåГ*ГЁГї!',
                 mtError,[mbOk],0);
    end;
 
 
 
   {ÎñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü Г§Г*Г*ГїГІГіГѕ ГЈГ°Г*ôè÷åñêèìè Г¤Г*Г*Г*ûìè}
  TWAIN_FreeNative(dat);
 
    Bitmap.SaveToFile(FileName);
 
 
 
end;
выход из функции на этапе OpenDefaultSoruce

Добавлено через 2 минуты
Delphi
1
2
3
4
5
function TWAIN_OpenDefaultSource: Integer;
stdcall; external 'eztw32.dll'
// This opens the source selected in the Select Source dialog.
// If a source is already open, does nothing and returns TRUE.
// Fails if the source manager is not loaded and open.
Добавлено через 2 минуты
кстати на eztwain3.dll такой проблемы небыло
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
24.09.2012, 20:35 6
TWAIN_SetImageLayout
...в хэдерах TWAIN.H, EZTWAIN.H на старый eztwain я ее тоже не нашел.

Есть альтернатива - IMGCMN.DLL, в ней более расширенные возможности.
1
24.09.2012, 20:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 20:35

Работа со сканером
Здравствуйте. очень большая к вам просьба. помогите разобраться как подвязать сканер штрих кода...

Работа со сканером из под VB
Люди!Помогите! Меня интиресует работа со сканером из под VB , если можно,то с примерами. Заранее...

Работа со слайд-сканером
Если у кого есть такой опыт, откликнитесь.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru