directshow生成图片解决方法

directshow生成图片
HRESULT   SnapStill()
{
HRESULT   hr;

long   cbBuffer   =   0;
hr   =   pGrabber-> GetCurrentBuffer(&cbBuffer,   NULL);
if(FAILED(hr))   return   E_FAIL;

char   *pBuffer   =   new   char[cbBuffer];
if   (!pBuffer)   {
//   Deal   Out   of   memory.   Return   an   error   code.
}
hr   =   pGrabber-> GetCurrentBuffer(&cbBuffer,   (long*)pBuffer);
if(FAILED(hr))   return   E_FAIL;

//生成Bitmap
AM_MEDIA_TYPE   mt;
hr   =   pGrabber-> GetConnectedMediaType(&mt);
if   (FAILED(hr))   return   E_FAIL;

VIDEOINFOHEADER   *pVideoHeader   =   (VIDEOINFOHEADER*)mt.pbFormat;
if(pVideoHeader==NULL)   return   E_FAIL;

BITMAPINFO   BitmapInfo;
ZeroMemory(&BitmapInfo,   sizeof(BitmapInfo));
CopyMemory(&BitmapInfo.bmiHeader,   &(pVideoHeader-> bmiHeader),   sizeof(BITMAPINFOHEADER));

HBITMAP   hBitmap;
hBitmap   =   ::CreateDIBitmap(::GetDC(NULL),   &(pVideoHeader-> bmiHeader),   CBM_INIT,   pBuffer,   &BitmapInfo,   DIB_RGB_COLORS);

if(hBitmap==NULL)   return   E_FAIL;
**************************************************************
在这里就返回了,CreateDIBitmap有什么错误的地方吗?
******************************************************************

CString   strSaveFileName= " ";
CFileDialog   filedlg(FALSE,_T( "bmp "),_T( " "),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T( "BMP(*.bmp) "));
if(filedlg.DoModal()==IDOK){
strSaveFileName=filedlg.GetPathName();
SaveBitmapToFile(hBitmap,strSaveFileName.GetBuffer(0));
}

return   hr;
}

------解决方案--------------------
给你看看我的代码:
m_bmi.bmiHeader.biSizeImage = lBufferSize;

HWND hDesk = GetDesktopWindow();
HDC hDC = GetDC(hDesk);
HBITMAP hBmp = CreateDIBitmap(hDC, &m_bmi.bmiHeader, CBM_INIT, pBuffer, &m_bmi, DIB_RGB_COLORS);
if(hBmp)
{
.............
DeleteObject(hBmp);
}
else
{
DWORD dwErr = GetLastError();
.............
}

ReleaseDC(hDesk, hDC);
============
其中m_bmi事先做了如下初始化:
memset(&m_bmi, 0, sizeof(m_bmi));
m_bmi.bmiHeader.biSize = sizeof(m_bmi.bmiHeader);
m_bmi.bmiHeader.biPlanes = 1;
m_bmi.bmiHeader.biBitCount = 24;
m_bmi.bmiHeader.biWidth = nWidth;
m_bmi.bmiHeader.biHeight = nHeight;