![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа оо сканером [D7, Win2k]
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;