91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用C#內存Graphics對象

發布時間:2021-12-02 11:15:40 來源:億速云 閱讀:171 作者:iii 欄目:編程語言

本篇內容主要講解“怎么用C#內存Graphics對象”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用C#內存Graphics對象”吧!

SetBackgroundBitmap函數首先將窗體背景圖像保存到BackgroundBitmap變量中,然后根據該位圖圖像輪廓和透明色創建Region,BitmapToRegion就用于完成Bitmap到Region的轉換,程序再將這個Region付值給窗體的Region屬性以完成不規則窗體的創建。

public void SetBackgroundBitmap(Image image, Color transparencyColor)  {  BackgroundBitmap = new Bitmap(image);  Width = BackgroundBitmap.Width;  Height = BackgroundBitmap.Height;  Region = BitmapToRegion(BackgroundBitmap, transparencyColor);  }   public Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)  {  if (bitmap == null)  throw new ArgumentNullException("Bitmap", "Bitmap cannot be null!");   int height = bitmap.Height;  int width = bitmap.Width;  GraphicsPath path = new GraphicsPath();  for (int j = 0; j < height; j++)  for (int i = 0; i < width; i++)  {  if (bitmap.GetPixel(i, j) == transparencyColor)  continue;  int x0 = i;  while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))  i++;  path.AddRectangle(new Rectangle(x0, j, i - x0, 1));  }  Region region = new Region(path);  path.Dispose();  return region;  }

通知窗體背景以及文字的繪制在重載的OnPaintBackground方法中完成,而且利用了雙重緩沖區技術來進行繪制操作,代碼如下:

  1. protected override void OnPaintBackground(PaintEventArgs e)  

  2. {  

  3. Graphics grfx = e.Graphics;  

  4. grfx.PageUnit = GraphicsUnit.Pixel;  

  5. Graphics offScreenGraphics;  

  6. Bitmap offscreenBitmap;  

  7. offscreenBitmap = new Bitmap(BackgroundBitmap.Width, BackgroundBitmap.Height);  

  8. offScreenGraphics = Graphics.FromImage(offscreenBitmap);  

  9. if (BackgroundBitmap != null)  

  10. {  

  11. offScreenGraphics.DrawImage(BackgroundBitmap, 0, 0, 
    BackgroundBitmap.Width, BackgroundBitmap.Height);  

  12. }  

  13. DrawText(offScreenGraphics);  

  14. grfx.DrawImage(offscreenBitmap, 0, 0);  

上述代碼首先返回窗體繪制表面的Graphics并保存在變量grfx中,然后創建一個C#內存Graphics對象offScreenGraphics和內存位圖對象offscreenBitmap,將內存位圖對象的引用付值給offScreenGraphics,這樣所有對offScreenGraphics的繪制操作也都同時作用于offscreenBitmap,這時就將需要繪制到通知窗體表面的背景圖像BackgroundBitmap繪制到C#內存Graphics對象上,DrawText函數根據需要顯示文字的大小和范圍調用Graphics.DrawString將文字顯示在窗體的特定區域。***,調用Graphics.DrawImage將內存中已經繪制完成的圖像顯示到通知窗體表面。

我們還需要捕獲窗體的鼠標操作,有三個操作在這里進行,
1、處理拖動窗體操作
2、處理通知窗體的關閉操作
3、內容區域的單擊操作。
三個操作都需要檢測鼠標的當前位置與每個Rectangle區域的包含關系,只要單擊落在特定區域我們就進行相應的處理,代碼如下:

private void TaskbarForm_MouseDown(object sender, MouseEventArgs e)  {  if (e.Button == MouseButtons.Left)  {  if (TitlebarRectangle.Contains(e.Location)) //單擊標題欄時拖動  {  ReleaseCapture(); //釋放鼠標捕捉  SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);   //發送左鍵點擊的消息至該窗體(標題欄)  }  if (CloseBtnRectangle.Contains(e.Location)) //單擊Close按鈕關閉  {  this.Hide();  currentTop = 1;  }  if (ContentRectangle.Contains(e.Location )) //單擊內容區域  {  System.Diagnostics.Process.Start("http://www.Rithia.com");  }  }  }

該程序可以很好的進行通知窗體的顯示、停留和隱藏操作,并且具備簡單的換膚機制,在利用了雙重緩沖區繪圖技術后,可以保證窗體的繪制平滑且沒有閃爍。

到此,相信大家對“怎么用C#內存Graphics對象”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南安市| 寿宁县| 镇江市| 涿鹿县| 安乡县| 星座| 彭泽县| 田东县| 平遥县| 如东县| 开鲁县| 儋州市| 诸城市| 饶阳县| 五常市| 贡嘎县| 礼泉县| 珲春市| 晴隆县| 镇坪县| 锡林浩特市| 余姚市| 邵东县| 石棉县| 浪卡子县| 酒泉市| 蓬安县| 武功县| 双牌县| 安义县| 视频| 泸定县| 黄梅县| 常州市| 中西区| 万山特区| 措美县| 黄浦区| 禄丰县| 于都县| 盈江县|