zoukankan      html  css  js  c++  java
  • C#截图

        公司里不知道搞了网络什么限制,我这个机器自古以来上午都登不上腾讯QQ客户端,每次都是上午用WebQQ,中午吃完饭回来才能登客户端。WebQQ用起来慢,而且卡不说,有时候截个图都没有客户端来的便捷。从网上虽然下载了一些截图软件,用起来都不大方便,摸索着自己从网上找了些关于C#截图方面的核心代码,打造了一款属于自己的Winform截图工具。

    点此下载

        自己做的这款截图工具自我感觉用起来挺好的,大概介绍下使用方法,抓图的过程和其他的一样,抓完图后,双击左键复制到粘贴板,也可以在菜单里面操作,按ESC退出当前截图。

        先上个主界面和截图界面如下(截图软件就这么简单,自己闲来没事,在winform上模仿了个百度搜索,虽然画蛇添足,放上去后感觉给界面还添加了点灵气……):

    下面分享下核心代码:

    1. 左键按下开始绘图代码
      复制代码
       1         /// <summary>
       2         /// 按下左键开始绘制
       3         /// </summary>
       4         private void imageProcessBox1_MouseDown(object sender, MouseEventArgs e) {
       5             if (imageProcessBox1.Cursor != Cursors.SizeAll &&
       6                 imageProcessBox1.Cursor != Cursors.Default)
       7                 panel1.Visible = false;         //表示改变选取大小 隐藏工具条
       8             //若果在选取类点击 并且有选择工具
       9             if (e.Button == MouseButtons.Left && imageProcessBox1.IsDrawed && HaveSelectedToolButton()) {
      10                 if (imageProcessBox1.SelectedRectangle.Contains(e.Location)) {
      11                     m_ptOriginal = e.Location;
      12                     if (tBtn_Text.IsSelected) {         //如果选择的是绘制文本 弹出文本框
      13                         textBox1.Location = e.Location;
      14                         textBox1.Visible = true;
      15                         textBox1.Focus();
      16                         return;
      17                     }
      18                     m_isStartDraw = true;
      19                     Cursor.Clip = imageProcessBox1.SelectedRectangle;
      20                 }
      21             }
      22         }
      复制代码
    2. 移动鼠标开始截图代码
      复制代码
       1         /// <summary>
       2         /// 移动鼠标获取截图区域
       3         /// </summary>
       4         private void imageProcessBox1_MouseMove(object sender, MouseEventArgs e) {
       5             m_ptCurrent = e.Location;
       6             //根据是否选择有工具决定 鼠标指针样式
       7             if (imageProcessBox1.SelectedRectangle.Contains(e.Location) && HaveSelectedToolButton() && imageProcessBox1.IsDrawed)
       8                 this.Cursor = Cursors.Cross;
       9             else if (!imageProcessBox1.SelectedRectangle.Contains(e.Location))
      10                 this.Cursor = Cursors.Default;
      11 
      12             if (imageProcessBox1.IsStartDraw && panel1.Visible)   //在重置选取的时候 重置工具条位置(成立于移动选取的时候)
      13                 this.SetToolBarLocation();
      14 
      15             if (m_isStartDraw) {        //如果在区域内点下那么绘制相应图形
      16                 using (Graphics g = Graphics.FromImage(m_bmpLayerShow)) {
      17                     int tempWidth = 1;
      18                     if (toolButton2.IsSelected) tempWidth = 3;
      19                     if (toolButton3.IsSelected) tempWidth = 5;
      20                     Pen p = new Pen(colorBox1.SelectedColor, tempWidth);
      21 
      22                     #region   绘制矩形
      23 
      24                     if (tBtn_Rect.IsSelected) {
      25                         int tempX = e.X - m_ptOriginal.X > 0 ? m_ptOriginal.X : e.X;
      26                         int tempY = e.Y - m_ptOriginal.Y > 0 ? m_ptOriginal.Y : e.Y;
      27                         g.Clear(Color.Transparent);
      28                         g.DrawRectangle(p, tempX - imageProcessBox1.SelectedRectangle.Left, tempY - imageProcessBox1.SelectedRectangle.Top, Math.Abs(e.X - m_ptOriginal.X), Math.Abs(e.Y - m_ptOriginal.Y));
      29                         imageProcessBox1.Invalidate();
      30                     }
      31 
      32                     #endregion
      33 
      34                     #region    绘制圆形
      35 
      36                     if (tBtn_Ellipse.IsSelected) {
      37                         g.DrawLine(Pens.Red, 0, 0, 200, 200);
      38                         g.Clear(Color.Transparent);
      39                         g.DrawEllipse(p, m_ptOriginal.X - imageProcessBox1.SelectedRectangle.Left, m_ptOriginal.Y - imageProcessBox1.SelectedRectangle.Top, e.X - m_ptOriginal.X, e.Y - m_ptOriginal.Y);
      40                         imageProcessBox1.Invalidate();
      41                     }
      42 
      43                     #endregion
      44 
      45                     #region    绘制箭头
      46 
      47                     if (tBtn_Arrow.IsSelected) {
      48                         g.Clear(Color.Transparent);
      49                         System.Drawing.Drawing2D.AdjustableArrowCap lineArrow =
      50                             new System.Drawing.Drawing2D.AdjustableArrowCap(4, 4, true);
      51                         p.CustomEndCap = lineArrow;
      52                         g.DrawLine(p, (Point)((Size)m_ptOriginal - (Size)imageProcessBox1.SelectedRectangle.Location), (Point)((Size)m_ptCurrent - (Size)imageProcessBox1.SelectedRectangle.Location));
      53                         imageProcessBox1.Invalidate();
      54                     }
      55 
      56                     #endregion
      57 
      58                     #region    绘制线条
      59 
      60                     if (tBtn_Brush.IsSelected) {
      61                         Point ptTemp = (Point)((Size)m_ptOriginal - (Size)imageProcessBox1.SelectedRectangle.Location);
      62                         p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
      63                         g.DrawLine(p, ptTemp, (Point)((Size)e.Location - (Size)imageProcessBox1.SelectedRectangle.Location));
      64                         m_ptOriginal = e.Location;
      65                         imageProcessBox1.Invalidate();
      66                     }
      67 
      68                     #endregion
      69 
      70                     p.Dispose();
      71                 }
      72             }
      73         }
      复制代码
    3. 保存到粘贴板

      1         //将图像保存到剪贴板
      2         private void tBtn_Finish_Click(object sender, EventArgs e) {
      3             Clipboard.SetImage(m_bmpLayerCurrent);
      4             this.Close();
      5         }
    4. 保存图片到硬盘

      复制代码
       1 private void tBtn_Save_Click(object sender, EventArgs e) {
       2             SaveFileDialog saveDlg = new SaveFileDialog();
       3             saveDlg.Filter = "位图(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg";
       4             saveDlg.FilterIndex = 1;
       5             saveDlg.FileName = "CAPTURE_" + GetTimeString();
       6             if (saveDlg.ShowDialog() == DialogResult.OK) {
       7                 switch (saveDlg.FilterIndex) {
       8                     case 1:
       9                         m_bmpLayerCurrent.Clone(new Rectangle(0, 0, m_bmpLayerCurrent.Width, m_bmpLayerCurrent.Height),
      10                             System.Drawing.Imaging.PixelFormat.Format24bppRgb).Save(saveDlg.FileName,
      11                             System.Drawing.Imaging.ImageFormat.Bmp);
      12                         this.Close();
      13                         break;
      14                     case 2:
      15                         m_bmpLayerCurrent.Save(saveDlg.FileName,
      16                             System.Drawing.Imaging.ImageFormat.Jpeg);
      17                         this.Close();
      18                         break;
      19                 }
      20             }
      21         }
      复制代码

      正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!

     
     http://www.cnblogs.com/wenyang-rio/archive/2013/01/23/2865958.html
     
    标签: 分享
  • 相关阅读:
    F#周报2019年第40期
    F#周报2019年第39期
    F#周报2019年第38期
    python模块之time_random
    python小趣味_520绘制一个心形.
    python模块之json_pickle_shelve
    python基础17_列表推导式 vs 生成器表达式
    python基础16_闭包_装饰器
    Spark安装笔记
    python基础15下_迭代器_生成器
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2872691.html
Copyright © 2011-2022 走看看