为了从摄像头中捕获对象,添加了TAcquireImage控件,跳出设备选择框选择设备之后整个程序就莫名终止了,连finally的函数都没执行.
程序几乎是照抄那个提供的demo,那个demo是可以正常运行的,不过我没编译过demo程序,下载下来就带了exe文件的,难道是Delphi版本的原因?
procedure TMainfrm.acFromCameraExecute(Sender: TObject);
var
  i: Integer;
  aBmp: TBitmap;
  s: String;
  flag: Boolean;
begin
  if AcquireImage1.loadTwainModule then
  begin
    aBmp:= TBitmap.Create;
    try
      AcquireImage1.openSourceManager;
      s:= AcquireImage1.GetSource(false);
      AcquireImage1.SelectSource(s);          //这里都还正常的
      AcquireImage1.OpenSource;               //执行到这儿就不执行了,整个应用程序结束
      AcquireImage1.acquirebmp(aBmp);
      aBmp.SaveToFile('C:/111.bmp');
      flag:=true;
    finally
      AcquireImage1.closeTwainSession;        //这后面的都没有执行
      AcquireImage1.unloadTwainModule;
      aBmp.Free;
    end;
  end
  else showMessage('Error to load TWAIN_32.DLL');
end;
作为对照,我把demo的相关程序也贴出来
procedure TfrmMail.BtnScanClick(Sender: TObject);
var
  ListItem: TListItem;
  FileInfo: TSHFileInfo;
  Icon: TIcon;
  cPCnt, picname: string;
  jpg: TJpegImage;
  flag: boolean;
  s: string;
begin
  flag:=false;
  if AcquireImage1.loadTwainModule then begin
    try
      AcquireImage1.openSourceManager;
      s:=AcquireImage1.GetSource(false);
      AcquireImage1.selectSource(s);
      AcquireImage1.openSource;
      AcquireImage1.acquirejpg(jpg,50);
      flag:=true;
    finally
      AcquireImage1.closeTwainSession;
      AcquireImage1.unloadTwainModule;
    end;
  end
  else showMessage('Error to load TWAIN_32.DLL');
  ....
  ....
end;

解决方案 »

  1.   

    有谁在D7下用过TAcquireImage么~~~还请指导指导啊
      

  2.   

    摄相头图像捕获另存为AVI电影或BMP图片。纯代码实现,我给你,不用控件。用控件的话不会。
      

  3.   

    试过了,还是会自动关闭的。发现个奇怪的问题,调试的时候会自动关闭,但如果直接打开编译完的exe文件又是正常的
      

  4.   

    好啊,那真是万分感谢了,要是不方便发这儿的话可以发到我邮箱么[email protected]
      

  5.   

    好啊,那真是万分感谢了,要是不方便发这儿的话可以发到我邮箱么[email protected]
      

  6.   

    这个问题.我试了一下.楼主的代码不会错..可以运行也可以调试.发表一下浅见..
    首先把TAcquireImag加入到自定义的包中.
    这时在你的组件框最后面有多一个other的卡片
    再把TAcquireImage所在的路径加入了library path
    .你再试一下你的程序是否可行.
    我试了是可以