在下利用'AVICAP32.DLL'写视频采集程序,但是,因基础不匝地,所以问题多多!:(
……
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_DLG_VIDEOSOURCE         = (WM_CAP_START+  42);
……
SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
……
现欲设置采集图象的大小,不知如何处理!请熟悉视频采集的道兄们赐教!
一有答案,即刻揭贴!!!3X

解决方案 »

  1.   

    capCreateCaptureWindowA函数里面不是有个宽度高度嘛..你或者先捕捉图片,然后再放大嘛
      

  2.   

    是有,
    hWndC := capCreateCaptureWindowA('Vidcap',
                        WS_CHILD or WS_VISIBLE , //窗口样式
                        Panel1.Left,             //X坐标
                        Panel1.Top,              //Y坐标
                        Panel1.Width,            //窗口宽
                        Panel1.Height,           //窗口高
                        FrmVedioCap.Handle,      //窗口句柄
                        0);
      handle_integer:=SendMessage(hwndc, WM_CAP_DRIVER_CONNECT, 0, 0);
    但是,设置的是窗口的大小而不是采集的图象的大小!
    我是想如何调出视频格式设置对话框,
    就象SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
    调出视频源对话框一样!
      

  3.   

    这样吧
    因为我前不久才做了视频抓图和录象的代码
    写出来大家共享
    ================================
    首先
    用capCreateCaptureWindowA创建句柄
    var
      ghCapWnd:HWND;function capCreateCaptureWindowA(lpszwindowname:pchar;dstyle:longint;x:integer;y:integer;nwidth:integer;
                                      Nheight:integer;parentwin:HWND;nid:integer):HWND; stdcall external 'AVICAP32.dll';
    ///
    function StartCap(VideoWind:TPanel):boolean;export;
    begin
      StartCap := false;
      ghCapWnd:=CapCreateCaptureWindowA(Pchar('QingHuntSoft'),
                                        WS_CHILD or WS_VISIBLE,
                                        0,
                                        0,
                                        VideoWind.Width,
                                        VideoWind.Height,
                                        VideoWind.Handle,
                                        10);
       if ghCapWnd<>0 then
       try
         SendMessage(ghcapwnd,WM_CAP_DRIVER_CONNECT,0,0);
         sendmessage(ghcapwnd,WM_CAP_SET_SCALE,1,1);
         sendmessage(ghcapwnd,WM_CAP_SET_PREVIEWRATE,1,1);
         sendmessage(ghcapwnd,WM_CAP_SET_OVERLAY,1,0);
         sendmessage(ghcapwnd,WM_CAP_SET_PREVIEW,1,1);
         StartCap := true;
       Except
         StartCap := false;
         Abort;
       end;
    end;
    ========================================
    开始录象
    procedure SaveCap(SavePath:string);export;
    var
      Year, Month, Day, Hour, Min, Sec, MSec: Word;
      CapParms: PCaptureParms;
      Present: TDateTime;
      PathStr,MM,DD,HH:string;
      CapFileName:String;
    begin
      CapFileName:='Movie.Avi';
      if GhcapWnd<>0 then
       begin
         CapCaptureGetSetup(ghCapWnd,CapParms,sizeof(TCAPTUREPARMS));
         CapParms.fLimitEnabled := false;
         CapParms.fYield := TRUE;
         CapParms.vKeyAbort := VK_ESCAPE;
         CapParms.fAbortLeftMouse := FALSE;
         CapParms.fAbortRightMouse := FALSE;
         CapCaptureSetSetup(ghCapWnd,CapParms,sizeof(TCAPTUREPARMS));
         sendmessage(ghcapwnd,WM_CAP_FILE_SET_CAPTURE_FILE,0,Longint(Pchar(PathStr+'\'+Capfilename)));
         sendmessage(ghcapwnd,WM_CAP_SEQUENCE,0,0);
       end;
    end;
      

  4.   

    ================
    抓图
    rocedure SaveCapImage(path:string);export;
    begin
      if ghCapWnd<>0 then
      begin
        Sendmessage(ghCapWnd,WM_CAP_FILE_SAVEDIB,0,Longint(Pchar(path)));
      end;
    end;
      

  5.   

    现在不用vfw了,用dxshow来做视频处理程序了。
      

  6.   

    视频格式对话框也可以用消息来显示啊。WM_CAP_DLG_VIDEOFORMAT不行吗?
      

  7.   

    vfw确实不好,用dspack开发好了
      

  8.   

    vfw确实不好,用dspack开发好了
    两种感觉差不多 
    但是好像dspack要简单些