高手们:
本人现在要用VFW编写一个小程序用于控制摄像头定时拍摄一幅bmp,然后在内存中对这张bmp进行数据处理。
但是本人遇到了困难。就是capDriverConnect连接到摄像头后,也能够读取驱动的名字,定时读取一次剪贴板放到bmp结构中,OnPaint后发现竟然是一片绿色。请问我究竟连接到摄像头没有?为什么摄像头不工作呢?
以下是我的连接源代码和OnPaint源代码,请问哪位高手能够帮我找一下原因。
如果实在没救,能否给一个可行的程序,只要简单读到数据放到内存CBitmap对象中就可以了。
void CLightIIDlg::OnBnClickedStart()
{
// TODO: 在此添加控件通知处理程序代码
CAPDRIVERCAPS gCapDriverCaps;
TCHAR szDeviceName[80];
TCHAR szDeviceVersion[80];
TCHAR szDeviceInfo[100];
hWndC=capCreateCaptureWindow(L"Capture Window",WS_CHILD|WS_DLGFRAME,
m_rect.TopLeft().x,m_rect.TopLeft().y,320,240,GetSafeHwnd(),1);
if(hWndC)
{
capDriverConnect(hWndC,0);
capGetDriverDescription(0,szDeviceName,sizeof(szDeviceName),szDeviceVersion,sizeof(szDeviceVersion));
lstrcpy(szDeviceInfo,szDeviceName);
lstrcat(szDeviceInfo,szDeviceVersion);
m_info.SetWindowText(szDeviceInfo);
}
else
{
AfxMessageBox(L"Error!Cannot connect to Camera.",0,0);
exit(1);
}
capDriverGetCaps(hWndC,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
capPreviewRate(hWndC,66);
capPreview(hWndC,true);
start=true;
SetTimer(1,1000,NULL);
}
OnPaint()代码:
m_bmp.GetBitmap(&bm);
dcMem.DeleteDC();
dcMem.CreateCompatibleDC(&dc);
dcMem.SelectObject(&m_bmp);
dc.StretchBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
本人现在要用VFW编写一个小程序用于控制摄像头定时拍摄一幅bmp,然后在内存中对这张bmp进行数据处理。
但是本人遇到了困难。就是capDriverConnect连接到摄像头后,也能够读取驱动的名字,定时读取一次剪贴板放到bmp结构中,OnPaint后发现竟然是一片绿色。请问我究竟连接到摄像头没有?为什么摄像头不工作呢?
以下是我的连接源代码和OnPaint源代码,请问哪位高手能够帮我找一下原因。
如果实在没救,能否给一个可行的程序,只要简单读到数据放到内存CBitmap对象中就可以了。
void CLightIIDlg::OnBnClickedStart()
{
// TODO: 在此添加控件通知处理程序代码
CAPDRIVERCAPS gCapDriverCaps;
TCHAR szDeviceName[80];
TCHAR szDeviceVersion[80];
TCHAR szDeviceInfo[100];
hWndC=capCreateCaptureWindow(L"Capture Window",WS_CHILD|WS_DLGFRAME,
m_rect.TopLeft().x,m_rect.TopLeft().y,320,240,GetSafeHwnd(),1);
if(hWndC)
{
capDriverConnect(hWndC,0);
capGetDriverDescription(0,szDeviceName,sizeof(szDeviceName),szDeviceVersion,sizeof(szDeviceVersion));
lstrcpy(szDeviceInfo,szDeviceName);
lstrcat(szDeviceInfo,szDeviceVersion);
m_info.SetWindowText(szDeviceInfo);
}
else
{
AfxMessageBox(L"Error!Cannot connect to Camera.",0,0);
exit(1);
}
capDriverGetCaps(hWndC,&gCapDriverCaps,sizeof(CAPDRIVERCAPS));
capPreviewRate(hWndC,66);
capPreview(hWndC,true);
start=true;
SetTimer(1,1000,NULL);
}
OnPaint()代码:
m_bmp.GetBitmap(&bm);
dcMem.DeleteDC();
dcMem.CreateCompatibleDC(&dc);
dcMem.SelectObject(&m_bmp);
dc.StretchBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
解决方案 »
- 老婆昨晚年会抽了个lepad,散分庆祝!
- 双缓冲问题
- 这样的界面怎么做。。。
- 形如SHBrowseForFolder的函数,是属于Platform SDK,还是和Windows版本有关的东西?
- 如何正确的在对话框里的静态控件上绘图
- 请问有没有人知道AT+CKPD=“s”等AT命令为什么返回ERROR?
- 我的整个程序只有1M多,用InstallShield打一下包变成了5M多,怎么大这么多?我只选了很常用的功能!
- 用CFile写文件,为什么系统总报"磁盘空间已满"?
- 求尺子的照片的放大倍数的算法都要哪几步?谢谢!
- 能不能同时向内存cdc的bitmap和GetDC得到的dc画图?
- AfxMessageBox 里的 提示信息如何同时支持简体,繁体中文呢?
- vc 指向结构体类型指针的长度
if(nIDEvent==1)
{
change=true;
capGrabFrame(hWndC);
capEditCopy(hWndC);
OpenClipboard();
m_hBmp=(HBITMAP)::GetClipboardData(CF_BITMAP);
CloseClipboard();
m_bmp.Detach();
m_bmp.Attach(m_hBmp);
InvalidateRect(m_rect,false);
OnPaint();
}