Требуется код начального уровня для отображения кадра с помощью vfw?

Я хочу иметь возможность отображать захваченный кадр с моей веб-камеры с помощью библиотеки vfw.h. У меня есть код, который захватывает один кадр и сохраняет его в файл Bitmap. Однако я не знаю, как отобразить этот растровый файл в окне. Я знаю только, как отображать видео в реальном времени в окне. Заранее извиняюсь за вероятную очевидность этого вопроса, но у меня очень мало опыта в этом типе программирования. Кто-нибудь может подсказать, как вывести отснятый кадр в другое окно, для дальнейших манипуляций, т.е. примеры использования соответствующих макросов? Я использую С++ в Visual Studio.

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;
}

person user_name    schedule 12.11.2014    source источник


Ответы (1)


Чтобы отобразить растровое изображение, вы сначала создаете «обработанный» объект растрового изображения, в результате чего у вас удерживается значение HBITMAP, которое API принимают для дальнейших манипуляций, а затем вы фактически отображаете его.

Первый шаг достигается с помощью CreateBitmap и друзья.

Во втором см. раздел Отображение HBITMAP.

person Roman R.    schedule 18.12.2014