Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.01.13;
Скачать: CL | DM;

Вниз

Работа оо сканером   Найти похожие ветки 

 
Moff20   (2009-09-08 01:07) [0]

Добрый день, сразу прошу прощения если  вопрос не в ту тему, но вроде бы всё правильно.
Вопрос у меня следующий. Ответов на него я не нашёл не только у Вас на сайте, но и не могу найти во всём рунете.
В общем есть потоковый сканер (не планшетный, а который сканирует сразу пачку документов лист за листом, а также может сразу с двух сторон сканировать), и в нём необходимо производить сканирование сразу двух станиц (или одну с двух сторон). В интернете я нашёл очень хорошую статью, по использованию TWAIN технологий, и в принципе использовал её всё работает, но при сканировании только одного листа, или с одной стороны. А когда в сканерпринтер ложится сразу несколько страниц, при запуске сканирования, сканер прогоняет всю пачку листов, а код выхватывает изображение только последней страницы.
Помогите мне, как мне отслеживать каждый лист, точнее каждую страницу, если двух стороннее сканирование.

Ниже я привёл кусок кода, которым пользуюсь, могу скинуть весь проект при необходимости, но его легко найти в инете.


 
Moff20   (2009-09-08 01:08) [1]

ой код забыл

procedure TForm1.Accquire1Click(Sender: TObject);
var
dat: hBitMap;
PInfo: PBitMapInfoHeader;
Height,Width:integer;

{Функция возведения 2 в степень s}
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
{Получаем указатель на графические данные}
dat:=TWAIN_AcquireNative(Handle,0);
if dat <> 0 then begin
 {Получаем указатель на область памяти содержащей DIB
  данные и блокируем область памяти}
 PInfo:=GlobalLock(dat);
 {Анализируем полученные данные}
 Height:=PInfo.biHeight ;
 Width:=PInfo.biWidth ;
 {Узнаем размер полученного изображения в сантиметрах}
 Wcm.Caption :=floatToStrF(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3)+" cm";
 Hcm.Caption :=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3)+" cm";
 {Определяем число цветов в изображении}
 Colors.Caption := floatToStrF(stp2(PInfo.biBitCount),ffNumber,8,0)+ " цветов";
 {Разблокируем память}
 GlobalUnlock(dat);
 {Передаем в битовую матрицу графические данные}
 {И устанавливаем перехват ошибок}
 try
  MyBitMap.Palette :=TWAIN_CreateDibPalette(dat);
  MyBitMap.Width := Width;
  MyBitMap.Height := Height;
  TWAIN_DrawDibToDC(MyBitMap.Canvas.Handle,0,0,Width,Height,dat,0,0);
 except
  {Обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
     для загрузки изображения}
  on EOutOFResources do
                      MessageDlg("TBitMap: Нет ресурсов для загрузки изображения!",
                                  mtError,[mbOk],0);
 end;
 {Отображаем графические данные}
 Image1.Picture.Graphic:=MyBitMap;
 {Освобождаем память занятую графическими данными}
 TWAIN_FreeNative(dat);
end;
end;


 
Сергей М. ©   (2009-09-08 10:09) [2]


> {Функция возведения 2 в степень s}


Это ты мощно задвинул)

function My2BasedPower(Exp: Cardinal): Cardinal;
begin
 if (Exp < 0) or (Exp > (SizeOf(Result) shl 3 - 1)) then
   raise EOverflow.Create("&#205;&#229;&#228;&#238;&#239;&#243;&#241;&#242;&#232;&#236;&# 251;&#233; &#239;&#238;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252; &#241;&#242;&#229;&#239;&#229;&#237;&#232; !");
 Result := 1 shl Exp;
end;


 
Сергей М. ©   (2009-09-08 10:10) [3]

raise EOverflow.Create("Недопустимый показатель степени !");


 
Moff20   (2009-09-08 12:15) [4]

да это целиком дёрнутая процедура с
http://www.realcoding.net/articles/tekhnologiya-bez-interesnogo-imeni-ili-kak-rabotat-so-skanerom.html-0

