private Brush MakeBrushFromVisual(Visual visual, Rect bounds, int dpi) { var viewport3D = visual as Viewport3D; if (viewport3D == null) { Drawing drawing = VisualTreeHelper.GetDrawing(visual); if (this.drawOutlines) { bounds.Inflate(outlinePen.Thickness / 2, outlinePen.Thickness / 2); } var offsetMatrix = new Matrix(1, 0, 0, 1, -bounds.Left, -bounds.Top); var offsetMatrixTransform = new MatrixTransform(offsetMatrix); offsetMatrixTransform.FreezeIfPossible(); var drawingVisual = new DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) { drawingContext.PushTransform(offsetMatrixTransform); if (this.drawOutlines) { drawingContext.DrawRectangle(null, outlinePen, bounds); } drawingContext.DrawDrawing(drawing); drawingContext.Pop(); } visual = drawingVisual; } var renderTargetBitmap = VisualCaptureUtil.RenderVisual(visual, bounds.Size, dpi, viewport3D: viewport3D); renderTargetBitmap.FreezeIfPossible(); var imageBrush = new ImageBrush(renderTargetBitmap); imageBrush.FreezeIfPossible(); return(imageBrush); }
private void HandleSave(object sender, ExecutedRoutedEventArgs e) { var dpiText = ((TextBlock)((ComboBoxItem)this.dpiBox.SelectedItem).Content).Text; var filename = "SnoopScreenshot"; if (this.DataContext is FrameworkElement element && string.IsNullOrEmpty(element.Name) == false) { filename = $"SnoopScreenshot_{element.Name}"; } filename += "_" + dpiText; filename += ".png"; var filePath = Path.Combine(lastSaveDirectory, filename); var fileDialog = new SaveFileDialog { AddExtension = true, CheckPathExists = true, DefaultExt = "png", InitialDirectory = Path.GetDirectoryName(filePath), FileName = Path.GetFileNameWithoutExtension(filePath), Filter = "Image File (*.png)|*.png", FilterIndex = 0 }; if (fileDialog.ShowDialog(this).Value) { lastSaveDirectory = Path.GetDirectoryName(fileDialog.FileName); VisualCaptureUtil.SaveVisual(this.DataContext as Visual, int.Parse(dpiText), filePath); this.Close(); } }