0

我希望能够使用 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;
}
4

1 回答 1

0

要显示位图,您首先创建一个“已处理”位图对象,这会产生 API 接受进一步操作的持有HBITMAP值,然后实际显示它。

第一步是实现使用CreateBitmap和朋友。

在第二个部分,请参阅显示 HBITMAP

于 2014-12-18T11:46:53.690 回答