Да и вобще данная статья очень распространена в инете. Поэтому когда вставлял данную процедуру в свою программу, не стал нарушать её целостность =) Она отлично работает. С одним "но".

В общем хорош глумиться, помогите, а то меня уже тянут за одно место =)
Мне тут подсказали, что Потоковый сканер на выходе обычно дает multipage image. То есть несколько картинок в одном файле. И мне это на самом деле не сильно помогло я всё равно не могу догнать, как вытягивать каждую страницу =(


 
Сергей М. ©   (2009-09-08 20:29) [5]


> дёрнутая процедура


Вот и "дергай" работающий код, если не в состоянии разрабатывать его своими мозгами.


> меня уже тянут за одно место


И правильно делают.


> хорош глумиться


Никто над тобой не глумится.
Ты зачем взялся за работу, в которой нишиша не понимаешь ?


 
Moff20   (2009-09-09 03:35) [6]

Я просил помочь, а не учить жизни! Код работает, он был ориентирован на планшетный сканер. Нужно переделать на потоковый сканер, если бы я был в состоянии его сам переделать, здесь бы вопрос свой не выкладывал, как мне показалось этот сайт и предназначен для тех у кого трудности. Работу дали (никто и не собирался за неё браться), со словами "Надо сделать". Прошу отвечать по теме тех, кто реально может помочь, а не у кого язык слишком длинный, для этого существуют отдельные темы форума.


 
Сергей М. ©   (2009-09-09 09:39) [7]


> Работу дали (никто и не собирался за неё браться), со словами
> "Надо сделать"


Вот и делай ее сам, а не чужими мозгами.

Отвечаю по теме: в составе TWAIN-интерфейса есть функции TWAIN_SetMultiTransfer и TWAIN_State

http://77.100.103.108/public/WinSoftware/scanning/EZTwain_User_Guide.pdf

Читать "How To: Transfer Multiple Images" до полного просветления


 
Moff20   (2009-09-10 02:34) [8]

Так Сергей, ты должен научить меня великому знанию Мау-Дзе Дун =) Изучил, разобрал, и всё равно не познал полного просветления. Во-первых в данном мануале все примеры кода на С++, где и указана описанная тобой некая функция TWAIN_SetMultiTransfer, которой к сожалению почему-то нет в Delphi компонентах twain. Зато есть функция TWAIN_GetNumDibs возвращающая количество изображений, которая почему-то не возращает ничего после вызова функции TWAIN_AcquireNative(Handle,0); хотя и указано, что данная функция возращает Хэндл только на последнее изображение, других функций нет, можети как-то надо в цикле очищать FreeNative и будет очищаться только последнее изображение и указатель перейдёт на предыдущее. Но ведь есть функция которая возвращает Хэндл сразу на определённое изображение по номеру GetDib. Вобщем у меня не получается... Как говорилось в фильме брат два "Бен, это Данила... I need Help"


 
Сергей М. ©   (2009-09-10 10:46) [9]


> все примеры кода на С++


И что ?
Чем он хуже Паскаля для понимания алгоритма ?
Проблемы индейцев шерифа не волнуют)


> функция TWAIN_SetMultiTransfer, которой к сожалению почему-
> то нет в Delphi компонентах twain


В составе D7 нет штатных компонетов, имеющих отношение к TWAIN.
Какими уж ты там компонентами пользуешься - я без понятия.


 
Moff20   (2009-09-10 11:16) [10]


> Какими уж ты там компонентами пользуешься - я без понятия.


