【问题标题】:Creating Video from generated bitmap images c#从生成的位图图像创建视频 c#
【发布时间】:2012-07-13 18:52:59
【问题描述】:

我正在尝试使用 openCVSharp 播放位图图像流以从 YUV 生成位图。但我无法将其显示为视频。

我发现了一些关于将其用作 AVI 包装器 here 的链接以及一些保存在硬盘上的链接,例如 here 和 FFMPEG 可能在 LINUX 上运行良好,但在 Windows 中不太好。

我什至尝试使用以下代码。但它只显示序列中的最后一帧,而且我没有使用 MediaElement 的 URI,因为位图是由我的程序生成的。

image.source = ToBitmapSource(bitmapImage);

在哪里

public static BitmapSource ToBitmapSource(System.Drawing.Bitmap bitmap){
    IntPtr ip = bitmap.GetHbitmap();
    BitmapSource bs = null;

    bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip,
    IntPtr.Zero, System.Windows.Int32Rect.Empty,
    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

    return bs;
}

我正在尝试播放视频(类似于流式传输)而不将其保存在计算机上。直接展示是必须的吗?我非常需要你的帮助,我的截止日期快到了!

【问题讨论】:

  • 为什么,您不能使用 XNA 或 SlimDX 在屏幕上简单地显示它们吗?
  • 我从未与他们中的任何一个合作过,您有任何相关链接吗?
  • 我发现SlimDX和XNA都是高端游戏用的图形工具,不需要这么高的处理,只希望能把位图显示成视频就可以了跨度>
  • 生成这些帧的速率是多少?
  • 那么 - 如果您的 UI 已经可以渲染它,那么您想要做什么(为什么要将其转换为视频)?它已经显示出来了,对吗?

标签: c# wpf video bitmap


【解决方案1】:

你可以使用DispatcherTimer(相当于Winform中的Timer):

DispatcherTimer dt = new DispatcherTimer();
dt.Interval = 25;  //25 ms --> 50 frames per second
dt.Tick += delegate(object sender, EventArgs e){

             //get the image and display it

          }

dt.Start(); //to start record

【讨论】:

  • 我与委托的合作不多,所以,这是我得到的错误 dt.Tick = delegate(object sender, EventArgs e) --- Tick 只能应用于左侧+= 或 -=。我没明白这是什么意思
  • 好吧,我在this的基础上稍作修改并使用了它..但没有区别,仍然没有视频 dt.Interval = new TimeSpan(0, 0, 0, 0, 40 ); //25 毫秒 --> 每秒 50 帧 dt.Tick += (sender, e) => UpdateFrame(sender, e, BitImage); private void UpdateFrame(object sender, EventArgs e, Bitmap BitImage) { Image.Source = ConvertYUV.ToBitmapSource(BitImage); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2018-11-08
  • 2012-05-18
  • 1970-01-01
  • 2015-04-27
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多