各位大侠,我现在使用vfw方法做个摄像头采集的程序,目前遇到点问题,望大家帮帮忙。目前我使用回调函数capSetCallbackOnFrame可以得到每一帧的数据,但是我不知道怎么将数据转换为位图显示在一个picture中,在网上找了很多资料,有人说用DrawDibDraw方法,但是不晓得为什么我的就是一直显示不出来,谢谢各位了!

解决方案 »

  1.   

    http://anqn.com/vb/153/
    你看看这里
      

  2.   

    谢谢ybh37
    你提供的网址我看了,没找到我想要的代码,里面有三个关于摄像头编程的程序,但是都没满足我的要求。
    我的程序目前可以显示摄像头捕捉到的图像,只不过我希望在另一个picture中根据回调函数得到的数据按照图片格式再一次显示出来,不知道大家明白我的意思么?
      

  3.   

    哦 看贴不认真,脑袋必发晕得到的数据按照图片格式再一次显示出来
    你的数据是YUV的吗?
    那样的话先转RGB然后加上头文件,就是BMP了
      

  4.   

    这个……
    我没有用VB写过转换算法,有VC写的DLL一个。
    另有VB调用的demo,
    注:需要将1.YUV 文件拷贝到C:盘,看一下源码你就懂的…………
    有需要,我就上传一下~~
      

  5.   

    保存为BMP文件后再读出显示在PictureBox上就可以了啊
      

  6.   


    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '过程功能:将摄像头采集来得视频图像截取一桢保存为BMP图片
    '参数说明:strFileName:保存路径
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Public Sub subSaveFrameToBMP(ByVal strFileName As String, ByVal hCapWnd As Long)
        Dim lngP As Long
        Dim bolP As Boolean
    On Error GoTo errSub
        bolP = VBGetSaveFileName(strFileName, _
                                filter:="DIB Bitmap Files (*.bmp)|*.bmp", _
                                DlgTitle:="Save Single Frame", _
                                DefaultExt:="bmp", _
                                Owner:=frmMain.hWnd)
        If bolP Then
            bolP = capFileSaveDIB(hCapWnd, strFileName)
            If Not bolP Then
                MsgBox "Problem saving frame", vbInformation, App.Title
            End If
        End If
        Exit Sub
    errSub:
    End Sub
      

  7.   

    http://download.csdn.net/source/3061683
      

  8.   

    首先谢谢ybh37和Veron_04对我提供的帮助,我之前也试过将摄像头数据保存到bmp中,能够成功。但是因为我要每100ms就实行一次这样的操作,保存到本地后又导入,这样效率就很低了,可不可以直接在内存里操作?直接将内存中的数据显示在picture中,而不需要额外的保存?
      

  9.   

    可以用 RAMDisk 之类的工具在内存中模拟一小块磁盘,这样通过“文件”导入导出的效率就没有问题了。
      

  10.   

    这个就得看这个函数的说明,这个每帧数据的格式是什么。
    然后可以利用API向指定PICTUREN绘图DEVICE绘图,把你收到的每帧数据(存在于内存中)对应的内存数据区作为一个设备绘图的数据区,整体绘到PICTURN上。就可以显示了。
    具体的API和步骤,想不起来了,你查查VB的API绘图例程,拼合一下就成了。
    关键是第一步,先搞清楚每帧数据的格式是什么,看看是可以直接使用还是需要转换格式。