C#进行屏幕截图简洁代码

本文介绍了如何使用C#编写代码来实现屏幕截图功能。通过创建窗体、监听鼠标事件,实现了选择截图区域并保存为图像,同时可以将截图复制到剪贴板。主要涉及到Graphics对象、CopyFromScreen方法等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    public partial class Form_CuttingBody : Form
      {

        private Graphics m_mainPaiter;         //主画笔
        private Pen m_Pen;                     //笔
        private bool m_IsMouseDown;
        private bool m_bRectCompleted;         //绘制是否完成
        private Image m_sourceImage;            //原来的图形
        private Rectangle m_Rect;        //就是要保存的矩形
        private Point downPoint;        //鼠标按下的点

        int tmpx;
        int tmpy;
        public Form_CuttingBody()
        {
            InitializeComponent();
        }

        private void Form_CuttingBody_DoubleClick(object sender, EventArgs e)
        {
            if(((MouseEventArgs)e).Button == MouseButtons.Left
                && m_Rect.Contains(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y))
            {
                //其中一种保存方法
                Image saveImage = new Bitmap(m_Rect.Width, m_Rect.Height);
                Graphics safe_graph = Graphics.FromImage(saveImage);
                safe_graph.CopyFromScreen(m_Rect.X + 1, m_Rect.Y + 1, 0, 0, m_Rect.Size);
                Clipboard.SetImage(saveImage);     //添加到剪贴板中
                this.Close();
           
           
            }
        }

        private void Form_CuttingBody_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                m_IsMouseDown = true;

                if (m_bRectCompleted == false)
                {
                    m_Rect.X = e.X;
                    m_Rect.Y = e.Y;
                    downPoint = new Point(e.X, e.Y);
                }

                if (m_bRectCompleted == true)
                {
                    tmpx = e.X;
                    tmpy = e.Y;
               
                }
           
            }

            if (e.Button == MouseButtons.Right)
            {
                if (m_bRectCompleted == false)
                {
                    this.Close();
                    return;
                }

                m_mainPaiter.DrawImage(m_sourceImage, 0, 0);
                m_bRectCompleted = false;
            }
        }

        private void Form_CuttingBody_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                m_IsMouseDown = false;
                m_bRectCompleted = true;
            }
        }

        private void Form_CuttingBody_MouseMove(object sender, MouseEventArgs e)
        {
            if (m_bRectCompleted == false)
            {
                if (m_IsMouseDown == true)
                {

                    Image New = DrawScreen((Image)m_sourceImage.Clone(), e.X, e.Y);
                    m_mainPaiter.DrawImage(New, 0, 0);
                    New.Dispose();
               
                }
            }


            if (m_bRectCompleted == true)
            {
                if (m_Rect.Contains(e.X, e.Y))
                {
                    //this.Cursor = Cursors.Hand;
                    if (m_IsMouseDown == true)
                    {
                        //和上一次的位置比较获取偏移量
                        m_Rect.X = m_Rect.X + e.X - tmpx;
                        m_Rect.Y = m_Rect.Y + e.Y - tmpy;
                        //记录现在的位置
                        tmpx = e.X;
                        tmpy = e.Y;
                        MoveRect((Image)m_sourceImage.Clone(), m_Rect);
                    }
                }
            }
        }


        private Image DrawScreen(Image back, int Mouse_x, int Mouse_y)
        {
            Graphics Painter = Graphics.FromImage(back);
            DrawRect(Painter, Mouse_x, Mouse_y);
            return back;
        }

        private void DrawRect(Graphics Painter, int Mouse_x, int Mouse_y)
        {
            int heigth = 0;
            int width = 0;
            if (Mouse_y < m_Rect.Y)
            {
                m_Rect.Y = Mouse_y;
                heigth = downPoint.Y - Mouse_y;

            }
            else
            {
                heigth = Mouse_y - downPoint.Y;
           
            }

            if (Mouse_x < m_Rect.X)
            {
                m_Rect.X = Mouse_x;
                width = downPoint.X - Mouse_x;
            }
            else
            {
                width = Mouse_x - downPoint.X;
            }
            m_Rect.Size = new Size(width, heigth);
            Painter.DrawRectangle(m_Pen, m_Rect);
       
        }
        private void MoveRect(Image image, Rectangle Rect)
        {
            Graphics Painter = Graphics.FromImage(image);
            Painter.DrawRectangle(m_Pen, Rect.X, Rect.Y, Rect.Width, Rect.Height);
            DrawRect(Painter, 0, 0);
            m_mainPaiter.DrawImage(image, 0, 0);
            image.Dispose();
        }

        private void Form_CuttingBody_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            m_mainPaiter = this.CreateGraphics();
            m_Pen = new Pen(Brushes.Blue);
            m_IsMouseDown = false;
            m_sourceImage = this.BackgroundImage;
            m_Rect = new Rectangle();
            m_bRectCompleted = false;
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值