我的笔记本有一个内置摄像头,另外用一个USB摄像头做程序,VFW用的不好,现在有一个问题就是开启程序,sendmessage connect 的时候都要弹出选择视频源的对话框,选择后摄像头也不能用,但拔插一次摄像头就不会弹出对话框使用也正常,下一次又有问题了,所以现在每运行一次都要拔插一次摄像头,是怎么回事呢?程序退出时disconnect了,也尝试过禁用内置摄像头,不管用,可是另一台电脑上就没有这个问题

解决方案 »

  1.   

    有的摄像头提供 VFW 接口,有的又不提供此接口,这要根据具体的硬件而定。
    但通常用 DirectShow 通过设备驱动都能访问到设备。
    如果你确定你的设备支持 VFW 接口,那么可以参考一下过程来操作摄像头:
    http://blog.csdn.net/SupermanKing/archive/2008/11/02/3207341.aspx
    这个范例要注意的是图像采集部分没有进行色彩系统的处理,默认用RGB色彩系统,
    现在市场上很多的设备都用 YUY2 色彩系统的,可能要稍微处理一下。如果你的是RGB的设备,
    那就直接可以用了。
    如果想通用性强一点,建议使用 DirectShow 技术来处理,在 DirectX SDK 中有使用范例。
    如果你用的是 Visual Studio 6 系列的开发环境,建议下载 DirectX 8.1 的 SDK 就可以了,
    DirectX 9 以上的 SDK .net 的范例较多 
      

  2.   

    640 * 480 的图像你要变成1:1 你要变为胖子还是变为瘦子? 维持4:3 依比例缩小才是正道可以用一个PictureBox 使用 Picture2.PaintPicture '(照相的图片,使用4:3 再缩小)'*********************************************
    Private Declare Function PrintWindow Lib "user32" (ByVal Hwnd As Long, ByVal HDC As Long, ByVal nFlags As Long) As Long使用一个PictureBox 命名为 Picture1
    Set Picture2.Container = Picture1
    x1=(picture1.width-picture2.width)\2
    y1=(picture1.height-picture2.height)\2
    picture2.move x1,y1
    Picture1.print "aaaaaa"
    Picture1.print "bbbbb"'PrintWindow到Picture3
    PrintWindow Picture1.Hwnd, Picture3.HDC, 0
    Printer.PaintPicture Picture3.Image, (Printer.ScaleWidth - Picture3.Width) \ 2, 0, Picture3.Width, Picture3.Height  
    Printer.EndDoc
      

  3.   

    谢谢回复,虽然2L答非所问o(╯□╰)o 不过没有解决问题啊VFW连接时应该怎么写才能确认连上了摄像头呢?
      

  4.   

    Private Sub Picture1_Change()事件里判断一下是否发生了该事件,发生了就是连上了
      

  5.   

    用 capDriverConnect 就可以判断连接是否成功呀,你没看我给你的代码吗?
      

  6.   

    谢谢 问题解决了,win7下得循环driverconnect才行