2013-04-27 4 views
0

как я беру данные из объекта FIBITMAP (Free-Image) и сохраняю его в двоичном файле.запись opengl видео без отдельной программы или библиотеки

Я уже знаю, как хранить данные как изображение, но я хотел бы вместо этого хранить его как видео, похожее на Fraps. моя цель - создать список изображений FIBITMAP и записать их в бинарный файл (.avi или .mp4).

это мой ScreenShot Код:

BYTE* pixels = new BYTE[ 3 * width * height];  

glReadPixels(0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE, pixels); 

// Convert to FreeImage format & save to file 
FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels, width, height, 3 * width, 24,    0x0000FF, 0xFF0000, 0x00FF00); 
FreeImage_Save(FIF_PNG, image, "./images/test.avi"); 

// Free resources 
FreeImage_Unload(image); 
delete[] pixels; 

ответ

0

Допустим, вы хотите, чтобы сохранить его в AVI. Это формат контейнера, который определяет метаданные сохраненного видеопотока (разрешение кадров, информацию о кодеках и т. Д.) И сам поток. Есть много мест, где вы можете изучить его формат, а также RIFF в целом.

Другое дело, что если вы хотите воспроизвести свой видеофайл с помощью программного обеспечения «аутсайдера», вам необходимо предоставить кодек для системы, то, что программное обеспечение проигрывателя найдет через вашу ОС (вы каким-то образом зарегистрируете кодек , это зависит от ОС), и кодек будет декодировать видеопоток, содержащийся в avi, и предоставить кадры игроку. (На самом деле плеер вызывает функцию декодирования с кусками потока, и ваш кодек должен взаимодействовать).

Конечно, в вашем видеопотоке каждый кадр независим и независимо кодируется другими. Но это не имеет значения с точки зрения OS-кодека. Ваш кодек имеет идентификатор (FOURCC), который должен быть установлен в раздел кодека AVI, и плеер будет искать кодек с использованием этого идентификатора.

Возможно, на вашем месте я могу думать о движении JPEG. Это самая близкая существующая вещь по сравнению с тем, что вы делаете. Только в этом случае отдельные кадры не являются png, а jpeg.

+0

спасибо за помощь помощник –

+0

Нет проблем. Мой ответ очень общий, я не знаю, насколько он полезен. Вы пишете кодек? –

+0

не. Я сейчас работаю над окном API –

 Смежные вопросы

  • Нет связанных вопросов^_^