中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C#如何實(shí)現(xiàn)截圖軟件功能-創(chuàng)新互聯(lián)

這篇文章主要介紹C#如何實(shí)現(xiàn)截圖軟件功能,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有陽高免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

思路:

  1. 截取屏幕圖片。

  2. 獲取要截取的范圍,即左上角,右下角坐標(biāo)

  3. 填充到PictureBox中。

  4. 筆觸功能,熒光筆,矩形,橡皮擦,復(fù)制,保存功能

涉及的知識(shí)點(diǎn):

  • MenuStrip:為窗體提供菜單系統(tǒng)。以ToolStripMenuItem為菜單子選項(xiàng)

  • ToolStrip:為 Windows 工具欄對(duì)象提供容器。以ToolStripButton【表示包含文本和圖像的可選】為工具欄子元素

  • PictureBox:表示用于顯示圖像的 Windows 圖片框控件。不過本文對(duì)此空間進(jìn)行了重寫

  • Screen:可用于獲取工作屏幕區(qū)域

  • Graphics:封裝一個(gè) 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)控件刷新時(shí)響應(yīng)此事件。

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

C#如何實(shí)現(xiàn)截圖軟件功能

保存后圖片如下:

C#如何實(shí)現(xiàn)截圖軟件功能

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

核心代碼如下:

截取屏幕圖像:

public Bitmap GetScreen()
 {
  //獲取整個(gè)屏幕圖像,不包括任務(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è)置起止點(diǎn)線帽 
  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è)置起止點(diǎn)線帽 
  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)
   {
   //需要?jiǎng)h除
   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>
 /// 獲取兩點(diǎn)之間的距離
 /// </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#是什么

C#是一個(gè)簡單、通用、面向?qū)ο蟮木幊陶Z言,它由微軟Microsoft開發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程從而成為.NET開發(fā)的選語言,但它不適用于編寫時(shí)間急迫或性能非常高的代碼,因?yàn)镃#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。

以上是“C#如何實(shí)現(xiàn)截圖軟件功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標(biāo)題:C#如何實(shí)現(xiàn)截圖軟件功能-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://www.rwnh.cn/article36/dgsdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)站收錄微信公眾號(hào)小程序開發(fā)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
濮阳县| 徐州市| 新田县| 调兵山市| 车险| 彭州市| 睢宁县| 青冈县| 临朐县| 沙坪坝区| 灌云县| 仪陇县| 遂川县| 台州市| 应城市| 寻乌县| 中西区| 大同县| 江陵县| 应用必备| 农安县| 堆龙德庆县| 台江县| 越西县| 巨野县| 定陶县| 肥乡县| 景谷| 盐亭县| 于都县| 武穴市| 绥德县| 滨州市| 敦煌市| 黄梅县| 奉化市| 建宁县| 太白县| 景德镇市| 中江县| 亚东县|