Etapa 2: Adicionar um comando de menu para pegar um quadro de pôster
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
[Essa API não tem suporte e pode ser alterada ou indisponível no futuro.]
Este tópico é a Etapa 2 de Agarrando um Quadro de Pôsteres.
Em seguida, adicione um comando para que o usuário pegue um quadro de pôster de um arquivo. Crie um item de menu com uma ID de recurso de IDM_BITMAP e adicione a seguinte instrução case ao procedimento de janela:
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
A função DoShowBitmap retornará o buffer alocado no pbmi. Supondo que a função seja bem-sucedida, o endereço do bitmap (
pBuffer
) pode ser calculado como um deslocamento de pbmi. Na função DoShowBitmap, exiba uma caixa de diálogo Abrir Arquivo para o usuário escolher um arquivo e chame a função GetBitmap definida pelo aplicativo, que recuperará o 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);
}
Próximo: Etapa 3: Implementar a função Frame-Grabbing
Tópicos relacionados