使用 Visual C# 2010,我试图从从 Windows Kinect 接收的帧中编写一个 .avi 文件。使用 BitmapEncoder 和 PngBitmapEncoder(保存到流),可以很容易地将帧保存为 .png 文件,但我不能自行决定将这些图像添加到此处提供的 VideoStream: http://www.codeproject。 com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library ,因为我需要能够将 RenderTargetBitmap 或 DrawingVisual 转换为 System.Drawing.Bitmap。
我找到了做类似事情的示例代码,但它们似乎都想实例化 Visual Studio 告诉我的 Image 类是抽象的并且无法实例化。
我绕着圈子转,什么也没有。
我只想做这样的事情:
...
renderBitmap.Render(dv);
Bitmap bmp=new Bitmap(dv);
VideoStream aviStream=aviManager.AddVideoStream(true,60,bmp);
...
但是 Bitmap 没有有用的构造函数来让我从 dv (DrawingVisual) 到 bmp。:(
这 3 行来自此代码段:
var renderBitmap=new RenderTargetBitmap(colorWidth,colorHeight,96.0,96.0,PixelFormats.Pbgra32);
DrawingVisual dv=new DrawingVisual();
using(DrawingContext dc=dv.RenderOpen())
{
VisualBrush backdropBrush=new VisualBrush(Backdrop);
dc.DrawRectangle(backdropBrush,null,new Rect(0,0,colorWidth,colorHeight));
VisualBrush colorBrush=new VisualBrush(MaskedColor);
dc.DrawRectangle(colorBrush,null,new Rect(0,0,colorWidth,colorHeight));
VisualBrush watermarkBrush=new VisualBrush(Watermark);
dc.DrawRectangle(watermarkBrush,null,new Rect(colorWidth-96,colorHeight-80,64,48));
}
renderBitmap.Render(dv);
Bitmap bmp=new Bitmap(dv);
VideoStream aviStream=aviManager.AddVideoStream(true,60,bmp);