mfc运用opencv可以打开摄像头但无法显示图像求高手解惑,该如何处理

mfc运用opencv可以打开摄像头但无法显示图像求高手解惑
源代码如下:
void CMyDlg::OnDakai()
{
UpdateData();

capture = cvCaptureFromCAM(0);//capture是cvCapture类型
if(!capture)
  {
AfxMessageBox("设备打开失败!");
  }

SetTimer(1,30,NULL);
}

void CMyDlg::OnGuanbi() 
{
KillTimer(0);


}
void CMyDlg::OnTimer(UINT nIDEvent) 
{
         UpdateData();
   
                           CDC* pDC = GetDlgItem( IDC_XIANSHI ) ->GetDC();        // 获得显示控件的 DC
HDC hDC = pDC ->GetSafeHdc();                // 获取 HDC(设备句柄) 来进行绘图操作
CRect rect;
GetDlgItem(IDC_XIANSHI) ->GetClientRect( &rect );
IplImage* frame;
          CvvImage img;


frame=cvQueryFrame( capture);
img.CopyOf(frame,10);                           
  img.DrawToHDC(hDC, &rect );
ReleaseDC( pDC );
// 将图片绘制到显示控件的指定区域内
CDialog::OnTimer(nIDEvent);


}
请各位大虾帮帮小弟,是不是程序错了?该怎么改?
------解决方案--------------------
在OPENCV、SAMPLES/C/下有实例
------解决方案--------------------
摄像头无图像这是2.2版本的一个已知Bug,已经被修改到其对应分支上,但是官网上发布的文件包并没有包含这个修改。
因此只要手动修改这个bug对应的代码,问题便可解决。需要修改的文件位置:  $(OpenCV Folder)\modules\highgui\src\precomp.hpp
找到如下代码:
#if !defined WIN32 && !defined _WIN32
#include "cvconfig.h"
#else
void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );
#endif
将其修改为:
#include "cvconfig.h" 
#if defined WIN32 
------解决方案--------------------
 defined _WIN32 
void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin ); 
#endif 
重新编译OpenCV代码后即可正常打开摄像头。
------解决方案--------------------
在OnTimer里面,img.CopyOf(frame,10) 这一行,第二个参数不对吧,
这个应该是对应的通道数,改成frame->nChannels试试

还有,ReleaseDC( pDC ),这个需要释放吗,不用吧,不许要每次都是放吧,注释掉试试