您现在的位置是:首页 > 文章详情

C#屏幕截图

日期:2018-11-11点击:476
原文: C#屏幕截图

今天通过C#来实现一个简单的屏幕截图功能。实现思路,获取鼠标按下去的位置和鼠标左键释放的位置,计算这个区域的宽度和高度。然后通过 Graphics.CopyFromScreen 方法便可以获取到屏幕截图了。

下面通过C#+WPF来实现这个功能,代码如下:

XAML:

<Window x:Class="WPFCaptureScreenShot.CaptureWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CaptureWindow" AllowsTransparency="True" WindowStyle="None" Background="Black" Opacity="0.1" WindowState="Maximized" MouseDown="CaptureWindow_MouseDown" MouseMove="CaptureWindow_MouseMove"> <Canvas x:Name="CaptureCanvas"> </Canvas> </Window> 

 

 public partial class CaptureWindow : Window { private double x; private double y; private double width; private double height; private bool isMouseDown = false; public CaptureWindow() { InitializeComponent(); } private void CaptureWindow_MouseDown(object sender, MouseButtonEventArgs e) { isMouseDown = true; x = e.GetPosition(null).X; y = e.GetPosition(null).Y; } private void CaptureWindow_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if(isMouseDown) { // 1. 通过一个矩形来表示目前截图区域 System.Windows.Shapes.Rectangle rect = new System.Windows.Shapes.Rectangle(); double dx = e.GetPosition(null).X; double dy = e.GetPosition(null).Y; double rectWidth = Math.Abs(dx - x); double rectHeight = Math.Abs(dy - y); SolidColorBrush brush = new SolidColorBrush(Colors.White); rect.Width = rectWidth; rect.Height = rectHeight; rect.Fill = brush; rect.Stroke = brush; rect.StrokeThickness = 1; if (dx < x) { Canvas.SetLeft(rect, dx); Canvas.SetTop(rect, dy); } else { Canvas.SetLeft(rect, x); Canvas.SetTop(rect, y); } CaptureCanvas.Children.Clear(); CaptureCanvas.Children.Add(rect); if(e.LeftButton == MouseButtonState.Released) { CaptureCanvas.Children.Clear(); // 2. 获得当前截图区域 width = Math.Abs(e.GetPosition(null).X - x); height = Math.Abs(e.GetPosition(null).Y - y); if(e.GetPosition(null).X > x) { CaptureScreen(x, y, width, height); } else { CaptureScreen(e.GetPosition(null).X, e.GetPosition(null).Y, width, height); } isMouseDown = false; x = 0.0; y = 0.0; this.Close(); } } } private void CaptureScreen(double x, double y, double width, double height) { int ix = Convert.ToInt32(x); int iy = Convert.ToInt32(y); int iw = Convert.ToInt32(width); int ih = Convert.ToInt32(height); System.Drawing.Bitmap bitmap = new Bitmap(iw, ih); using(System.Drawing.Graphics graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen(ix, iy, 0, 0, new System.Drawing.Size(iw, ih)); SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "Png Files|*.png"; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { bitmap.Save(dialog.FileName, ImageFormat.Png); } } }

运行效果:

源代码可以点击这里下载。
如果你有其他方式实现,欢迎与我分享。如果对代码有疑问,可以在评论中指出。感谢阅读。

原文链接:https://yq.aliyun.com/articles/676574
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章