2009-07-11 4 views
1

У меня есть последовательность изображений jpg, которые я захватываю и визуализирую на экране, чтобы создать видео.Предоставление последовательности изображений в C# для создания видео

Я декомпрессию изображения из MemoryStream с помощью JpegBitmapDecoder и рендеринга его, установив Source на элемент управления Image. Это, похоже, работает нормально, но накладные расходы процессора довольно высоки. Изображения 1280x720, работающие со скоростью 30 кадров в секунду, и я могу почти не отставать от своего компьютера (Dual Core 2.8Ghz). Выполнение более высоких разрешений приводит к тому, что я удаляю рамки. Я хотел бы попытаться избавиться от использования процессора.

Большую часть времени, потраченное потраченное, похоже, находится в декодировании (простые тесты только на декодировании на моем компьютере показывают, что я могу декодировать около 40 кадров в секунду). Кто-нибудь знает, есть ли более быстрый декодер (DirectX? DirectShow? Что-то, что я могу разгрузить на видеокарту?)

Что касается рендеринга, то не похоже, что управление изображением предназначено для такого типа использования (Я был действительно удивлен, что это сработало вообще, я просто попробовал, потому что это было легко сделать). Есть ли другой способ визуализации отдельных кадров, которые могут быть быстрее?

+0

Альтернативное решение может состоять в том, чтобы последовательно называть jpg, а затем открывать первый в VirtualDub, который затем воспроизводит их как видео. –

+0

Я должен был быть более ясным. Я передаю изображения и хочу воспроизвести живое видео с потоковых изображений. – Dolphin

+0

Какой метод вы используете для потоковой передачи изображений jpeg? Я пытаюсь почти точно так же, и я использую BinaryFormatter, чтобы инкапсулировать MemoryStream и отправить его. Интересно, есть ли лучший метод. – geometrikal

ответ

1

Звучит так, будто вы одновременно декодируете и изменяете размер jpeg. Изменение размера также может быть дорогостоящим. Попробуйте разделить декодирование и изменение размера (используя самый дешевый доступный алгоритм) jpeg. Используйте что-то вроде FreeImage с «JPEG_FAST» для распаковки и «FILTER_BOX» для изменения размера.

Для отображения TinyPTC прост и быстр. (оболочка вокруг DirectDraw) Это C, но довольно легко написать оболочку для компиляции и скомпилировать ее в DLL, с которой вы можете ссылаться.

+0

Изменение размера полезно, но не обязательно, большую часть времени я буду использовать собственное разрешение. Мне нужно взглянуть на FreeImage, чтобы узнать, будет ли он быстрее декодироваться. – Dolphin

+0

JPEG_FAST определенно быстрее (почти на 50% быстрее в моем простом тесте), мне нужно будет посмотреть качество в понедельник, чтобы узнать, приемлемо ли это. – Dolphin