public static void ExportToPng(Uri path, InkCanvas Surface) { if (path == null) return; // Save current canvas transform Transform transform = Surface.LayoutTransform; // reset current transform (in case it is scaled or rotated) Surface.LayoutTransform = null; // Get the size of canvas Size size = new Size(Surface.ActualWidth, Surface.ActualHeight); // Measure and arrange the surface // VERY IMPORTANT Surface.Measure(size); Surface.Arrange(new Rect(size)); // Create a render bitmap and push the surface to it RenderTargetBitmap renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32); renderBitmap.Render(Surface); // Create a file stream for saving image using (FileStream outStream = new FileStream(path.LocalPath, FileMode.Create)) { // Use png encoder for our data PngBitmapEncoder encoder = new PngBitmapEncoder(); // push the rendered bitmap to it encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); // save the data to the stream encoder.Save(outStream); } // Restore previously saved layout Surface.LayoutTransform = transform; }
protected override Size MeasureOverride(Size availableSize) { inkCanvas.Measure(availableSize); return(inkCanvas.DesiredSize); }
private FrameworkElement cloneAll() { var clone = new InkCanvas(); foreach (var stroke in stack.AllStrokes) clone.Strokes.Add(stroke.Clone()); foreach (var child in stack.Work.Children) { var fe = (FrameworkElement)child; if (child is Image) { var image = (Image)child; var e = viewFor(image); Panel.SetZIndex(e, image.tag().author == Globals.me ? 3 : 1); clone.Children.Add(e); } else { var e = viewFor(fe); Panel.SetZIndex(e, 4); clone.Children.Add(e); } } var size = new Size(ActualWidth, ActualHeight); clone.Measure(size); clone.Arrange(new Rect(size)); return clone; }