Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVI, Собрать бы... 
:(
    Опции темы
Madest
Дата 13.4.2005, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Пытаюсь смастерить свой первый AVI из пяти битмапов RGB24 200x200.
При запуске WMPlayer сообщает, что "Требуемый класс отсутствует в ClassFactory".
Не совсем понятно размер чего указан в четырех байтах от 0x04 (сразу за RIFF).
И еще, правильно ли то, что указываю в AVIStreamHeader fccHandler=0, т.к. сжатия у меня никакого нет?
Код

PDWORD ms=new DWORD[14];//size
for(BYTE bb=0;bb<14;bb++) *(ms+bb)=0;
PDWORD mo=new DWORD[14];//offset
for(bb=0;bb<14;bb++) *(mo+bb)=0;
DWORD si=120000;//size image
CString s;
DWORD d=0;
CFile file;
file.Open("c:/first.avi",CFile::modeCreate|CFile::modeWrite);
file.Write("RIFF",4);
*(mo+0)=file.GetPosition();
file.Write(&ms[0],4);
file.Write("AVI LIST",8);
*(mo+1)=file.GetPosition();
file.Write(&ms[1],4);
file.Write("hdrlavih",8);
d=56;//s2
file.Write(&d,4);
MainAVIHeader mah;
mah.dwMicroSecPerFrame=1000000;
mah.dwMaxBytesPerSec=120000;
mah.dwReserved[0]=0;
mah.dwReserved[1]=0;
mah.dwReserved[2]=0;
mah.dwReserved[3]=0;
mah.dwFlags=0x810;
mah.dwTotalFrames=5;
mah.dwInitialFrames=0;
mah.dwStreams=1;
mah.dwSuggestedBufferSize=0;
mah.dwWidth=200;
mah.dwHeight=200;
mah.dwPaddingGranularity=0;
file.Write(&mah,56);
file.Write("LIST",4);
*(mo+3)=file.GetPosition();
file.Write(&ms[3],4);
file.Write("strlstrh",8);
AVIStreamHeader ash;
d=56;//s4
file.Write(&d,4);
ash.fccType=0x73646976;
ash.fccHandler=0;
ash.dwFlags=0;
ash.wPriority=0;
ash.wLanguage=0;
ash.dwInitialFrames=0;
ash.dwScale=1;
ash.dwRate=1;
ash.dwStart=0;
ash.dwLength=12;
ash.dwSuggestedBufferSize=0;
ash.dwQuality=0;
ash.dwSampleSize=0;
ash.rcFrame.left=0;
ash.rcFrame.top=0;
ash.rcFrame.right=200;
ash.rcFrame.bottom=200;
file.Write(&ash,56);
file.Write("strf",4);
d=40;//s5
file.Write(&d,4);
LPBITMAPINFO pBMI=(LPBITMAPINFO) new BYTE[40];
pBMI->bmiHeader.biBitCount=24;
pBMI->bmiHeader.biClrImportant=0;
pBMI->bmiHeader.biClrUsed=256;
pBMI->bmiHeader.biCompression=0;
pBMI->bmiHeader.biHeight=200;
pBMI->bmiHeader.biPlanes=1;
pBMI->bmiHeader.biSize=40;
pBMI->bmiHeader.biSizeImage=120000;
pBMI->bmiHeader.biWidth=200;
pBMI->bmiHeader.biXPelsPerMeter=0;
pBMI->bmiHeader.biYPelsPerMeter=0;
file.Write(pBMI,40);
file.Write("strn",4);
d=4;//s6
file.Write(&d,4);
file.Write("ZEZO",4);
file.Write("LIST",4);
*(mo+12)=file.GetPosition();
file.Write(&ms[12],4);
file.Write("movi",4);
DWORD ofs[5];
CFile bf;
PBYTE pData=new BYTE[si];
for(bb=0;bb<5;bb++)
{
s.Format("c:/__1/%i.bmp",bb+1);
bf.Open(s,CFile::modeRead);
bf.Seek(54,CFile::begin);
bf.Read(pData,si);
ofs[bb]=file.GetPosition();
file.Write("00db",4);
file.Write(&si,4);
file.Write(pData,si);
bf.Close();
}
file.Write("idx1",4);
d=20;//s13;                                
file.Write(&d,4);
for(bb=0;bb<5;bb++);
{
file.Write("00db",4);
d=16;
file.Write(&d,4);
file.Write(&ofs[bb],4);
file.Write(&si,4);
}
*(ms+0)=224+8+5*(8+si)+28;
file.Seek(*(mo+0),CFile::begin);
file.Write(&ms[0],4);
*(ms+1)=212;
file.Seek(*(mo+1),CFile::begin);
file.Write(&ms[1],4);
*(ms+3)=128;
file.Seek(*(mo+3),CFile::begin);
file.Write(&ms[3],4);
*(ms+12)=5*(8+si);
file.Seek(*(mo+12),CFile::begin);
file.Write(&ms[12],4);
delete[] pBMI;
delete[] pData;
file.Close();

--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0385 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.