• winform实现截图功能


    该程序没有使用API函数.....只是简单为了学习一些知识点...

    实现原理:在窗体加载时截取整个屏幕保存为图片,在监视鼠标的事件,鼠标左键拖拉一个矩形框,获取此时矩形框的左上角坐标和右下角坐标, 这2个坐标即可为要抠取的图片定位,然后使用Clone方法截取指定图片,并且将该图片复制到粘贴板就OK了。 设置一个窗体,加载时将窗体边框设置为FormBorderStyle.None,并且将窗体最大化,且不再任务栏显示图标,设置不透明程度 自定义(默认值为1.0),并且在此时截取整个图片。

    然后监视鼠标按下的事件:在该事件中获取起始点的坐标,

     再监视鼠标按键放开的事件, 在该事件中获取鼠标放开的坐标,并在此时从最初截取的图片中抠取刚才2个坐标组成的矩形框范围图片,并保存到粘贴板中即可。

     在监视鼠标的移动事件,在该事件中动态获取高和宽,并用当前屏幕的画板使用指定画刷来填充鼠标拖拉的矩形范围框。使得用户可以看到自己的截取范围。

    以下为详细代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.IO; 
    using System.Drawing.Imaging; 
        
    namespace CutScreen 
        public partial class Form1 : Form 
        
            public Form1() 
            
                InitializeComponent(); 
            
        
            static int x = 0; 
            static int y = 0; 
            static int nowX = 0; 
            static int nowY = 0; 
            static bool isMouseClick = false
            static Graphics g; 
            static int width = 0; 
            static int height = 0; 
           // static Graphics gi; 
            static Bitmap bmp; 
            static string filename="1.jpg"
            static bool isOneDown = true
            static Bitmap bm; 
            private void btnCut_Click(object sender, EventArgs e) 
            
                   
            
        
            private void Form1_MouseDown(object sender, MouseEventArgs e) 
            
                if (isOneDown) 
                
                    x = MousePosition.X; 
                    y = MousePosition.Y; 
                    isMouseClick = true
                    isOneDown = false
                
               // MessageBox.Show(MousePosition.X.ToString() + "" + MousePosition.Y.ToString()); 
            
        
            private void Form1_MouseUp(object sender, MouseEventArgs e) 
            
        
                if (isMouseClick) 
                
                    // MessageBox.Show("放开后鼠标的位置:"+MousePosition.X.ToString() + "" + MousePosition.Y.ToString()); 
                    nowX = MousePosition.X + 1; 
                    nowY = MousePosition.Y + 1; 
        
                    Image newImage = Image.FromFile("1.jpg"); 
                    Rectangle destRect = new Rectangle(x, y, nowX - x, nowY - y); 
                    bmp = new Bitmap(nowX - x, nowY - y); 
                    bm = ((Bitmap)newImage).Clone(destRect, newImage.PixelFormat); 
                    bm.Save("temp.jpg"); 
                    newImage.Dispose(); 
                    isMouseClick = false
                
        
            
        
            private void Form1_MouseMove(object sender, MouseEventArgs e) 
            
                if (isMouseClick) 
                
                    width = Math.Abs(MousePosition.X - x); 
                    height = Math.Abs(MousePosition.Y - y); 
                    g = CreateGraphics(); 
                    g.Clear(BackColor); 
                    g.FillRectangle(Brushes.Navy, x < MousePosition.X ? x : MousePosition.X, y < MousePosition.Y ? y : MousePosition.Y, width + 1, height + 1); 
                
            
        
            private void Form1_MouseDoubleClick(object sender, MouseEventArgs e) 
            
                  
                this.Close(); 
                Application.Exit(); 
        
            
        
            private void Form1_Load(object sender, EventArgs e) 
            
        
                   
                Size size = Screen.PrimaryScreen.Bounds.Size; 
                Bitmap bmp = new Bitmap(size.Width, size.Height); 
                Graphics g = Graphics.FromImage(bmp); 
                g.CopyFromScreen(0, 0, 0, 0, size); 
                //filename = DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".jpg";  
        
                //注意以下顺序。 
                this.FormBorderStyle = FormBorderStyle.None; 
                this.WindowState = FormWindowState.Maximized; 
                this.ShowInTaskbar = false
                bmp.Save(filename, ImageFormat.Jpeg); 
                g = this.CreateGraphics(); 
                this.Opacity = 0.5; 
                   
            
            private void Form1_FormClosed(object sender, FormClosedEventArgs e) 
            
                    
                Clipboard.SetImage(bm);//将图片保存到粘贴板,不保存实际文件。 
                bm.Dispose(); 
                File.Delete("temp.jpg"); 
                File.Delete("1.jpg"); 
            
        
    }

    有错之处欢迎纠正。
            

    本文从百度空间搬家到博客园。

  • 相关阅读:
    DevExpress 学习使用之 ComboBoxEdit
    DevExpress 学习使用之 NavBarControl
    代码重构方向原则指导(转载 cnblogs)
    适合编写代码的字体 Source Code Pro
    Asycn/Await 异步编程初窥(二)
    Asycn/Await 异步编程初窥
    【数据结构】冒泡排序算法示例
    【数据结构】分治算法求解假硬币问题
    【数据结构】图结构操作示例
    【数据结构】建立和平衡AVL二叉树
  • 原文地址:https://www.cnblogs.com/yunanwu/p/4168555.html
Copyright © 2020-2023  润新知