Member 14478761 Ответов: 2

Как я могу получить видеоряд из изображений в C++?


Привет,

Я хотел бы создать avi-файл из последовательности изображений. Изображения хранятся как "cppBITMAP2.bmp" (во время цикла изображение обновляется). В этом цикле я хочу создать видео из этих изображений.

Что я уже пробовал:

Я нашел это: Простой интерфейс к API Video for Windows для создания AVI фильмов из отдельных изображений
Здесь я попытался использовать код без MFC из комментариев, но это не сработало.

Я скопировал соответствующую часть своего кода (по крайней мере, я думаю, что это соответствующая часть), которая использует файл aviUtil.h из комментария ссылки):

SetDIBitsToDevice(_backbuffer,x,y,width,height, 0, 0, 0, (UINT)height,
     data, &bmi, DIB_RGB_COLORS);
 vbitmap = CreateDIBitmap(_backbuffer, &bmi.bmiHeader, CBM_INIT/*0*/, data,
     &bmi, DIB_RGB_COLORS);
 PBITMAPINFO bbitmap = CreateBitmapInfoStruct(this->_window, this-
     >_backbitmap);

 CreateBMPFile(this->_window, /*L*/"cppBITMAP2.bmp", bbitmap, this -
     >_backbitmap, this->_backbuffer);

 lpbi = (LPBITMAPINFOHEADER)GlobalLock("cppBITMAP2.bmp");
 ADD_FRAME_FROM_DIB_TO_AVI(lpbi, data, "DBI", 10);


Здесь я получаю ошибку нарушения доступа, и созданный avi-файл пуст. Линии для создания растрового изображения работают хорошо. Разве я звонил в полицию?
ADD_FRAME_FROM_DIB_TO_AVI
функция неправильная?

Я совершенно новичок в c++ и был бы очень благодарен вам за помощь.

2 Ответов

Рейтинг:
2

Member 14478761

Я нашел решение. Я поместил код в неправильное место и неправильно истолковал сообщение об ошибке.

Спасибо за вашу помощь.


Рейтинг:
0

KarstenK

Это не так уж сложно, потому что AVI-это контейнерный формат, и вам нужно только инициализировать его, а некоторые кадры вы можете найти в этой статье Класс для легкого создания AVI видео с помощью OpenGL и Video for Windows.

Совет: первый пиксель первого кадра (то есть верхний левый) задает прозрачный цвет.


Member 14478761

Это то, что я пытался (я думал). START_AVI() и STOP_AVI(), которые также есть в моем коде, я просто не публиковал его. Создание, кажется, каким-то образом работает, потому что я могу создать файл, но внутри нет никаких данных.

Я прочитал ссылку и попробовал пример, но здесь я получаю много ошибок (я использую VS 2013), поэтому, если подход, который я попробовал, может сработать, я бы предпочел использовать это. Разве такое возможно? Неужели я пропустил что-то важное?

Я понятия не имею о твоем намеке. Является ли ввод "данных" неправильным, и мне нужно указать на что-то еще?