C#螢幕截圖

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   for   sp   

今天通過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#螢幕

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.