Método IMediaDet::GetBitmapBits

[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.

Nota:

[Desusado. Esta API se puede quitar de futuras versiones de Windows.]

 

El GetBitmapBits método recupera un fotograma de vídeo en el tiempo multimedia especificado. El marco devuelto siempre está en formato RGB de 24 bits.

Sintaxis

HRESULT GetBitmapBits(
   double StreamTime,
   long   *pBufferSize,
   char   *pBuffer,
   long   Width,
   long   Height
);

Parámetros

StreamTime

Hora en la que se va a recuperar el fotograma de vídeo, en segundos.

pBufferSize

Recibe el tamaño de búfer necesario. Si pBuffer es NULL, la variable recibe el tamaño del búfer necesario para recuperar el marco. Si pBuffer no es NULL, este parámetro se omite.

pBuffer

Puntero a un búfer que recibe una estructura BITMAPINFOHEADER seguida de los bits DIB.

Width

Ancho de la imagen de vídeo, en píxeles.

Height

Alto de la imagen de vídeo, en píxeles.

Valor devuelto

Devuelve un valor HRESULT . Entre los valores posibles figuran los siguientes:

Código devuelto Descripción
S_OK
Correcto.
E_NOINTERFACE
No se pudo agregar el filtro Sample Grabber al gráfico.
E_OUTOFMEMORY
Memoria insuficiente.
E_POINTER
Error de puntero NULL.
E_UNEXPECTED
error inesperado.
VFW_E_INVALIDMEDIATYPE
Tipo de medio no válido.

 

Observaciones

Antes de llamar a este método, establezca el nombre de archivo y la secuencia llamando a IMediaDet::p ut_Filename e IMediaDet::p ut_CurrentStream.

Para determinar el tamaño del búfer necesario, llame a este método con pBuffer igual a NULL. El tamaño se devuelve en la variable a la que apunta pBufferSize. A continuación, cree el búfer y vuelva a llamar al método , con pBuffer igual a la dirección del búfer. Cuando el método devuelve, el búfer contiene una estructura BITMAPINFOHEADER seguida del mapa de bits. El mapa de bits se escala a las dimensiones especificadas en los parámetros Width y Height .

Este método coloca el detector de medios en modo de captura de mapa de bits. Una vez que se ha llamado a este método, los distintos métodos de información de flujo de IMediaDet no funcionan, a menos que cree una nueva instancia del detector de medios.

Nota:

El archivo de encabezado Qedit.h no es compatible con los encabezados de Direct3D posteriores a la versión 7.

 

Nota:

Para obtener Qedit.h, descargue la actualización de Microsoft Windows SDK para Windows Vista y .NET Framework 3.0. Qedit.h no está disponible en el Microsoft Windows SDK para Windows 7 y .NET Framework 3.5 Service Pack 1.

 

Ejemplos

El código siguiente usa el GetBitmapBits método para crear un mapa de bits independiente del dispositivo.

long size;
hr = pDet->GetBitmapBits(0, &size, 0, width, height);
if (SUCCEEDED(hr)) 
{
    char *pBuffer = new char[size];
    if (!pBuffer)
        return E_OUTOFMEMORY;
    try {
        hr = pDet->GetBitmapBits(0, 0, pBuffer, width, height);
    }
    catch (...) {
        delete [] pBuffer;
        throw;
    }
    if (SUCCEEDED(hr))
    {
        BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER*)pBuffer;
        HDC hdcDest = GetDC(0);
        
        // Find the address of the start of the image data.
        void *pData = pBuffer + sizeof(BITMAPINFOHEADER);
        
        // Note: In general a BITMAPINFOHEADER can include extra color
        // information at the end, so calculating the offset to the image
        // data is not generally correct. However, the IMediaDet interface
        // always returns an RGB-24 image with no extra color information.
        
        BITMAPINFO bmi;
        ZeroMemory(&bmi, sizeof(BITMAPINFO));
        CopyMemory(&(bmi.bmiHeader), bmih, sizeof(BITMAPINFOHEADER));
        HBITMAP hBitmap = CreateDIBitmap(hdcDest, bmih, CBM_INIT, 
            pData, &bmi, DIB_RGB_COLORS);
    }
    delete[] pBuffer;
}

Requisitos

Requisito Value
Encabezado
Qedit.h
Biblioteca
Strmiids.lib

Consulte también

IMediaDet (interfaz)

Códigos de error y éxito