Запись видео в C # и WPF из mediaElement - PullRequest
2 голосов
/ 20 января 2010

Мое приложение применяет пользовательские эффекты шейдера HLSL к mediaElement с помощью декораторов. Как я могу записать и сохранить измененное видео с помощью самого приложения в режиме реального времени?

1 Ответ

1 голос
/ 19 февраля 2010

Я использовал объект RenderTargetBitmap для рендеринга последовательностей изображений анимаций, таких как:

Сначала вы позвоните:

myStoryboard.CurrentTimeInvalidated += new EventHandler(onCurrentTimeInvalidated );

где myStoryboard - это раскадровка, управляющая анимацией, а затем у вас есть следующий метод:

void onCurrentTimeInvalidated (object sender, EventArgs e)
        {
            prefix = "";
            if (counter < 10)
            {
                prefix = "000";
            }
            else if (counter < 100)
            {
                prefix = "00";
            }
            else if (counter < 1000)
            {
                prefix = "0";
            }

            Size size = new Size(MainCanvas.ActualWidth, MainCanvas.ActualHeight);
            MainCanvas.Measure(size);
            MainCanvas.Arrange(new Rect(size));


            RenderTargetBitmap bmp = new RenderTargetBitmap(imgWidth, imgHeight, 96d, 96d, PixelFormats.Default);
            bmp.Render(MainCanvas);

            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.QualityLevel = 90;
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            string file = basePath + prefix + counter.ToString() + "_testpic.jpg";
            using (Stream stm = File.Create(file))
            {
                encoder.Save(stm);
            }
            counter++;
        }

Я не уверен, насколько хорошо это будет работать с MediaElement, но, возможно, стоит попробовать. Чтобы это работало с MediaElement, необходимо запустить MediaElement из MediaTimeline и вызвать метод onCurrentTimeInvalidated из события CurrentTimeInvalidated.

...