-
Добрый день, сразу прошу прощения если вопрос не в ту тему, но вроде бы всё правильно. Вопрос у меня следующий. Ответов на него я не нашёл не только у Вас на сайте, но и не могу найти во всём рунете. В общем есть потоковый сканер (не планшетный, а который сканирует сразу пачку документов лист за листом, а также может сразу с двух сторон сканировать), и в нём необходимо производить сканирование сразу двух станиц (или одну с двух сторон). В интернете я нашёл очень хорошую статью, по использованию TWAIN технологий, и в принципе использовал её всё работает, но при сканировании только одного листа, или с одной стороны. А когда в сканерпринтер ложится сразу несколько страниц, при запуске сканирования, сканер прогоняет всю пачку листов, а код выхватывает изображение только последней страницы. Помогите мне, как мне отслеживать каждый лист, точнее каждую страницу, если двух стороннее сканирование.
Ниже я привёл кусок кода, которым пользуюсь, могу скинуть весь проект при необходимости, но его легко найти в инете.
-
ой код забыл procedure TForm1.Accquire1Click(Sender: TObject);
var
dat: hBitMap;
PInfo: PBitMapInfoHeader;
Height,Width:integer;
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
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;
-
> {Функция возведения 2 в степень s}
Это ты мощно задвинул) function My2BasedPower(Exp: Cardinal): Cardinal;
begin
if (Exp < 0) or (Exp > (SizeOf(Result) shl 3 - 1)) then
raise EOverflow.Create('Íåäîïóñòèì 251;é ïîêàçàòåëü ñòåïåíè !');
Result := 1 shl Exp;
end;
-
raise EOverflow.Create('Недопустимый показатель степени !');
-
да это целиком дёрнутая процедура с http://www.realcoding.net/articles/tekhnologiya-bez-interesnogo-imeni-ili-kak-rabotat-so-skanerom.html-0Да и вобще данная статья очень распространена в инете. Поэтому когда вставлял данную процедуру в свою программу, не стал нарушать её целостность =) Она отлично работает. С одним "но". В общем хорош глумиться, помогите, а то меня уже тянут за одно место =) Мне тут подсказали, что Потоковый сканер на выходе обычно дает multipage image. То есть несколько картинок в одном файле. И мне это на самом деле не сильно помогло я всё равно не могу догнать, как вытягивать каждую страницу =(
-
> дёрнутая процедура
Вот и "дергай" работающий код, если не в состоянии разрабатывать его своими мозгами.
> меня уже тянут за одно место
И правильно делают.
> хорош глумиться
Никто над тобой не глумится. Ты зачем взялся за работу, в которой нишиша не понимаешь ?
-
Я просил помочь, а не учить жизни! Код работает, он был ориентирован на планшетный сканер. Нужно переделать на потоковый сканер, если бы я был в состоянии его сам переделать, здесь бы вопрос свой не выкладывал, как мне показалось этот сайт и предназначен для тех у кого трудности. Работу дали (никто и не собирался за неё браться), со словами "Надо сделать". Прошу отвечать по теме тех, кто реально может помочь, а не у кого язык слишком длинный, для этого существуют отдельные темы форума.
-
-
Так Сергей, ты должен научить меня великому знанию Мау-Дзе Дун =) Изучил, разобрал, и всё равно не познал полного просветления. Во-первых в данном мануале все примеры кода на С++, где и указана описанная тобой некая функция TWAIN_SetMultiTransfer, которой к сожалению почему-то нет в Delphi компонентах twain. Зато есть функция TWAIN_GetNumDibs возвращающая количество изображений, которая почему-то не возращает ничего после вызова функции TWAIN_AcquireNative(Handle,0); хотя и указано, что данная функция возращает Хэндл только на последнее изображение, других функций нет, можети как-то надо в цикле очищать FreeNative и будет очищаться только последнее изображение и указатель перейдёт на предыдущее. Но ведь есть функция которая возвращает Хэндл сразу на определённое изображение по номеру GetDib. Вобщем у меня не получается... Как говорилось в фильме брат два "Бен, это Данила... I need Help"
-
> все примеры кода на С++
И что ? Чем он хуже Паскаля для понимания алгоритма ? Проблемы индейцев шерифа не волнуют)
> функция TWAIN_SetMultiTransfer, которой к сожалению почему- > то нет в Delphi компонентах twain
В составе D7 нет штатных компонетов, имеющих отношение к TWAIN. Какими уж ты там компонентами пользуешься - я без понятия.
-
> Какими уж ты там компонентами пользуешься - я без понятия.
Вот чем я пользуюсь 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. Сергей мне нужна помощь на моём примере, вобщем я могу его хоть на изнанку вывернуть, лишь бы мне привели код хотя бы одного работающего примера для сканирования пачки листов, а не поучительные беседы о "вреде употребления алкоголя и табачной зависимости" =) Если помочь мне примером кода не в Ваших силах, тогда я извольте откланяюсь =)
-
> мне нужна помощь на моём примере
У меня нет ни малейшего желания ковыряться в чужих компонентах и примерах сомнительного происхождения.
Существует официальный EZTwain Pro Toolkit 3.08 - им и следует пользоваться. В его составе д.б. Eztwain3.dll, в которой как раз и фигурирует ф-ция TWAIN_SetMultiTransfer, о которой как раз и есть упоминание в официальном документе по ссылке в [7].
И не надо изобретать кривые велосипеды)
-
> примерах сомнительного происхождения
И уж тем более примерах с такой дебильной самодельной функцией, вычисляющей целую степень двойки.
-
> У меня нет ни малейшего желания ковыряться в чужих компонентах > и примерах сомнительного происхождения.
нет уж всё и запущено, всего та понять как оно работает в мульти режиме, оно же всё таки полюбому как-то работает... наверное =)
> Существует официальный EZTwain Pro Toolkit 3.08 - им и > следует пользоваться.
Ну дык с радостью приму ссылочку на него =) И ещё бы на его основе классно было бы увидеть пример потокового сканирования пачки листов реализованного на делфи =)
> И уж тем более примерах с такой дебильной самодельной функцией, > вычисляющей целую степень двойки.
Боже мой да что ты придрался к человеку, какая разница, может его прёт мастерить вручную математические функции =)
-
Ты не умеешь искать информацию в заданном направлении ? Не умеешь ее анализировать ?
Чего ты тогда делаешь в "WinAPI" ? Тому кто не в состоянии проглотить то что уже практически разжевано и в рот положено, место в "Начинающим")
-
WinAPI это тот раздел форума куда подходит тема про сканирование и не как не раздел отличительных характеристик знаний программиста. Есть задание "Сканирование", необходимо его выполнить! Могу и найти и проанализировать, боюсь на это уйдёт времени больше мне отведённого. Короче Сергей, я в первых же постах писал не надо меня жизни учить! Форум не психиатров, не хотите помогать - не надо, поболтать в чате можно. Либо помогайте (не учением жить людей), либо игнорируйте сообщения.
-
Вот жеж мля... я скачал что ты мне посоветовал, там для дибилов мастер создания кода по пунктам сделан. Вот что сразу молчал я фигею =))) ладно я пока дома, тут у мну сканера нет, завтра на работе проверю, но думаю всё получится, там процедуры клепаются с комментариями =) так что обязан сказать спасибо огромное =) Вот только скажи мне, зачем надо было вести демагогию такую, когда можно было в первом же ответет написать "ищи EZTwain Pro Toolkit 3.08" и всё? Тебе надо тюремным психиатром идти =)
P.S. Это ещё не конец, может ещё вылезут ошибки какие-нить =)
-
> я скачал что ты мне посоветовал
Ну наконец-то) ..Туго до тебя доходит, ой туго) .. Как до жирафа)
> что сразу молчал
Насчет чего ? Про то что там для дибилов ? А я почем знаю, что там внутри ? Я еще пока умом не тронулся, чтобы качать все что ни попадя, ради того чтобы ублажать каждого встречного жирафа)
> можно было в первом же ответет написать "ищи EZTwain Pro > Toolkit 3.08
Да я его в первый раз в глаза увидел к моменту 7-го поста) Оно мне надо - сканером твоим страдать ?) Мне было вполне достаточно немного погуглить, чтобы найти правильное направление к решению задачи.
-
> зачем надо было вести демагогию такую
Затем чтобы ты понял, что не следует бездумно передирать чужой код.
-
ну почему бездумно сразу? Код который я впихнул себе я разобрал полностью, просто потом столкнулся с данной проблемой, я ж не втупую сдёрнул процедуру, у меян в программе она ведь переделана сильно =)
|