使用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。
我找到了类似的示例代码,但它们似乎都想要实例化Image类,而Visual Studio告诉我它是抽象的,无法实例化。
我一直在打转,却没有任何进展。
我只想做这样的事情:
我找到了类似的示例代码,但它们似乎都想要实例化Image类,而Visual Studio告诉我它是抽象的,无法实例化。
我一直在打转,却没有任何进展。
我只想做这样的事情:
...
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);