2

我的应用程序使用装饰器将自定义 HLSL 着色器效果应用于 mediaElement。如何使用应用程序本身实时录制和保存修改后的视频?

4

1 回答 1

1

我一直在使用 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 上工作,尽管您需要从 MediaTimeline 驱动 MediaElement 并从其 CurrentTimeInvalidated 事件调用 onCurrentTimeInvalidated 方法。

于 2010-02-19T09:41:43.043 回答