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

本文共 3492 字,大约阅读时间需要 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);                }            }        }

运行效果:

源代码可以点击下载。

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

转载于:https://www.cnblogs.com/yang-fei/p/4029782.html

你可能感兴趣的文章
MySql Study Notes
查看>>
6 - laravel 基础 - 视图与模板引擎
查看>>
团队第二次作业
查看>>
linux 查询当前文件夹下的目录数量
查看>>
【python】入门第一篇
查看>>
1682: [Usaco2005 Mar]Out of Hay 干草危机
查看>>
supersr--NSURLConnection iOS2.0苹果原生请求
查看>>
iphone-common-codes-ccteam源代码 CCPlistFileReader.h
查看>>
构造方法
查看>>
"_OBJC_CLASS_$_MAMapServices", referenced from: 的问题修复
查看>>
SQL效率之索引
查看>>
线性支持向量分类机及其实现
查看>>
Yslow
查看>>
hdu 2504
查看>>
Axure产品原型设计工具
查看>>
ASM文件系统
查看>>
ajax学习笔记(原生js的ajax)
查看>>
Hadoop体系结构介绍
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
mysql 函数 事务
查看>>