这是一个由两部分组成的问题——首先,为什么这段代码不起作用?
Canvas canvas = new Canvas { Width = 640, Height = 480 };
System.Windows.Size size = new System.Windows.Size( canvas.Width, canvas.Height);
//Measure and arrange the surface
canvas.Measure( size );
canvas.Arrange( new Rect( size ) );
canvas.Background = new SolidColorBrush( Colors.Purple );
RenderTargetBitmap bitmap = new RenderTargetBitmap( (int)canvas.Width, (int)canvas.Height, 96d, 96d, PixelFormats.Pbgra32 );
bitmap.Render( canvas );
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add( BitmapFrame.Create( bitmap ) );
using ( MemoryStream outStream = new MemoryStream() )
{
encoder.Save( outStream );
outStream.Seek( 0, SeekOrigin.Begin );
BitmapImage bmp = new BitmapImage { CacheOption = BitmapCacheOption.OnLoad };
bmp.BeginInit();
bmp.StreamSource = outStream;
bmp.EndInit();
}
当我将图像写入磁盘时,我看到的只是一张黑色图像——我以前做过,没有任何问题,但现在有一些东西在逃避我……我检查了宽度和高度以及缓冲区中的数据MemoryStream 和一切看起来都很好......
这只是一个测试,真正的目标是从 Canvas 视觉图像创建一个 BitmapSource。画布是在代码中使用形状(折线等)绘制的。然后我需要将此 BitmapSource 以大约每秒 60 帧的速率传递给 xaml 中的图像。我注意到如果我创建一个模拟 BitmapSource,Image.Source 正在使用 CachedBitmap,但是每次我更新我的(黑色)位图时它都会重新绑定到我的 BitmapImage。
关于如何以 60fps 在内存中创建 Canvas 并从中创建一个被 Image.Source 视为 CachedBitmap 的 BitmapSource 的建议?