Вот чем я пользуюсь http://speclab.narod.ru/multwain.zip
Вот есть вырезка из readme этого компонента, чётко указаны процедуры для мульти сканирования, но я так и не смог их выдресировать =(

* Standard TWAIN access routines:
  - TWAIN_SelectSource:  displays a dialog box to allow the user to
                         select a TWAIN device.  Accepts an HWND as
                         an argument, but sending it zero works fine.
  - TWAIN_AcquireNative:  returns a handle to a device-independent
                          bitmap (DIB) for the last image acquired (or
                          the only image, as the case may be).  Accepts
                          two arguments: an HWND and a pixmask.  Set
                          both to zero (I"ve had problems with my
                          camera when I specify the proper HWND).
  - TWAIN_FreeNative:  releases the memory owned by a DIB

* Routines to support acquisition of multiple images
  - TWAIN_GetNumDibs:  returns the number of images retrieved
  - TWAIN_GetDib:  returns a handle for the nth image retrieved
  - RegisterDibCallback:  designate an optional user-defined function  
                          to be called for each image transferred.  
                          Note that unfortunately the function
                          designated as a callback function *CANNOT* be
                          an object member function.  It MUST be
                          free-standing.
  - UnRegisterDibCallback:  tells the system not to call *any* user-
                            defined callback function


> И что? Чем он хуже Паскаля для понимания алгоритма? Проблемы
> индейцев шерифа не волнуют)


Алгоритм понятен абсолютно, я же говорю, что он работает только с функциями для Cpp, аналогичный алгоритм склепать у меня не вышло, и вобще это всё таки сайт мастеров Delphi.

Сергей мне нужна помощь на моём примере, вобщем я могу его хоть на изнанку вывернуть, лишь бы мне привели код хотя бы одного работающего примера для сканирования пачки листов, а не поучительные беседы о "вреде употребления алкоголя и табачной зависимости" =) Если помочь мне примером кода не в Ваших силах, тогда я извольте откланяюсь =)


 
Сергей М. ©   (2009-09-10 12:07) [11]


> мне нужна помощь на моём примере


У меня нет ни малейшего желания ковыряться в чужих компонентах и примерах сомнительного происхождения.

Существует официальный  EZTwain Pro Toolkit 3.08 - им и следует пользоваться.
В его составе д.б. Eztwain3.dll, в которой как раз и фигурирует ф-ция TWAIN_SetMultiTransfer, о которой как раз и есть упоминание в официальном документе по ссылке в [7].

И не надо изобретать кривые велосипеды)


 
Сергей М. ©   (2009-09-10 12:09) [12]


> примерах сомнительного происхождения


И уж тем более примерах с такой дебильной самодельной функцией, вычисляющей целую степень двойки.


 
Moff20   (2009-09-10 12:56) [13]


> У меня нет ни малейшего желания ковыряться в чужих компонентах
> и примерах сомнительного происхождения.


нет уж всё и запущено, всего та понять как оно работает в мульти режиме, оно же всё таки полюбому как-то работает... наверное =)


> Существует официальный  EZTwain Pro Toolkit 3.08 - им и
> следует пользоваться.


Ну дык с радостью приму ссылочку на него =) И ещё бы на его основе классно было бы увидеть пример потокового сканирования пачки листов реализованного на делфи =)


> И уж тем более примерах с такой дебильной самодельной функцией,
>  вычисляющей целую степень двойки.


Боже мой да что ты придрался к человеку, какая разница, может его прёт мастерить вручную математические функции =)


 
Сергей М. ©   (2009-09-10 13:04) [14]

Ты не умеешь искать информацию в заданном направлении ?
Не умеешь ее анализировать ?

Чего ты тогда делаешь в "WinAPI" ? Тому кто не в состоянии проглотить то что уже практически разжевано и в рот положено, место в "Начинающим")


 
Moff20   (2009-09-10 14:12) [15]

WinAPI это тот раздел форума куда подходит тема про сканирование и не как не раздел отличительных характеристик знаний программиста. Есть задание "Сканирование", необходимо его выполнить!
Могу и найти и проанализировать, боюсь на это уйдёт времени больше мне отведённого. Короче Сергей, я в первых же постах писал не надо меня жизни учить! Форум не психиатров, не хотите помогать - не надо, поболтать в чате можно. Либо помогайте (не учением жить людей), либо игнорируйте сообщения.


 
Moff20   (2009-09-10 14:45) [16]

