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



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


Раз нам приходится работать с одной палитрой, будет вполне логично сохранить ее в начале съемки клипа. Давайте посмотрим, как это делается. Начнем с

/b> ИЦГ Глава 11. Клипы

delete pip;

return pPal;

}

Для получения цветов палитры от интерфейса используется структура LOGPALETTE; они передаются приложению в объекте CPalette. Класс CPalette, входящий в библиотеку MFC, хорошо подходит для хранения набора цветов; мы убедимся в этом, когда будем рассматривать воспроизведение клипа в окне приложения.

Функция класса CMovie, запрашивающая палитру у объекта DirectDraw в начале съемки, выглядит следующим образом:

BOOL CMovie::Record() {

Stop () ;

// Удалить все, что было записано ранее m Take.DeleteAll();

m iCurFrame =0;

// Сохранить текущую палитру ASSERT(m_p3dWnd) ;

CDirectDraw* pDD = m_p3dWnd-»GetDD () ;

ASSERT(pDD) ;

m_Take. SetPalette (pDD-»GrabPalette () ) ;

// Сохранить размер кадра CRect re;

m_p3dWnd-»GetClientRect (&rc) ;

m_Take.SetSize(re.Width(), re.Height()) ;

// Начать запись m_b!sRecording = TRUE;

return TRUE;

}

Как нетрудно убедиться, палитра сохраняется в текущем (и только в текущем!) объекте класса CMovieTakenpH помощи функции CMovieTake::SetPalette. Кроме того, мы сохраняем размер клиентной области текущего окна. Запись кадров происходит во время пассивной работы приложения.

Запись изображений из буфера

Захват изображения из буфера визуализации — задача достаточно сложная, поскольку при этом необходимо учесть множество разных тонкостей. Ниже приведен фрагмент функции CMovie::Update, вызываемой в цикле пассивной работы приложения для записи кадров по воспроизводимым изображениям.

/b> ШУ Глава 11. Клипы

// Получить указатель на объект DirectDraw в трехмерном

окне

ASSERT(m_p3dWnd) ;

CDirectDraw* pDD = m_p3dWnd-»GetDD () ;

ASSERT(pDD) ;

// Получить текущее изображение BITMAPINFO* pBMI = NULL;

BYTE* pBits = NULL;

HBITMAP hBmp = pDD-»GrabImage (&pBMI, (void**)&pBits);

ASSERT(hBmp) ;

ASSERT(pBMI) ;

ASSERT(pBits) ;




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