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 |
---|---|
|
Êxito. |
|
Não foi possível adicionar o filtro Captura de Exemplo ao grafo. |
|
Memória insuficiente. |
|
Erro de ponteiro NULL . |
|
Erro inesperado. |
|
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 |
|
Biblioteca |
|
Confira também