internal static InternalSnippet TakeSnippet() { var height = SystemInformation.VirtualScreen.Height; var width = SystemInformation.VirtualScreen.Width; var X = SystemInformation.VirtualScreen.X; var Y = SystemInformation.VirtualScreen.Y; var rectangle = new Rectangle(X, Y, width, height); using (var bmp = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppPArgb)) { using (var graphics = Graphics.FromImage(bmp)) { using (var snipper = new SnippingTool(bmp, rectangle)) { graphics.CopyFromScreen(X, Y, 0, 0, bmp.Size); if (snipper.ShowDialog() == DialogResult.OK) { return(new InternalSnippet(snipper.Image, snipper.SelectedRectangle)); } return(null); } } } }
private void OnLoaded(object sender, RoutedEventArgs e) { var result = SnippingTool.TakeSnippet(); if (result == null) { Close(); return; } WindowState = WindowState.Normal; var rect = result.SelectedRectangle; // reposition the window so there's a neat effect of showing // the screenshot edit window in place of the selected region var top = rect.Top - 80 + SystemInformation.VirtualScreen.Top; var left = rect.Left - 80 + SystemInformation.VirtualScreen.Left; rect.Y = rect.Top - 80 + SystemInformation.VirtualScreen.Top; rect.X = rect.Left - 80 + SystemInformation.VirtualScreen.Left; var screen = Screen.GetBounds(rect); Matrix m = System.Windows.PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice; double dx = m.M11; double dy = m.M22; Top = top < screen.Top ? (screen.Top / dy) : (top / dy); Left = left < screen.Left ? (screen.Left / dx) : (left / dx); var image = result.Image; ImageBrush.ImageSource = result.ImageToBitmapSource(); var width = 400; // adjust window size to be slightly larger than // the image so nothing is cropped if (image.Width > width && image.Width > Width) { width = image.Width + 100; } var height = 300; if (image.Height > height && image.Height > Height) { height = image.Height + 100; } Width = width; Height = height; // adjust canvas that is hosting the image to match the image size InkCanvas.Width = image.Width; InkCanvas.Height = image.Height; }
private void OnLoaded(object sender, RoutedEventArgs e) { var result = SnippingTool.TakeSnippet(); if (result == null) { Close(); return; } WindowState = WindowState.Normal; var rect = result.SelectedRectangle; // reposition the window so there's a neat effect of showing // the screenshot edit window in place of the selected region var top = rect.Top - 80; var left = rect.Left - 80; Top = top > 0 ? top : 0; Left = left > 0 ? left : 0; var image = result.Image; ImageBrush.ImageSource = result.ImageToBitmapSource(); var width = 400; // adjust window size to be slightly larger than // the image so nothing is cropped if (image.Width > width && image.Width > Width) { width = image.Width + 100; } var height = 300; if (image.Height > height && image.Height > Height) { height = image.Height + 100; } Width = width; Height = height; // adjust canvas that is hosting the image to match the image size InkCanvas.Width = image.Width; InkCanvas.Height = image.Height; }