Delphi网络摄像头快照

时间:2014-09-27 03:32:42

标签: delphi webcam directshow snapshot

我需要找到一种万无一失的方法,使用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;

1 个答案:

答案 0 :(得分:0)

我认为你应该看一下DirectX,我想你应该看看这个网站:

http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample

此页面提供了在Windows下使用网络摄像头的绝佳方式,它非常可靠,并允许您设置任何凸轮属性。它的所有开源,易于使用,并基于本机Windows DirectX库。

使用此示例:

http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample/DirectXDelphiWebcamCapture.rar

这是由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调用