ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



Клипы - часть 12


И снова я не стану подробно рассматривать представленный фрагмент, поскольку на это уйдет слишком много времени. Лучшая документация по Video for Windows содержится в Microsoft Development Library. Функция CMovie::Save, создающая AVI-файл по списку кадров, выглядит следующим образом:

BOOL CMovie::Save()

{

if (GetNumFrames() «= 0) return FALSE;

// Получить имя файла ASSERT(m_p3dWnd) ;

CFileDialog dig(FALSE,

"avi",

NULL,

OFN_OVERWRITEPROMPT,

"AVI Files (*.avi)¦*.avi¦¦",

m_p3dWnd) ;

if (dIg.DoModal() != IDOK) return FALSE;

// Открыть AVI-файл HRESULT hr;

PAVIFILE pfile = NULL;

hr = ::AVIFileOpen(Spfile,

dig.GetFileName(), OF_CREATE ¦ OF_WRITE, NULL) ;

if (FAILED(hr)) return FALSE;

// Создать видеопоток в файле PAVISTREAM pstream = NULL;

AVISTREAMINFO si;

memset(&si, 0, sizeof(si));

si.fccType = streamtypeVIDEO;

si.fccHandler = mmioFOURCC('M','S','V,'C');

si.dwRate = 100; // Fps si.dwScale = 1;

si.dwLength = 0;

si.dwQuality = (DWORD) -1;

si.rcFrame.top = 0;

si.rcFrame.left = 0;

si.rcFrame.bottom = m Take.GetHeight() ;

si.rcFrame.right = m_Take.GetWidth() ;

strcpy(si.szName, "3dPlus Movie");

hr = ::AVIFileCreateStream(pfile, Spstream, &si);

ASSERT(SUCCEEDED(hr));

// Задать формат CMovieFrame* pFrame = m_Take.GetHead();

ASSERT(pFrame) ;

int iSize » sizeof(BITMAPINFOHEADER)

+

DIBColorEntries((BITMAPINFOHEADER*)(pFraine-

»m_pBMI))

* sizeof(RGBQUAD) ;

hr === : :AVIStreamSetFormat(pstream,

0,

pFrame-»m_pBMI,

iSize) ;

ASSERT(SUCCEEDED(hr));

// Записать кадры POSITION pos = m_Take.GetHeadPosition();

int iSample = 0;

while (pos) (

CMovieFrame* pFrame = m_Take.GetNext(pos);

BITMAPINFOHEADER* pBIH = (BITMAPINFOHEADER*)

& (pFrame-»m_pBMI-»bmiHeader) ;

int iBits = DIBStorageWidth(pBIH) * pBIH-»biHeight;

hr = ::AVIStreamWrite(pstream,

iSample, // Текущий кадр

1, // Всего один

pFrame-»m_pBits, // Графические данные

iBits, // Размер буфера

О,

NULL,

NULL) ;

ASSERT(SUCCEEDED(hr)) ;

iSample++;




Содержание  Назад  Вперед