Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа оо сканером [D7, Win2k]


Страницы:   1 2

Moff20 ©   (2009-09-08 01:07:00) 

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

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


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


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


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


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


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


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


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


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

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

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

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


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

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


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


> {Функция возведения 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;


Moff20   (2009-09-08 01:08:00) [25]

ой код забыл

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо