次の方法で共有


手順 2: メニュー コマンドを追加してポスター フレームを取得する

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

[この API はサポートされていないため、今後変更または使用できない可能性があります。]

このトピックは、 ポスター フレームをつかむ手順 2 です。

次に、ユーザーがファイルからポスター フレームを取得するためのコマンドを追加します。 IDM_BITMAPのリソース ID を持つメニュー項目を作成し、ウィンドウ プロシージャに次の 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関数を実装する

ポスターフレームのつかみ取り