DelphiTwain:如何知道进纸器的扫描已完成
我正在使用TDelphiTwain组件进行扫描。当我从进纸器开始扫描时,所有扫描都同步执行,当新图像可供处理时,会触发OnTwainAcquire事件。但我找不到如何检查所有冲洗液的扫描是否已经完成。当进纸盘为空时,扫描停止,如果我将新纸张放入进纸器,它将不处理。 所以我需要知道它已经完成,我可以处理接收到的图像。 我可以检查进纸器是否是空的,但我很容易(用我的检查)错过托盘是空的那一刻,所以应用程序会认为新图像即将出现,但它们不会。 我想应该有这样的任务的事件(StartSession/StopSession),但我找不到它 在代码中,它如下所示:DelphiTwain:如何知道进纸器的扫描已完成,delphi,twain,Delphi,Twain,我正在使用TDelphiTwain组件进行扫描。当我从进纸器开始扫描时,所有扫描都同步执行,当新图像可供处理时,会触发OnTwainAcquire事件。但我找不到如何检查所有冲洗液的扫描是否已经完成。当进纸盘为空时,扫描停止,如果我将新纸张放入进纸器,它将不处理。 所以我需要知道它已经完成,我可以处理接收到的图像。 我可以检查进纸器是否是空的,但我很容易(用我的检查)错过托盘是空的那一刻,所以应用程序会认为新图像即将出现,但它们不会。 我想应该有这样的任务的事件(StartSession/Sto
procedure TFormDemo.FormShow(Sender: TObject);
begin
Twain := TTwainScanner.Create;
Twain.OnTwainAcquire := Acquire;
Twain.Source[SelectedDevice].SetFeederEnabled(True);
Twain.Source[SelectedDevice].Enabled := True; // start
end;
procedure TFormDemo.Acquire(Sender: TObject; const Index: Integer;
Bitmap: TBitmap; var Cancel: Boolean);
begin
// some processing
Cancel := False;
end;
我也捕捉到了一个AcquireProgress事件,但这是当前图像扫描的进度,知道扫描何时停止并没有帮助
更新:我几乎找到了解决方案。当TTwainSource完成TWAIN事件的处理时,它会为TTwainSource设置ENABLED=false。不幸的是,在OnTwainAcquire内部,它仍然是真的,后来它变成了假的,并且没有我可以检查它的事件。就像解决方法一样,我可以通过定时器来检查。我在这里使用了DelphiTwain
作者同意添加新事件,因此使用更新版本的库问题得以解决。我发现了无法再测试的旧代码:Twain.Source[x].EnableSource(True,True);当Twain.Source[x]启用do Application.ProcessMessages时;当while循环结束时,您知道扫描已经完成。这不是一个最佳策略,但可以解决您的问题。您可以改为编写一个计时器来检查源是否仍然处于启用状态,或者将整个进程放入一个线程中,以避免使用Application.ProcessMessages。