Рендеринг последовательности изображений в C # для создания видео - PullRequest
1 голос
/ 11 июля 2009

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

Я распаковываю изображение из MemoryStream с помощью JpegBitmapDecoder и отрисовываю его, устанавливая Source в элементе управления Image. Кажется, это работает нормально, но нагрузка на процессор довольно высока. Изображения имеют размер 1280x720 и 30 кадров в секунду, и я едва могу поддерживать компьютер (Dual Core 2,8 ГГц). Работа в более высоком разрешении заставляет меня выбрасывать кадры. Я хотел бы попытаться снизить нагрузку на процессор.

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

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

1 Ответ

1 голос
/ 11 июля 2009

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

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

...