手順 2: メニュー コマンドを追加してポスター フレームを取得する
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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関数を実装する
関連トピック