Вот жеж мля... я скачал что ты мне посоветовал, там для дибилов мастер создания кода по пунктам сделан. Вот что сразу молчал я фигею =))) ладно я пока дома, тут у мну сканера нет, завтра на работе проверю, но думаю всё получится, там процедуры клепаются с комментариями =) так что обязан сказать спасибо огромное =)
Вот только скажи мне, зачем надо было вести демагогию такую, когда можно было в первом же ответет написать "ищи  EZTwain Pro Toolkit 3.08" и всё? Тебе надо тюремным психиатром идти =)

P.S. Это ещё не конец, может ещё вылезут ошибки какие-нить =)


 
Сергей М. ©   (2009-09-10 15:04) [17]


> я скачал что ты мне посоветовал


Ну наконец-то) ..Туго до тебя доходит, ой туго) .. Как до жирафа)


> что сразу молчал


Насчет чего ?
Про то что там для дибилов ?
А я почем знаю, что там внутри ?
Я еще пока умом не тронулся, чтобы качать все что ни попадя, ради того чтобы ублажать каждого встречного жирафа)


> можно было в первом же ответет написать "ищи  EZTwain Pro
> Toolkit 3.08


Да я его в первый раз в глаза увидел к моменту 7-го поста)
Оно мне надо - сканером твоим страдать ?)
Мне было вполне достаточно немного погуглить, чтобы найти правильное направление к решению задачи.


 
Сергей М. ©   (2009-09-10 15:05) [18]


> зачем надо было вести демагогию такую


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


 
Moff ©   (2009-09-10 16:04) [19]

ну почему бездумно сразу? Код который я впихнул себе я разобрал полностью, просто потом столкнулся с данной проблемой, я ж не втупую сдёрнул процедуру, у меян в программе она ведь переделана сильно =)


 
Сергей М. ©   (2009-09-10 16:13) [20]

А зачем тогда цитируешь оригинальный хлам ?


 
Moff ©   (2009-09-11 00:14) [21]


> А зачем тогда цитируешь оригинальный хлам ?


Потому-что у нас на работе нет интеренета на рабочем месте, когда я вышел на этот сайт, под рукой у меня не было кода своей программы, я просто ещё раз загуглил эту тему и вставил код, я же делал по аналогии.

Вот плохо, что dll там уже не свободная, а требует покупки лицензии =( я вот думаю, а ведь были же у них и свободные dll раньше, если найти такую свободную версию и заменить прокатит интересно?


 
AntiZOG   (2009-09-15 02:05) [22]


> Moff20   (08.09.09 01:07)  


Если XP и выше то попробуй WIA (Windows Image Acquisition)
http://msdn.microsoft.com/en-us/library/ms630368%28VS.85%29.aspx

TWAIN уже устаревший интерфейс.

c WinXP идёт WIA - для поддержки сканеров, фотоаппаратов и веб-камер


 
Wind ©   (2010-11-26 13:13) [23]

Лови. Сам с такой проблемой сталкивался.
http://www.delphimaster.ru/cgi-bin/forum.pl?&id=1290598419&n=18&p=1


 
Wind ©   (2010-11-26 13:14) [24]

Лови. Сам с такой проблемой сталкивался.
http://www.delphimaster.ru/cgi-bin/forum.pl?&id=1290598419&n=18&p=1


 
RGV ©   (2010-11-26 18:26) [25]

что то автор топика молчит, как насчет спасибо to  Wind ©?



Страницы: 1 вся ветка

Текущий архив: 2019.01.13;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.004 c
2-1476199440
QAZ
2016-10-11 18:24
2019.01.13
строка как объект в коде


2-1476367396
Дмитрий
2016-10-13 17:03
2019.01.13
Странности DisplayFormat


2-1477150686
валя
2016-10-22 18:38
2019.01.13
Не старндарный массив


15-1476480602
Юрий
2016-10-15 00:30
2019.01.13
С днем рождения ! 15 октября 2016 суббота


4-1252357661
Moff20
2009-09-08 01:07
2019.01.13
Работа оо сканером