zoukankan      html  css  js  c++  java
  • C#截图操作方法大全

    using System.Drawing;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        class ScreenCapture
        {
            private Bitmap _screenshot = null;
     
            /// <summary>
            /// 截取全屏
            /// </summary>
            /// <returns>返回值</returns>
            public Bitmap CaptureScreen()
            {
                return Capture(Rectangle.Empty, false);
            }
     
            /// <summary>
            /// 截取全屏并保存
            /// </summary>
            /// <param name="fileName">文件路径</param>
            /// <returns></returns>
            public Bitmap CaptureScreen(string fileName)
            {
                Bitmap screenshot = Capture(Rectangle.Empty, false);
                saveImage(fileName, screenshot);
                return screenshot;
            }
     
            /// <summary>
            /// 截屏到剪切板
            /// </summary>
            public void CopyToClipboard()
            {
                if (this._screenshot != null)
                    Clipboard.SetImage(this._screenshot);
                else if (this._screenshot == null)
                    MessageBox.Show("No screenshot found. Please take a screenshot first.", "Copy to Clipboard");
            }
     
            /// <summary>
            /// 区域截屏
            /// </summary>
            /// <param name="rect">区域范围</param>
            /// <returns>返回值</returns>
            public Bitmap CaptureRectangle(Rectangle rect)
            {
                return Capture(rect, true);
            }
     
            /// <summary>
            /// 区域截屏
            /// </summary>
            /// <param name="rect">区域范围</param>
            /// <param name="fileName">文件路径</param>
            /// <returns>返回值</returns>
            public Bitmap CaptureRectangle(Rectangle rect, string fileName)
            {
                Bitmap screenshot = Capture(rect, true);
                saveImage(fileName, screenshot);
                return screenshot;
            }
     
            private Bitmap Capture(Rectangle rect, bool isRect)
            {
                int screenWidth = Screen.PrimaryScreen.Bounds.Width;
                int screenHeight = Screen.PrimaryScreen.Bounds.Height;
     
                Bitmap screenshot = null;
     
                if(!isRect)
                    screenshot = new Bitmap(screenWidth, screenHeight);
                else if(isRect)
                    screenshot = new Bitmap(rect.Width, rect.Height);
     
                Graphics g = Graphics.FromImage(screenshot);
                if (!isRect)
                {
                    g.CopyFromScreen(Point.Empty, Point.Empty, screenshot.Size);
                }
                else if (isRect)
                {
                    g.CopyFromScreen(new Point(rect.X, rect.Y), Point.Empty, rect.Size);
                }
     
                this._screenshot = screenshot;
     
                return screenshot;
            }
     
            private void saveImage(string fileName, Bitmap screenshot)
            {
                string ext = System.IO.Path.GetExtension(fileName);;
                ext = ext.ToLower();
     
                if (ext == ".jpg" || ext == ".jpeg")
                    screenshot.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                else if(ext == ".gif")
                    screenshot.Save(fileName, System.Drawing.Imaging.ImageFormat.Gif);
                else if(ext == ".png")
                    screenshot.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);
                else if (ext == ".bmp")
                    screenshot.Save(fileName, System.Drawing.Imaging.ImageFormat.Bmp);
                else if (ext == ".tiff")
                    screenshot.Save(fileName, System.Drawing.Imaging.ImageFormat.Tiff);
            }
        }
    }
  • 相关阅读:
    68、成员列表初始化?
    67、类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一 些?
    64、malloc申请的存储空间能用delete释放吗?
    63、new和delete的实现原理, delete是如何知道释放内存的大小的额?
    62、delete p、delete [] p、allocator都有什么作用?
    60、C++模板是什么,你知道底层怎么实现的?
    nyoj--814--又见拦截导弹(动态规划+贪心)
    hdoj--1950--Bridging signals(二分查找+LIS)
    nyoj--214--单调递增子序列(二)(二分查找+LIS)
    hdoj--1010--Tempter of the Bone(搜索+奇偶剪枝)
  • 原文地址:https://www.cnblogs.com/huhangfei/p/5000787.html
Copyright © 2011-2022 走看看