最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 實現(xiàn)截圖軟件功能實例代碼

 更新時間:2017年06月12日 09:26:05   投稿:mrr  
這篇文章主要介紹了C# 實現(xiàn)截圖軟件功能實例代碼,需要的朋友可以參考下

本文是利用C# 開發(fā)截圖軟件的小例子,以供學(xué)習(xí)分享使用。

思路:

  1. 截取屏幕圖片。
  2. 獲取要截取的范圍,即左上角,右下角坐標(biāo)
  3. 填充到PictureBox中。
  4. 筆觸功能,熒光筆,矩形,橡皮擦,復(fù)制,保存功能

涉及的知識點:

  • MenuStrip:為窗體提供菜單系統(tǒng)。以ToolStripMenuItem為菜單子選項
  • ToolStrip:為 Windows 工具欄對象提供容器。以ToolStripButton【表示包含文本和圖像的可選】為工具欄子元素
  • PictureBox:表示用于顯示圖像的 Windows 圖片框控件。不過本文對此空間進行了重寫
  • Screen:可用于獲取工作屏幕區(qū)域
  • Graphics:封裝一個 GDI+ 繪圖圖面。此類不能被繼承。此類的CopyFromScreen方法用于獲取屏幕圖像
  • 鼠標(biāo)事件:包括MouseDown,MouseMove,MouseUp事件,通過MouseEventArgs中的Location獲取鼠標(biāo)的位置。
  • Clipboard: 提供將數(shù)據(jù)置于系統(tǒng)剪貼板中以及從中檢索數(shù)據(jù)的方法。此類不能被繼承。
  • Cursor:設(shè)置鼠標(biāo)的顯示的光標(biāo)的樣式。
  • OnPaint:重繪事件,當(dāng)控件刷新時響應(yīng)此事件。

效果圖如下【主要實現(xiàn)了截圖,保存,復(fù)制,畫矩形,筆觸,熒光筆,橡皮擦等功能】:

保存后圖片如下:

-------------------------------------------------------------------------------------------------------------------------------

核心代碼如下:

截取屏幕圖像:

public Bitmap GetScreen()
 {
  //獲取整個屏幕圖像,不包括任務(wù)欄
  Rectangle ScreenArea = Screen.GetWorkingArea(this);
  Bitmap bmp = new Bitmap(ScreenArea.Width, ScreenArea.Height);
  using (Graphics g = Graphics.FromImage(bmp))
  {
  g.CopyFromScreen(0, 0, 0, 0, new Size(ScreenArea.Width,ScreenArea.Height));
  }
  return bmp;
 }

繪制圖形功能:

#region 繪制功能
 protected override void OnPaint(PaintEventArgs pe)
 {
  base.OnPaint(pe);
  Graphics g = pe.Graphics;
  DrawHistory(g);
  //繪制當(dāng)前線
  if (startDraw && this.curLine.PointList != null && this.curLine.PointList.Count > 0)
  {
  DrawLine(g,this.curLine);
  }
  if (startDraw && this.curRect.Start != null && this.curRect.End != null && this.curRect.Start != this.curRect.End) {
  DrawRectangle(g, this.curRect);
  }
 }
 public void DrawHistory(Graphics g) {
  //繪制線歷史記錄
  if (LineHistory != null)
  {
  foreach (HLine lh in LineHistory)
  {
   if (lh.PointList.Count > 10)
   {
   DrawLine(g, lh);
   }
  }
  }
  //繪制矩形歷史記錄
  if (RectHistory != null)
  {
  foreach (HRectangle lh in RectHistory)
  {
   if (lh.Start!=null&& lh.End!=null && lh.Start!=lh.End)
   {
   DrawRectangle(g, lh);
   }
  }
  }
 }
 /// <summary>
 /// 繪制線
 /// </summary>
 /// <param name="g"></param>
 /// <param name="line"></param>
 private void DrawLine(Graphics g,HLine line) {
  g.SmoothingMode = SmoothingMode.AntiAlias;
  using (Pen p = new Pen(line.LineColor, line.LineWidth))
  {
  //設(shè)置起止點線帽 
  p.StartCap = LineCap.Round;
  p.EndCap = LineCap.Round;

  //設(shè)置連續(xù)兩段的聯(lián)接樣式 
  p.LineJoin = LineJoin.Round;
  g.DrawCurve(p, line.PointList.ToArray()); //畫平滑曲線 
  }
 }
 /// <summary>
 /// 繪制矩形
 /// </summary>
 /// <param name="g"></param>
 /// <param name="rect"></param>
 private void DrawRectangle(Graphics g, HRectangle rect)
 {
  g.SmoothingMode = SmoothingMode.AntiAlias;
  using (Pen p = new Pen(rect.LineColor, rect.LineWidth))
  {
  //設(shè)置起止點線帽 
  p.StartCap = LineCap.Round;
  p.EndCap = LineCap.Round;

  //設(shè)置連續(xù)兩段的聯(lián)接樣式 
  p.LineJoin = LineJoin.Round;
  g.DrawRectangle(p, rect.Start.X, rect.Start.Y, rect.End.X - rect.Start.X, rect.End.Y - rect.Start.Y); //畫平滑曲線 
  }
 }
 public void Earser(Point p0)
 {
  for (int i = lineHistory.Count - 1; i >= 0; i--)
  {
  HLine line = lineHistory[i];
  bool flag = false;
  foreach (Point p1 in line.PointList)
  {
   double distance = GetDistance(p0, p1);
   if (Math.Abs(distance) < 6)
   {
   //需要刪除
   flag = true;
   break;
   }

  }
  if (flag)
  {
   lineHistory.RemoveAt(i);
  }
  }
  //擦除矩形
  for (int i = rectHistory.Count - 1; i >= 0; i--)
  {
  HRectangle rect = rectHistory[i];
  
  if (p0.X>rect.Start.X && p0.X<rect.End.X && p0.Y > rect.Start.Y && p0.Y < rect.End.Y) {
   
   rectHistory.RemoveAt(i);
  }
  }
 }
 /// <summary>
 /// 獲取兩點之間的距離
 /// </summary>
 /// <param name="p0"></param>
 /// <param name="p1"></param>
 /// <returns></returns>
 private double GetDistance(Point p0, Point p1) {
  return Math.Sqrt(Math.Pow((p0.X - p1.X), 2) + Math.Pow((p0.Y - p1.Y), 2));
 }
 #endregion

