共用方式為


步驟 2:新增功能表命令以擷取海報框架

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

[不支援此 API,未來可能會改變或無法使用。]

本主題是擷 取海報圖文框的步驟 2。

接下來,為使用者新增命令,以從檔案擷取海報框架。 使用資源識別碼建立IDM_BITMAP功能表項目,並將下列 case 語句新增至視窗程式:

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 函式

擷取海報框架