以此为基础使用DrawingContext对象将Canvas及其Child中的对象在DrawingVisual 虚画布上重新进行构图,然后Render DrawingVisual 就可以生成一张位图了。
示例:
Canvas cvs = new Canvas(); cvs.Width = 700; cvs.Height = 200; Label lb = new Label(); lb.content = ; Canvas.SetTop(lb,50); Canvas.Setleft(lb,200); cvs.child.add(lb); DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); //构造一个矩形 Rect rect = new Rect(new System.Windows.Point(0, 0), new System.Windows.Point(cvs.ActualWidth, cvs.ActualHeight)); //画一个矩形 drawingContext.DrawRectangle(cvs.Background, new System.Windows.Media.Pen(), rect); //画文字 drawingContext.DrawText(new FormattedText(), new System.Windows.Point(Canvas.GetLeft(lb), Canvas.GetTop(lb))); drawingContext.Close(); RenderTargetBitmap bmp = new RenderTargetBitmap(cvs.Width, cvs.Height, 96, 96, PixelFormats.Pbgra32); //Render DrawingVisual bmp.Render(drawingVisual); ; string Extension = System.IO.Path.GetExtension(file).ToLower(); BitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); using (Stream stm = File.Create(file)) { encoder.Save(stm); }