程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# GDI+簡單繪圖(三)(3)

C# GDI+簡單繪圖(三)(3)

編輯:關於C語言

C.創建了Catch窗體後,我們在截圖按鈕(位於聊天窗體上)上加入以下事件:

private void bCatch_Click(object sender, EventArgs e)
    {
      if (bCatch_HideCurrent.Checked)
      {
        this.Hide();//隱藏當前窗體
        Thread.Sleep(50);//讓線程睡眠一段時間,窗體消失需要一點時間
        Catch CatchForm = new Catch();
        Bitmap CatchBmp = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height);//新建一個和屏幕大小相同的圖片
        Graphics g = Graphics.FromImage(CatchBmp);
        g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));//保存全屏圖片
        CatchForm.BackgroundImage = CatchBmp;//將Catch窗體的背景設為全屏時的圖片
        if (CatchForm.ShowDialog() == DialogResult.OK)
        {//如果Catch窗體結束,就將剪貼板中的圖片放到信息發送框中
          IDataObject iData = Clipboard.GetDataObject();
          DataFormats.Format myFormat = DataFormats.GetFormat(DataFormats.Bitmap);
          if (iData.GetDataPresent(DataFormats.Bitmap))
          {
            richtextbox1.Paste(myFormat);
            Clipboard.Clear();//清除剪貼板中的對象
          }
          this.Show();//重新顯示窗體
        }
      }
    }

這樣我們的截圖功能便完成了.

我想對於初學者來說如何消去第一次繪制的圖片是個比較困難的問題.如果沒有采取措施,你會發現只要你鼠標移動,就會畫一個矩形,這樣便會出現N多的矩形,而我們只是要最後的那一個.

一般解決這種問題的方法有兩種:

1.就是在繪制第二個圖形時,我們先用與底色相同的顏色將上次繪制的圖形重新繪制一下.但這往往需要底色為純色時使用.

2.我們並不直接將圖形畫在畫板上,我們用一個圖片A來保存原畫板上的圖片.然後再新建一個與圖片A相同的圖片B,將我們要繪制的圖形畫在該圖片B上,然後再將該圖片B畫在畫板上.這樣圖片A並沒有被改變.於是第二次畫的時候我們還是同樣新建一個與圖片A相同的圖片進行繪制.那麼上一次的圖形就不會被保留下來.問題也就解決了.

下一次,向大家介紹如何做一個仿Windows畫板的程序.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved