Compartir a través de


Paso 2: Agregar un comando de menú para agarrar un marco de póster

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

[Esta API no se admite y puede modificarse o no estar disponible en el futuro].

Este tema es el paso 2 de agarrar un marco de póster.

A continuación, agregue un comando para que el usuario tome un marco de póster de un archivo. Cree un elemento de menú con un identificador de recurso de IDM_BITMAP y agregue la siguiente instrucción case al procedimiento de ventana:

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 función DoShowBitmap devolverá el búfer asignado en pbmi. Suponiendo que la función se realiza correctamente, la dirección del mapa de bits (

pBuffer

) se puede calcular como un desplazamiento de pbmi. En la función DoShowBitmap, muestre un cuadro de diálogo Abrir archivo para que el usuario elija un archivo y, a continuación, llame a la función GetBitmap definida por la aplicación, que recuperará el mapa de bits:

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);
}

Siguiente: Paso 3: Implementación de la función Frame-Grabbing

Agarrar un marco de póster