首页 > 代码库 > C#屏幕截图

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

运行效果:

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

C#屏幕截图