我希望能够使用vfw.h库显示从我的网络摄像头捕获的帧。我有捕获单个帧并将其保存到位图文件的代码。但是,我不知道如何在窗口中显示这个位图文件。我只知道如何在窗口中显示实时视频源。对于这个问题的可能显而易见的提前道歉,但我在这种类型的编程经验很少。有没有人可以建议我如何在另一个窗口中显示捕获的帧,以便进一步操作,即如何使用相关宏的示例?我在Visual Studio中使用C++。
ShowWindow(camhwnd,SW_SHOW);
SendMessage(camhwnd,WM_CAP_DRIVER_CONNECT,0,0);
SendMessage(camhwnd, WM_CAP_SET_SCALE, true , 0);
SendMessage(camhwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(camhwnd, WM_CAP_SET_PREVIEW, true , 0);
SendMessage(camhwnd, WM_CAP_GRAB_FRAME, 0, 0);
//Grab a Frame
SendMessage(camhwnd, WM_CAP_GRAB_FRAME, 0, 0);
//Copy the frame we have just grabbed to the clipboard
SendMessage(camhwnd, WM_CAP_EDIT_COPY,0,0);
//Copy the clipboard image data to a HBITMAP object called hbm
hdc = BeginPaint(camhwnd, &ps);
hdcMem = CreateCompatibleDC(hdc);
if (hdcMem != NULL)
{
if (OpenClipboard(camhwnd))
{
hbm = (HBITMAP) GetClipboardData(CF_BITMAP);
SelectObject(hdcMem, hbm);
GetClientRect(camhwnd, &rc);
CloseClipboard();
}
}
//Save hbm to a .bmp file called Frame.bmp
PBITMAPINFO pbi = CreateBitmapInfoStruct(hwnd, hbm);
CreateBMPFile(hwnd, "Frame.bmp", pbi, hbm, hdcMem);
SendMessage(camhwnd,WM_CAP_DRIVER_CONNECT,0,0);
SendMessage(camhwnd, WM_CAP_SET_SCALE, true , 0);
SendMessage(camhwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(camhwnd, WM_CAP_SET_PREVIEW, true , 0);
break;
}
}
break;
}发布于 2014-12-18 19:46:54
要显示位图,首先要创建一个“已处理”的位图对象,这会导致您持有HBITMAP值,API接受这些值以进行进一步的操作,然后实际显示它。
第一步是使用CreateBitmap和朋友实现的。
在第二个页面上,请参见Displaying HBITMAP。
https://stackoverflow.com/questions/26896915
复制相似问题