Графика для Windows средствами DirectDraw

Функция CreateAviSurface()


Теперь у нашего приложения есть открытый AVI-поток и информация в объеме, достаточном для извлечения кадров. Но что же делать с кадром после того, как он будет прочитан и восстановлен? Нам понадобится поверхность для хранения полученных данных, и тогда воспроизведение видеоролика сведется к простому блиттингу содержимого этой поверхности во вторичный буфер приложения с последующим переключением страниц. Эта промежуточная поверхность создается функцией CreateAviSurface():


BOOL AviPlayWin::CreateAviSurface() { if (avisurf) avisurf->Release(), avisurf=0;

avisurf=CreateSurface( srcfmt->biWidth, srcfmt->biHeight );

CRect displayrect=GetDisplayRect();

x=(displayrect.Width()-srcfmt->biWidth)/2; y=0;

return TRUE; }


После освобождения поверхности, созданной ранее, функция CreateAviSurface() с помощью функции CreateSurface() интерфейса DirectDraw создает поверхность, размеры которой совпадают с размерами кадра. Кроме того, функция CreateAviSurface() инициализирует переменные x и y, определяющие положение поверхности AVI на вторичном буфере. В нашем случае кадры будут выравниваться по центру экрана, поэтому в вычислениях применяется функция DirectDrawWin::GetDisplayRect() для определения размеров экрана.



Содержание раздела