ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
Forum membership is Free!  Click Join to sign-up
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 scanning several pages
 New Topic  Reply to Topic
Author Previous Topic Topic Next Topic  

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  12:17:20  Show Profile  Reply
Hi folks,

I am trying to scan several pages using TWAIN.

procedure TfrmMain.Scan;
begin
with ImageEnView1.IO do
begin
Params.DPIX := 300;
Params.DPIY := 300;
Params.BitsPerSample := 1;
Params.SamplesPerPixel := 1;
Params.TIFF_Compression := ioTIFF_G4FAX;
ImageEnView1.IO.OnAcquireBitmap := ImageIOAcquireBitmap;
if not BtnSave.Enabled then
begin
TWainParams.VisibleDialog:=False;
if AcquireOpen then
MostraMensagem('Scanner initialized');
end;
end;

procedure TfrmMain.ImageIOAcquireBitmap(Sender: TObject;
ABitmap: TIEBitmap; var Handled: Boolean);
var NomeArquivo:String;
begin
NomeArquivo := EditDest.Text + Filename + '_' + StrZero(Counter,4)+'.tif';
ImageIO.AttachedIEBitmap := ABitmap;
ImageIO.SaveToFileTIFF( NomeArquivo );
Log.Items.Add('Arquivo '+NomeArquivo+' importado');
Inc( Counter );
Handled := false;
end;

Everything works fine on the first scan.
When I put more papers and click scan, AcquireOpen does not start scanning.

What I am doing wrong?

fab

1310 Posts

Posted - Sep 01 2011 :  13:14:46  Show Profile  Reply
Hello,
you should leave the scanner dialog visible when use AcquireOpen/AcquireClose, because the event OnAcquireBitmap should be called each time the user click on "Acquire" button of that dialog (and for each page acquired).

Anyway to support multiple pages you should set also:
Params.AutoFeed := true;
Params.FeederEnabled := true;
Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  13:33:08  Show Profile  Reply
Hi Fabrizio, thanks for your quick answer.

I think I didnīt explain the problem well. The first time I scan, I put 10 pages and all 10 were scanned correctly. But if I put more 10 pages and start my program again, nothing happens.

The more interesting thing is that if I close the program and start it again without touching the scan, it continues to scan correctly. It seems that there are some internal variable that locks the scanner from start again.

Is this a AcquireOpen limitation ?

Is there another way to acquire several pages a second time instead of showing the scanner dialog ?
Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  13:35:10  Show Profile  Reply
Fixing the last post:

I think I didnīt explain the problem well. The first time I scan, I put 10 pages and all 10 were scanned correctly. But if I put more 10 pages and click start button again, nothing happens.

The more interesting thing is that if I close the program and start it again without touching the scan, it continues to scan correctly. It seems that there are some internal variable that locks the scanner from start again.

Is this a AcquireOpen limitation ?

Is there another way to acquire several pages a second time instead of showing the scanner dialog ?
Go to Top of Page

fab

1310 Posts

Posted - Sep 01 2011 :  13:58:22  Show Profile  Reply
AcquireOpen needs to terminate with AcquireClose, otherwise it doesn't work well. Anyway it needs the dialog to be shown.

quote:
Is there another way to acquire several pages a second time instead of showing the scanner dialog ?



Use TImageEnMView.
Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  13:59:20  Show Profile  Reply
I did another test to validate my thesis. I wrote 2 executables: program1 has just has a SCAN button with no reference to ImageEn and program2 has the scanning logic cited on the original post.

When I press the start button, program1 just calls program2.exe that makes the scan and verifies (via Timer) if the images continues to arrive. After 5 seconds without receiving images, it closes iself.

Program1.exe on the other hand verifies if program2.exe is running. When it "realizes" that program2 is not running, it enables the SCAN button again.

That means that when Program2 closes itself, it cleans some variable or structure that frees the scanner.

What I need to know is what do I have to free in order to liberate the scanner to start again.
Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  14:07:26  Show Profile  Reply
About AcquireClose: On my SCAN button, I always issue AcquireClose but it does not fix the problem.

About Params.AutoFeed and Params.FeederEnabled. Both are true;

About TImageEnMView: I didnīt realize how I can control the filenames using this component. Is there any example on saving several files using this component ?

Is there any difference between ImageEnView.AcquireOpen and ImageEnView.IO.AcquireOpen ?


Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  14:10:59  Show Profile  Reply
FORGET the last question. Is there any difference between ImageEnView.AcquireOpen and ImageEnView.IO.AcquireOpen ?

This tests are driving my nuts!!!

Go to Top of Page

Josir

Brazil
12 Posts

Posted - Sep 01 2011 :  14:39:28  Show Profile  Reply
I got it!!

It works when I issue:

ImageEnView1.IO.AcquireClose;
ImageEnView1.IO.TWainParams.FreeResources;

before issue AcquireOpen.

Thanks for you support.
Josir.
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
Jump To: