通过capGetVideoFormat来设置采集的参数,
bmpinfo.bmiHeader.biWidth=  176;
bmpinfo.bmiHeader.biHeight= 144;
然后capSetVideoFormat保存.
可以获得176x144的图片,也能正常预览.停止摄像头,再打开时,设置上面两个参数为352x288.
就会报错.
断点指在RunModalLoop函数内.如果不理这个错误,重新运行程序.再直接获取352x288的也正常.
切换到176x144,大部分时候也正常.偶尔会报和上面一样的错误.但从176x144切换到352x288肯定会报错.切换的方法是,先停止捕获,发消息让窗口关闭.
通过一个参数来控制赋不同的值.郁闷了好久了,麻烦各位指出哪里有问题?

解决方案 »

  1.   

    看看这个,或许有帮助:
    http://dev.csdn.net/article/74/74565.shtm
      

  2.   

    ~,看过了,基本上就是照着那个写个的.文章里面有段话看的不是很明白.不知道和我这个问题有没有关系.但我采集参数的设置,应该和预览窗口的大小没有关系的,这个允许拉伸,发个消息就可以了.
    断点指在RunModalLoop函数内,捕获窗口的消息循环哪出问题了?父子窗体交付       一些系统级的消息,比如 WM_PALETTECHANGED、WM_QUERYNEWPALETTE,只被发送到顶层(top-level)和overlapped窗口。如果一个捕获窗体是一个资窗体,那它的父窗口应该来转寄这些消息。       同样地,假如父窗口尺寸改变了,它可能需要发送一个通知消息给捕获窗口。相反,如果捕获视频尺寸变化了,捕获窗口可能需要发一个通知消息给父窗口。最简单的管理方法是让捕获窗口的尺寸等于捕获视频流的尺寸,随时把改变的尺寸告诉给父窗口。
      

  3.   

    我告诉你问题出在哪吧,你少改了一个参数:biSizeImage,按下面的写就好了
    bmpinfo.bmiHeader.biWidth= 176;
    bmpinfo.bmiHeader.biHeight= 144;
    bmpinfo.bmiHeader.biSizeImage=(double)176*(double)144*(double)3;另外,VFW已经过时了,现在已被DirectShow代替