stillcap实现

stillcap实现过程中遇到的问题及解决方法。

实现过程参考了http://blog.csdn.net/yangpan011/article/details/52596705 。及directshow中stillcap源码。


1、头文件

IGraphBuilder需添加 dshow.h 头文件

ISampleGrabber需添加qedit.h 头文件



2、编译出现如下错误

1>wcam_grab.obj : error LNK2001: 无法解析的外部符号 _CLSID_SampleGrabber
1>wcam_grab.obj : error LNK2001: 无法解析的外部符号 _CLSID_CaptureGraphBuilder2
1>wcam_grab.obj : error LNK2001: 无法解析的外部符号 _IID_ICaptureGraphBuilder2


在链接器->输入中 :strmiids.lib  ,然后添加该lib所在路径

编译显示无法解析的外部符号:FreeMediaType()

需添加strmbasd.lib及streambasd路径


3。

m_pGrabber.CoCreateInstance()  m_pGrabber返回值为00000

需在m_pGrabber.CoCreateInstance()加

hr=CoInitialize(0);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可用来在VB,VC中驱动摄像头,进行静帧捕捉的DLL动态链接库(必须要有摄像头生成StillCap0000.bmp):将MyDll文件解压后把MyDll.dll与MyDll.lib一起拷入工程DEBUG目录中(为保险起见DEBUG的外层目录也拷贝一份吧),另有一个VC++6的测试工程test_Dll,已经考入相应DLL和LIB文件,可直接编译运行,VB只拷贝MyDll.dll与MyDll.lib VB2008 调用方法,在公共模块中声名: Public Declare Function CreateWnd Lib "MyDll" () As Double Public Declare Function ClearGraphs Lib "MyDll" () As Double Public Declare Function OnpStillCapture Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function InitStillGraph Lib "MyDll" (ByVal hwnd As Long) As Double Public Declare Function CloseWnd Lib "MyDll" () As Double 在窗体上放置2个PictureBox控件,名字为:pic1,pic2 放置三个按键:名字为Btn1,Btn2,Btn3 Btn1为打开视频,调用代码: Private Sub Btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn1.Click InitStillGraph(pic1.Handle) '打开摄像头预览视频 end sub Btn2为截取视频保存为BMP,文件保存在应用程序路径下,调用代码: Private Sub Btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn2.Click OnpStillCapture(pic2.Handle) '截取预览视频一帧图像 end sub Btn3为截取视频保存为清除内存,调用代码: Private Sub Btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn3.Click ClearGraphs() '退出前,完成内存清扫工 end sub VC调用方法: 在对话框上放置两个图像框,类型为位图,三个按键B1,B2,B3 定义全局函数引用: typedef HWND(* CreateWnd)(void);// typedef HRESULT(* InitStillGraph)(HWND hwnd); typedef void (* OnpStillCapture)(HWND hwnd); typedef int (* ClearGraphs)(); HINSTANCE glibsample; //如果定义成HANDLE类型,则出错 CreateWnd createwnd; InitStillGraph initStillGraph;//定义引用函数 OnpStillCapture onpStillCapture;//定义引用函数 ClearGraphs clearGraphs;//定义引用函数 用类向导为两个位图框建立控件(类型为Contorl)变量,m_p1,m_2 : 在窗口OnInitDialog()函数中调整图像框大小: // TODO: Add your specialized code here and/or call the base class m_p1.MoveWindow(0,0,200,200,true); m_p2.MoveWindow(210,0,200,200,true); glibsample=LoadLibrary("MyDll.dll"); //加载dll 在B1消息函数中: void 你的类::OnB1() { initStillGraph=(InitStillGraph)GetProcAddress(glibsample,"InitStillGraph"); (*initStillGraph)(m_p1.m_hWnd);//预览图像 } 在B2消息函数中: void 你的类::O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值