Запись видео на C # и WPF из MediaElement
-
21-09-2019 - |
Вопрос
Мое приложение применяет пользовательские эффекты шейдера HLSL к MediaElement с помощью декораторов.Как я могу записать и сохранить измененное видео с помощью самого приложения в режиме реального времени?
Решение
Я использую объект 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 .
Не связан с StackOverflow