【发布时间】:2010-12-03 08:41:07
【问题描述】:
我有一个视频信号,它为我提供了一个带有 YCbCR 信号的缓冲区。我可以通过做一些数学将其转换为 RGB,但我不知道如何在 .Net WPF 中显示视频。我也尝试使用 SlimDX 并将流渲染为精灵,但这只是一个想法,我也不知道如何开始。
感谢您的帮助, 梅尔杜尔
【问题讨论】:
标签: c# wpf video directx capture
我有一个视频信号,它为我提供了一个带有 YCbCR 信号的缓冲区。我可以通过做一些数学将其转换为 RGB,但我不知道如何在 .Net WPF 中显示视频。我也尝试使用 SlimDX 并将流渲染为精灵,但这只是一个想法,我也不知道如何开始。
感谢您的帮助, 梅尔杜尔
【问题讨论】:
标签: c# wpf video directx capture
如果您可以将其转换为 RGB,那么您手中就有位图。您可以锁定位图并设置它的数据。新建Bitmap时,可以设置像素格式(24bpp、32bpp),所以从视频帧创建Bitmap应该没有问题。
每次获得新帧时,您只需在 DirectX 中更新纹理即可。 DirectX 中的纹理有多种格式,其中一些与位图格式兼容,您甚至可以使用位图创建新的纹理。
首先找到一些如何在 DirectX(SlimDX、ManagedDirectX...)中渲染纹理的示例,然后在每次新帧进入时更新纹理。如果您不想为纹理锁定和更新而烦恼,您可以创建新的每次新帧出现时纹理,使用此构造函数
public Texture(Device, Bitmap, Usage, Pool);
即使你不想打扰 DirectX,你也可以在 WPF 中直接渲染到 Canvas 中
class MyCanvas : Canvas {
protected override void OnRender (DrawingContext dc) {
BitmapImage img = ...;
dc.DrawImage (img, new Rect (0, 0, img.PixelWidth, img.PixelHeight));
}
}
要从 Bitmap 获取 BitmapImage,请看这里link text
【讨论】: