Шаг 1. Создание Windows Framework
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
Начните с создания базовой платформы приложения Windows, включая WinMain и процедуру окна. Функция WinMain здесь не показана; вызовите CoInitialize перед циклом сообщений, чтобы инициализировать библиотеку COM, и CoUninitialize после завершения цикла сообщений. Начните со следующей процедуры с минимальным окном:
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
static BITMAPINFOHEADER *pbmi = NULL;
static BYTE *pBuffer = NULL;
switch (msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
if (pbmi) delete [] pbmi;
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}
При извлечении кадра плаката из детектора мультимедиа возвращается буфер, содержащий структуру BITMAPINFOHEADER , за которой следуют биты изображения. Поэтому определите две статические переменные в процедуре окна: pbmi будет содержать указатель на структуру BITMAPINFOHEADER , а pBuffer — указатель на растровое изображение. Приложение выделяет буфер в pbmi с помощью new
, поэтому оно должно удалить буфер перед уничтожением окна. Указатель pBuffer вычисляется как смещение от pbmi, поэтому удалять его не нужно.
Далее: Шаг 2. Добавление команды меню для захвата рамки плаката
Связанные темы