博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#屏幕截图
阅读量:5958 次
发布时间:2019-06-19

本文共 3444 字,大约阅读时间需要 11 分钟。

原文:

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

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

XAML:

 

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);                }            }        }

运行效果:

源代码可以点击下载。

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

转载地址:http://dsrxx.baihongyu.com/

你可能感兴趣的文章
如何用代码爬抓电商数据(附淘宝API调用实例)
查看>>
远程连接windows系统提示:其他用户要远程登录,需要通过远程桌面服务进行登录的权限......
查看>>
html5的移动开发二重身份需求
查看>>
我的友情链接
查看>>
10个SQL注入工具
查看>>
[李景山php]每天laravel-20160826|EncryptionServiceProvider
查看>>
[李景山php]每天laravel-20161005|Validator.php-5
查看>>
php读取大文件详解【OK】
查看>>
Gnome 快捷键汇总
查看>>
通过注册表修改我的文档等系统文件夹默认位置
查看>>
expdp 详解及实例
查看>>
C++中 栈的简单封装
查看>>
我的友情链接
查看>>
Linux常用命令--iconv
查看>>
varnish的了解与常用配置使用
查看>>
Product user profile information 没有导入
查看>>
DELL T410服务器U盘安装Centos7
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Sqlserver2008日志压缩
查看>>
虚拟机usb无线上网同时主机本地上网或无线无线上网
查看>>