Passaggio 2: Aggiungere un comando di menu per afferrare un frame poster
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
[Questa API non è supportata e può essere modificata o non disponibile in futuro.]
Questo argomento è il passaggio 2 dell'acquisizione di un frame poster.
Aggiungere quindi un comando per l'utente per afferrare un frame poster da un file. Creare una voce di menu con un ID risorsa di IDM_BITMAP e aggiungere l'istruzione case seguente alla procedura della finestra:
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
La funzione DoShowBitmap restituirà il buffer allocato in pbmi. Supponendo che la funzione abbia esito positivo, l'indirizzo della bitmap (
pBuffer
) può essere calcolato come offset da pbmi. Nella funzione DoShowBitmap visualizzare una finestra di dialogo Apri file per consentire all'utente di scegliere un file e quindi chiamare la funzione GetBitmap definita dall'applicazione, che recupera la bitmap:
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);
}
Passaggio 3: Implementare la funzione Frame-Grabbing
Argomenti correlati