本人用下方法希望从摄像头中获取视频,并希望能从中截取图像!结果以失败告终,请高手指点迷经:)
   本人查明得原因是,capDriverConnect(m_hCapWnd,0)) 返回0,所以没有执行if中得代码!请问还有其他什么办法能够从摄像头中获取视频??
   急!急!急!急!急!急!急!急!急!
   m_hCapWnd:Hwnd;procedure TForm1.create(Sender: TObject);  // 视频扑获处理
var
   dwSize:Integer;
   setBmp : BITMAPINFO ;
begin   
   try
      m_hCapWnd:=capCreateCaptureWindow('',
        WS_CHILD or WS_VISIBLE,0,0,AviPanel.width,AviPanel.height,AviPanel.Handle,0);
                              //avipanel 就是你要显示的视频窗口的;可以是form ,panel等
                   //AviPanel.width就是显示的宽度,AviPanel.height显示的高度;
      if(capDriverConnect(m_hCapWnd,0)) then
      begin
        // capOverlay(m_hCapWnd,true);   //普通的摄像头不能用overlay的方式 主意;
         capPreviewRate(m_hCapWnd,30);  //设置帧率为30
         capPreview(m_hCapWnd,true);    // preview方式显示
         dwSize:=capGetVideoFormatSize(m_hCapWnd);   
         capGetVideoFormat(m_hCapWnd,@setBmp, dwSize);
         setBmp.bmiHeader.biWidth:=352;    //这个就是设置你捕捉图片的大小了 宽度 :)
         setBmp.bmiHeader.biHeight:=288; //这个就是设置你捕捉图片的大小了 高度 :)
         capSetVideoFormat(m_hCapWnd,@setBmp,dwSize);  
      end;
   except
   end;
end;procedure Tform1.capbmp;
begin
      capEditCopy(m_hCapWnd);   //把图像拷到剪贴板
      Image1.picture.bitBmp.LoadFromClipboardFormat(CF_BITMAP,Clipboard.GetAsHandle(CF_BITMAP), 0);
     // 这时在image1里面的就是你需要的图片;
end;procedure TForm1.close(Sender: TObject; var Action: TCloseAction);// 视频扑获处理
begin
    capDriverDisconnect(m_hCapWnd);// vfw 里面的标准函数
end;

解决方案 »

  1.   

    不懂,帮你顶啊,可以用dspack组建包,很方便
      

  2.   

    这里有个例子http://www.delphibox.com/article.asp?articleid=1179标 题:videocap (摄像头程序) 
    关键字:video avi cap 摄像头 视频 vfw 
    http://www.delphibox.com/article.asp?articleid=272标 题:MTPlay V1.0 摄像头视频捕捉程序 
    关键字:MTPlay V1.0 摄像头 视频捕捉 抓图 录像 字幕 DSPack 
      

  3.   

    这里有个例子http://www.delphibox.com/article.asp?articleid=1179标 题:videocap (摄像头程序) 
    关键字:video avi cap 摄像头 视频 vfw 
    http://www.delphibox.com/article.asp?articleid=272标 题:MTPlay V1.0 摄像头视频捕捉程序 
    关键字:MTPlay V1.0 摄像头 视频捕捉 抓图 录像 字幕 DSPack 
      

  4.   

    我给你改了改程序,代码如下程序运行成功,别忘uses avicap;unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls,AviCap;type
      TForm1 = class(TForm)
        avipanel: TPanel;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    function capCreateCaptureWindowA(lpszWindowName : PCHAR;
    dwStyle : longint;
    x : integer;
    y : integer;
    nWidth : integer;
    nHeight : integer;
    ParentWin : HWND;
    nId : integer): HWND;
    STDCALL EXTERNAL 'AVICAP32.DLL';
    {$R *.DFM}const WM_CAP_START = WM_USER;
    const WM_CAP_STOP = WM_CAP_START + 68;
    const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
    const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
    const WM_CAP_SAVEDIB = WM_CAP_START + 25;
    const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
    const WM_CAP_SEQUENCE = WM_CAP_START + 62;
    const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
    const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+  63 ;
    const WM_CAP_SET_OVERLAY =WM_CAP_START+  51 ;
    const WM_CAP_SET_PREVIEW =WM_CAP_START+  50 ;
    const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;
    const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;
    const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;
    const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
    const WM_CAP_SET_SCALE=WM_CAP_START+  53 ;
    const WM_CAP_SET_PREVIEWRATE=WM_CAP_START+  52 ;
    const WM_CAP_DLG_VIDEOCOMPRESSION=(WM_CAP_START+  46);procedure TForm1.FormCreate(Sender: TObject);
    var
       dwSize:Integer;
       setBmp : BITMAPINFO ;
       m_hcapwnd:word;
    begin   
       try
          m_hCapWnd:=capCreateCaptureWindowA('',
            WS_CHILD or WS_VISIBLE,0,0,AviPanel.width,AviPanel.height,AviPanel.Handle,0);
                                  //avipanel 就是你要显示的视频窗口的;可以是form ,panel等
                       //AviPanel.width就是显示的宽度,AviPanel.height显示的高度;
          if(capDriverConnect(m_hCapWnd,0))<>0 then
          begin
            // capOverlay(m_hCapWnd,true);   //普通的摄像头不能用overlay的方式 主意;
             capPreviewRate(m_hCapWnd,30);  //设置帧率为30
             capPreview(m_hCapWnd,1);    // preview方式显示
             dwSize:=capGetVideoFormatSize(m_hCapWnd);   
            // capGetVideoFormat(m_hCapWnd,@setBmp,dwSize);
             setBmp.bmiHeader.biWidth:=352;    //这个就是设置你捕捉图片的大小了 宽度 :)
             setBmp.bmiHeader.biHeight:=288; //这个就是设置你捕捉图片的大小了 高度 :)
           //  capSetVideoFormat(m_hCapWnd,@setBmp,dwSize);
          end;
       except
       end;
    end;
    end.
      

  5.   

    http://soft.56kc.com/FileDown.aspx?FID=46
      

  6.   

    表1 VFW功能模块
    模  块 功      能
    AVICAP.DLL 包含执行视频捕获的函数,它给AVI文件的I/O处理和视频、音频设备驱动程序提供一个高级接口
    MSVIDEO.DLL 包含一套特殊的DrawDib函数,用来处理屏幕上的视频操作
    MCIAVI.DRV 包括对VFW的MCI命令解释器的驱动程序
    AVIFILE.DLL 包含由标准多媒体I/O(mmio)函数提供的更高的命令,用来访问.AVI文件
    ICM 压缩管理器,用于管理的视频压缩/解压缩的编译码器(Codec)
    ACM 音频压缩管理器,提供与ICM相似的服务,适用于波形音频
      

  7.   

    http://soft.56kc.com/FileDown.aspx?FID=77
      

  8.   

    http://soft.56kc.com/FileDown.aspx?FID=417