如何将LPVIDEOHDR-〉lpData中的位图数据显示出来?VFW
我用VFW实现,但是这种回调函数应该怎么取得bmp的图像数据,显示在IDC_PIC控件中?
我这个函数写的有点乱,本来想手工构造一个BITMAP结构,但是可能那个数据区指针用的有问题,现在的现象是黑色的图片。
我不想保存bmp格式文件,只要能把这个位图数据放在memDC中,能显示就可以了,该怎么做呢?
LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR pVideoHdr)
{
CBitmap mBitmap; //定义一个位图类
CDC* pDC; //绘图设备
CRect rect, picRect; //矩形区域对象
CWnd *pWnd; //得到图片框的窗口指针
CDC memDC; //兼容DC
HBITMAP bmpDisplay;
BITMAP bmp;
TRACE("Begin to Frame!\r\n");
//HWND hWnd;
//CWnd* pWnd;
//pWnd=GetDlgItem(IDC_VIDEOTWO);
//hWnd=pWnd->GetSafeHwnd();
//获得捕获窗的状态
//capGetStatus(hWndCap, &CapStatus, sizeof(CAPSTATUS));
bmp.bmType = 0;
bmp.bmWidth = 0x140;//CapStatus.uiImageWidth;
bmp.bmHeight = 0xf0;//CapStatus.uiImageHeight;
bmp.bmWidthBytes = 0x3c0;
bmp.bmPlanes = 0x01;
bmp.bmBitsPixel = 0x18;
bmp.bmBits = pVideoHdr->lpData;
bmpDisplay = CreateBitmapIndirect(&bmp);
//CString szFileName;
//CString temp;
//temp.Format("%.2d",i);
//szFileName = "D:\\MyProject\\MyVideo\\MyVideo0" + temp + ".bmp";
//szFileName = "D:\\MyProject\\MyVideo\\MyVideo001.bmp";
pWnd = AfxGetMainWnd();
pWnd= pWnd->GetDlgItem(IDC_PIC); //取得控件句柄
//bmpDisplay = (HBITMAP)LoadImage(NULL, szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
mBitmap.Attach(bmpDisplay); //装入位图对象
//mBitmap.GetBitmap (&bm); //用位图上的信息 填充BITMAP结构的各个域
//mBitmap.LoadBitmap(bm);
//根据位图的大小改变窗口的大小
pWnd->SetWindowPos(NULL,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE);
//在内存中生成一个兼容设备,然后拷贝到屏幕显示
pDC = pWnd->GetDC(); //取得绘图设备
memDC.CreateCompatibleDC(pDC);//生成一个兼容设备
memDC.SelectObject (&mBitmap);//在兼容设备中装载位图
Sleep(250);
//显示
pWnd->GetClientRect(&rect); //得到控件窗口的"视"区域
//pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
//释放申明的资源
pWnd->ReleaseDC(pDC);
DeleteDC(memDC);
mBitmap.Detach();
DeleteObject(mBitmap);
return (LRESULT) TRUE;
}