下面分享下核心代码:

左键按下开始绘图代码

1         ///

2         /// 按下左键开始绘制

3         ///

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;   //沈阳骨科 www.wjkfk.com

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         }

移动鼠标开始截图代码

1         ///

2         /// 移动鼠标获取截图区域

3         ///

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); //百分之一www.ksair.com.tw

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         }

保存到粘贴板

1         //将图像保存到剪贴板

2         private void tBtn_Finish_Click(object sender, EventArgs e) {

3             Clipboard.SetImage(m_bmpLayerCurrent);

4             this.Close();

5         }

保存图片到硬盘

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         }

标签:QQ截图工具

顶一下

(1)

100%

踩一下

(0)

0%

28228e888785f01552585ad07655eeca.png

c7c2bc60863e1a278fb95c0edd389e05.png

1143549115df5e1ff79de6880ddf3808.gif

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