2단계: 포스터 프레임을 잡기 위한 메뉴 명령 추가

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]

이 항목은 포스터 프레임 잡기의 2단계입니다.

다음으로, 사용자가 파일에서 포스터 프레임을 잡을 수 있는 명령을 추가합니다. 리소스 ID가 IDM_BITMAP 메뉴 항목을 만들고 창 프로시저에 다음 사례 문을 추가합니다.

case WM_COMMAND:
    switch (LOWORD(wparam))
    {
    case IDM_BITMAP:
        {
            HRESULT hr = DoShowBitmap(hwnd, &pbmi);
            if (SUCCEEDED(hr))
            {
                pBuffer = reinterpret_cast<BYTE*>(pbmi) + 
                    sizeof(BITMAPINFOHEADER);
                InvalidateRect(hwnd, NULL, TRUE);
            }
            else
            {
                MessageBox(hwnd, TEXT("Cannot display the image."),
                    TEXT("Error"), MB_OK | MB_ICONERROR);
            }
        }
        break;  // IDM_BITMAP
    }
    break;  // WM_COMMAND

DoShowBitmap 함수는 pbmi에서 할당된 버퍼를 반환합니다. 함수가 성공한다고 가정하면 비트맵의 주소(

pBuffer

)은 pbmi의 오프셋으로 계산할 수 있습니다. DoShowBitmap 함수에서 사용자가 파일을 선택할 수 있도록 파일 열기 대화 상자를 표시한 다음, 애플리케이션 정의 GetBitmap 함수를 호출하여 비트맵을 검색합니다.

HRESULT DoShowBitmap(HWND hwnd, BITMAPINFOHEADER** ppbmih)
{
    OPENFILENAME ofn;       // common dialog box structure
    // Initialize OPENFILENAME (not shown).
    // Display the Open File dialog box.  
    if (GetOpenFileName(&ofn) != TRUE) // failed to open file
    {
        return E_FAIL;
    }
    return GetBitmap(ofn.lpstrFile, ppbmih);
}

다음: 3단계: Frame-Grabbing 함수 구현

포스터 프레임 잡기