为了从摄像头中捕获对象,添加了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;
程序几乎是照抄那个提供的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;
解决方案 »
- delphi动态数组
- 串口通信:我做了一个串口通信程序单机测试没问题(收发数据都行),但是两台电脑通信就不行了。
- 郁闷了好长时间了,能帮我分析分析吗?
- 怎样让Delphi写出小体积的程序,如某些Delphi病毒?
- 这个问题真的要高手来解决了!!!
- 怎么让mediaplay插件播放自己做的视频服务器上的视频流?(分数可以再加!)
- 盐城的编程爱好者到此留言
- 关于memo控件里放其它控件(如Radiogroup)?
- 如果我想学好数据库编程应该买什么书?请推荐,谢谢。
- 关于动态报表的问题——————————————————————————
- hongqi162大哥!再请教鼠标事件的问题!
- 数据导出到Excel
首先把TAcquireImag加入到自定义的包中.
这时在你的组件框最后面有多一个other的卡片
再把TAcquireImage所在的路径加入了library path
.你再试一下你的程序是否可行.
我试了是可以