zoukankan      html  css  js  c++  java
  • winform截屏

    引自 http://www.cnblogs.com/aland-liu/archive/2011/07/20/Winform.html

    已经注册博客好久,一直由于工作原因没有打理。今天在网上看了一个截屏的方法思想,感觉不错。就按照这个思路和网友的代码进行整理编写了一个小工具。第一次发博客不足之处,还请高手们批评指正。

    废话就不多说放了,代码如下:

    截取全屏代码:

    try
                {
                    this.Hide();
                    Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty));
                    Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
                    Graphics g = Graphics.FromImage(bitmap);
                    g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
    
                    System.Threading.Thread.Sleep(50);
    
                    SaveFileDialog saveFileDialog = new SaveFileDialog();
                    saveFileDialog.Filter = "bmp files (*.bmp)|*.bmp";
                    saveFileDialog.Title = "保存文件";
                    saveFileDialog.ShowDialog();
                    bmpPath = saveFileDialog.FileName;
                    if ("" != bmpPath)
                    {
                        bitmap.Save(bmpPath, ImageFormat.Bmp);
                    }
                    bitmap.Dispose();
                    this.Show();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("抓图失败!");
                    this.Show();
                }

    frmChildScreen 窗体代码如下:

    private void frmChildScreen_Load(object sender, EventArgs e)
            {
                this.Cursor = Cursors.Cross;
    
                this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
                this.UpdateStyles();
                originBmp = new Bitmap(this.BackgroundImage);
            }
    
            private void Catch_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (!catchStart)
                    {
                        catchStart = true;
                        startPoint = new Point(e.X, e.Y);
                    }
                }
            }
    
            private void Catch_MouseClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
    
            private void Catch_MouseMove(object sender, MouseEventArgs e)
            {
                if (catchStart)
                {
                    Bitmap destBmp = (Bitmap)originBmp.Clone();
                    Point newPoint = new Point(startPoint.X, startPoint.Y);
                    Graphics g = Graphics.FromImage(destBmp);
                    Pen p = new Pen(Color.Blue, 1);
                    int width = Math.Abs(e.X - startPoint.X), height = Math.Abs(e.Y - startPoint.Y);
                    if (e.X < startPoint.X)
                    {
                        newPoint.X = e.X;
                    }
                    if (e.Y < startPoint.Y)
                    {
                        newPoint.Y = e.Y;
                    }
                    catchRect = new Rectangle(newPoint, new Size(width, height));
                    g.DrawRectangle(p, catchRect);
                    g.Dispose();
                    p.Dispose();
                    Graphics g1 = this.CreateGraphics();
                    g1 = this.CreateGraphics();
                    g1.DrawImage(destBmp, new Point(0, 0));
                    g1.Dispose();
                    destBmp.Dispose();
                }
            }
    
    
            private void Catch_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (catchStart)
                    {
                        catchStart = false;
                        catchFinish = true;
                    }
                }
            }
    
            private void Catch_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left && catchFinish)
                {
                    if (catchRect.Contains(new Point(e.X, e.Y)))
                    {
                        Bitmap bitmap = new Bitmap(catchRect.Width, catchRect.Height);
                        Graphics g = Graphics.FromImage(bitmap);
                        g.DrawImage(originBmp, new Rectangle(0, 0, bitmap.Width, bitmap.Height), catchRect, GraphicsUnit.Pixel);
    
                        SaveFileDialog saveFileDialog = new SaveFileDialog();
                        saveFileDialog.Filter = "bmp files (*.bmp)|*.bmp";
                        saveFileDialog.Title = "保存文件";
                        saveFileDialog.ShowDialog();
                        bmpPath = saveFileDialog.FileName;
                        if ("" != bmpPath)
                        {
                            bitmap.Save(bmpPath, ImageFormat.Bmp);
                        }
                        bitmap.Dispose();
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                }
            }

    截取局部屏幕代码如下:

    try
                {
                    this.Hide();
                    Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty));
    
                    Thread.Sleep(50);
                    frmChildScreen CatchForm = new frmChildScreen();
                    Bitmap catchBmp = new Bitmap(bounds.Width, bounds.Height);
                    Graphics g = Graphics.FromImage(catchBmp);
                    g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));
                    CatchForm.BackgroundImage = catchBmp;
                    if (CatchForm.ShowDialog() == DialogResult.OK)
                    {
                        this.Show();
                    }
    
                }
                catch (System.Exception e)
                {
                    MessageBox.Show("抓图失败!");
                    this.Show();
                }
  • 相关阅读:
    上市前为什么要分红
    在文件开始追加一行
    c++ 日期时间工具
    windows c++找不到time.h sys/types.h
    截取ls -l的某一列
    提取指定类型文件到指定目录,保留目录结构
    批量转换当前目录下的文件名为snake case
    vcpkg boost uuid Bcrypt 链接问题
    文件名pascal转underscore
    vcpkg cmake 找不到boost
  • 原文地址:https://www.cnblogs.com/baozhu/p/4263266.html
Copyright © 2011-2022 走看看