Compartilhar via


Método IMediaDet::GetBitmapBits

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

Observação

[Preterido. Essa API pode ser removida de versões futuras do Windows.]

 

O GetBitmapBits método recupera um quadro de vídeo no tempo de mídia especificado. O quadro retornado está sempre no formato RGB de 24 bits.

Sintaxe

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

Parâmetros

StreamTime

Hora em que recuperar o quadro de vídeo, em segundos.

pBufferSize

Recebe o tamanho do buffer necessário. Se pBuffer for NULL, a variável receberá o tamanho do buffer necessário para recuperar o quadro. Se pBuffer não for NULL, esse parâmetro será ignorado.

pBuffer

Ponteiro para um buffer que recebe uma estrutura BITMAPINFOHEADER seguida pelos bits DIB.

Largura

Largura da imagem de vídeo, em pixels.

Altura

Altura da imagem de vídeo, em pixels.

Retornar valor

Retorna um valor HRESULT . Os possíveis valores incluem os seguintes:

Código de retorno Descrição
S_OK
Êxito.
E_NOINTERFACE
Não foi possível adicionar o filtro Captura de Exemplo ao grafo.
E_OUTOFMEMORY
Memória insuficiente.
E_POINTER
Erro de ponteiro NULL .
E_UNEXPECTED
Erro inesperado.
VFW_E_INVALIDMEDIATYPE
Tipo de mídia inválido.

 

Comentários

Antes de chamar esse método, defina o nome do arquivo e o fluxo chamando IMediaDet::p ut_Filename e IMediaDet::p ut_CurrentStream.

Para determinar o tamanho do buffer necessário, chame esse método com pBuffer igual a NULL. O tamanho é retornado na variável apontada por pBufferSize. Em seguida, crie o buffer e chame o método novamente, com pBuffer igual ao endereço do buffer. Quando o método retorna, o buffer contém uma estrutura BITMAPINFOHEADER seguida pelo bitmap. O bitmap é dimensionado para as dimensões especificadas nos parâmetros Width e Height .

Esse método coloca o detector de mídia no modo de captura de bitmap. Depois que esse método for chamado, os vários métodos de informações de fluxo no IMediaDet não funcionarão, a menos que você crie uma nova instância do detector de mídia.

Observação

O arquivo de cabeçalho Qedit.h não é compatível com cabeçalhos Direct3D posteriores à versão 7.

 

Observação

Para obter qedit.h, baixe o SDK do Microsoft Windows Update para Windows Vista e .NET Framework 3.0. O Qedit.h não está disponível no SDK do Microsoft Windows para Windows 7 e .NET Framework 3.5 Service Pack 1.

 

Exemplos

O código a seguir usa o GetBitmapBits método para criar um bitmap independente do 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 Valor
parâmetro
Qedit.h
Biblioteca
Strmiids.lib

Confira também

IMediaDet Interface

Códigos de erro e êxito