Метод IMediaDet::GetBitmapBits
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Примечание
[Не рекомендуется. Этот API можно удалить из будущих выпусков Windows.]
Метод GetBitmapBits
извлекает видеокадр в указанное время мультимедиа. Возвращаемый кадр всегда имеет 24-разрядный формат RGB.
Синтаксис
HRESULT GetBitmapBits(
double StreamTime,
long *pBufferSize,
char *pBuffer,
long Width,
long Height
);
Параметры
-
StreamTime
-
Время извлечения видеокадра в секундах.
-
pBufferSize
-
Получает требуемый размер буфера. Если pBuffer имеет значение NULL, переменная получает размер буфера, необходимый для извлечения кадра. Если pBuffer не имеет значение NULL, этот параметр игнорируется.
-
pBuffer
-
Указатель на буфер, который получает структуру BITMAPINFOHEADER , за которой следуют биты DIB.
-
Width
-
Ширина видеоимнима в пикселях.
-
Height
-
Высота видеоимнима в пикселях.
Возвращаемое значение
Возвращает значение HRESULT . Возможные значения:
Код возврата | Описание |
---|---|
|
Успешно. |
|
Не удалось добавить фильтр Sample Grabber в граф. |
|
Недостаточно памяти. |
|
Ошибка указателя NULL. |
|
Непредвиденная ошибка. |
|
Недопустимый тип носителя. |
Комментарии
Перед вызовом этого метода задайте имя файла и поток, вызвав IMediaDet::p ut_Filename и IMediaDet::p ut_CurrentStream.
Чтобы определить необходимый размер буфера, вызовите этот метод с pBuffer равным NULL. Размер возвращается в переменной, на которую указывает pBufferSize. Затем создайте буфер и вызовите метод еще раз с pBuffer , равным адресу буфера. При возврате метода буфер содержит структуру BITMAPINFOHEADER , за которой следует растровое изображение. Растровое изображение масштабируется до размеров, указанных в параметрах Width и Height .
Этот метод переводит детектор мультимедиа в режим захвата растрового изображения. После вызова этого метода различные методы потоковой информации в IMediaDet не будут работать, если не создать новый экземпляр детектора мультимедиа.
Примечание
Файл заголовка Qedit.h несовместим с заголовками Direct3D более поздней версии 7.
Примечание
Чтобы получить Qedit.h, скачайте обновление Microsoft Windows SDK для Windows Vista и платформа .NET Framework 3.0. Qedit.h недоступен в Microsoft Windows SDK для Windows 7 и платформа .NET Framework 3.5 с пакетом обновления 1 (SP1).
Примеры
В следующем коде GetBitmapBits
используется метод для создания аппаратно-независимого растрового изображения.
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;
}
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|
См. также раздел