以下是源碼功能連接,需要的朋友可以自行下載。

源碼鏈接

以上所述是小編給大家介紹的C# 實現(xiàn)截圖軟件功能實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C# String Replace高效的實例方法

    C# String Replace高效的實例方法

    C# String Replace高效的實例方法,需要的朋友可以參考一下
    2013-05-05
  • C#實現(xiàn)定時任務(wù)Task Scheduler的示例代碼

    C#實現(xiàn)定時任務(wù)Task Scheduler的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)定時任務(wù)Task Scheduler的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • c#入門之類型轉(zhuǎn)換詳解

    c#入門之類型轉(zhuǎn)換詳解

    這篇文章主要介紹了c#的類型轉(zhuǎn)換詳解,類型轉(zhuǎn)換分兩種形式:隱式轉(zhuǎn)換、顯示轉(zhuǎn)換,下面是詳細(xì)介紹
    2014-04-04
  • C#算法之散列表

    C#算法之散列表

    本文詳細(xì)講解了C#算法之散列表,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke 方法的區(qū)別和聯(lián)系

    C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke&

    在C#中,委托(Delegate)提供了多種調(diào)用方式,包括 Invoke、BeginInvoke、EndInvoke 和 DynamicInvoke,每種調(diào)用方式都有其特定的用途和適用場景,下面將詳細(xì)介紹這些方法的區(qū)別與聯(lián)系,感興趣的朋友一起看看吧
    2025-03-03
  • C# 兩種方式反編譯修改源碼(dnspy,ildasm & ilasm)

    C# 兩種方式反編譯修改源碼(dnspy,ildasm & ilasm)

    這篇文章主要介紹了C# 兩種方式反編譯修改源碼(dnspy,ildasm & ilasm),幫助大家更好的理解和使用c#語言,感興趣的朋友可以了解下
    2020-11-11
  • C#驗證碼問題的快速解決方法

    C#驗證碼問題的快速解決方法

    下面小編就為大家?guī)硪黄狢#驗證碼問題的快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 淺談C#多線程下的調(diào)優(yōu)

    淺談C#多線程下的調(diào)優(yōu)

    本文主要介紹了C#多線程下的調(diào)優(yōu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#使用Log4.net記錄日志文件

    C#使用Log4.net記錄日志文件

    這篇文章介紹了C#使用Log4.net記錄日志文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#開發(fā)教程之FTP上傳下載功能詳解

    C#開發(fā)教程之FTP上傳下載功能詳解

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)教程之FTP上傳下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

平顶山市| 巴林右旗| 呼图壁县| 盐津县| 兰考县| 白朗县| 水城县| 阿巴嘎旗| 昌邑市| 德钦县| 平利县| 永川市| 许昌县| 新泰市| 广平县| 平安县| 湛江市| 漠河县| 安塞县| 靖西县| 华安县| 阿鲁科尔沁旗| 外汇| 西充县| 兴城市| 临沧市| 梁平县| 五大连池市| 郓城县| 改则县| 岢岚县| 安丘市| 阿坝县| 焉耆| 怀集县| 新竹市| 清新县| 大姚县| 厦门市| 泾源县| 蚌埠市|