我需要找到一种万无一失的方法,使用Delphi XE使用网络摄像头拍摄快照并将其另存为图片文件。有很多关于此的帖子,但它们都不适合我。要么代码不能编译,要么不创建图像。目前为止最好的一个是this one使用VFrame。它完美地显示了网络摄像头视频,但当我尝试使用下面的代码将快照保存到bmp时,图像为空白。我尝试将其分配给具有相同结果的TImage。有谁知道为什么会发生这种情况或有更好的方法来做到这一点?
procedure TForm1.Button2Click(Sender: TObject);
var
cam:TVideoImage;
strlst:TStringList;
BMP:TBitmap;
begin
strlst := TStringList.Create ;
cam :=TVideoImage.Create;
cam.GetListOfDevices(strlst);
cam.VideoStart(strlst.Strings[0]); //specify a cam by number
//get snapshot
BMP := TBitmap.Create;
cam.GetBitmap(BMP);
BMP.SaveToFile('C:\test.bmp');
cam.VideoStop;
BMP.Free;
end;
答案 0 :(得分:0)
我认为你应该看一下DirectX,我想你应该看看这个网站:
http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample
此页面提供了在Windows下使用网络摄像头的绝佳方式,它非常可靠,并允许您设置任何凸轮属性。它的所有开源,易于使用,并基于本机Windows DirectX库。
使用此示例:
这是由michael@grizzlymotion.com制作的对pascal的directX转换
将VSample.pas和VFrames.pas添加到您的项目中
uses VFrames;
procedure TForm6.Button1Click(Sender: TObject);
var
cam:TVideoImage;
strlst:TStringList;
begin
strlst := TStringList.Create ;
cam := TVideoImage.Create;
cam.GetListOfDevices(strlst);
cam.SetDisplayCanvas(PaintBox1.Canvas);
cam.VideoStart(strlst.Strings[0]) ;//specify your cam by number
end;
或者你可以看一下:http://sourceforge.net/projects/webcam-cap/它使用AVICAP32.DLL的纯API调用