本篇內容主要講解“怎么用C#內存Graphics對象”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用C#內存Graphics對象”吧!
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設服務10余年為成都混凝土攪拌罐小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網(wǎng)站定制營銷網(wǎng)站建設商城網(wǎng)站建設手機網(wǎng)站建設小程序網(wǎng)站建設網(wǎng)站改版,從內容策劃、視覺設計、底層架構、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設服務。
SetBackgroundBitmap函數(shù)首先將窗體背景圖像保存到BackgroundBitmap變量中,然后根據(jù)該位圖圖像輪廓和透明色創(chuàng)建Region,BitmapToRegion就用于完成Bitmap到Region的轉換,程序再將這個Region付值給窗體的Region屬性以完成不規(guī)則窗體的創(chuàng)建。
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方法中完成,而且利用了雙重緩沖區(qū)技術來進行繪制操作,代碼如下:
protected override void OnPaintBackground(PaintEventArgs e)
{
Graphics grfx = e.Graphics;
grfx.PageUnit = GraphicsUnit.Pixel;
Graphics offScreenGraphics;
Bitmap offscreenBitmap;
offscreenBitmap = new Bitmap(BackgroundBitmap.Width, BackgroundBitmap.Height);
offScreenGraphics = Graphics.FromImage(offscreenBitmap);
if (BackgroundBitmap != null)
{
offScreenGraphics.DrawImage(BackgroundBitmap, 0, 0,
BackgroundBitmap.Width, BackgroundBitmap.Height);}
DrawText(offScreenGraphics);
grfx.DrawImage(offscreenBitmap, 0, 0);
}
上述代碼首先返回窗體繪制表面的Graphics并保存在變量grfx中,然后創(chuàng)建一個C#內存Graphics對象offScreenGraphics和內存位圖對象offscreenBitmap,將內存位圖對象的引用付值給offScreenGraphics,這樣所有對offScreenGraphics的繪制操作也都同時作用于offscreenBitmap,這時就將需要繪制到通知窗體表面的背景圖像BackgroundBitmap繪制到C#內存Graphics對象上,DrawText函數(shù)根據(jù)需要顯示文字的大小和范圍調用Graphics.DrawString將文字顯示在窗體的特定區(qū)域。***,調用Graphics.DrawImage將內存中已經(jīng)繪制完成的圖像顯示到通知窗體表面。
我們還需要捕獲窗體的鼠標操作,有三個操作在這里進行,
1、處理拖動窗體操作
2、處理通知窗體的關閉操作
3、內容區(qū)域的單擊操作。
三個操作都需要檢測鼠標的當前位置與每個Rectangle區(qū)域的包含關系,只要單擊落在特定區(qū)域我們就進行相應的處理,代碼如下:
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); //發(fā)送左鍵點擊的消息至該窗體(標題欄) } if (CloseBtnRectangle.Contains(e.Location)) //單擊Close按鈕關閉 { this.Hide(); currentTop = 1; } if (ContentRectangle.Contains(e.Location )) //單擊內容區(qū)域 { System.Diagnostics.Process.Start("http://www.Rithia.com"); } } }
該程序可以很好的進行通知窗體的顯示、停留和隱藏操作,并且具備簡單的換膚機制,在利用了雙重緩沖區(qū)繪圖技術后,可以保證窗體的繪制平滑且沒有閃爍。
到此,相信大家對“怎么用C#內存Graphics對象”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
網(wǎng)頁標題:怎么用C#內存Graphics對象
本文路徑:http://www.chinadenli.net/article48/pidiep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、搜索引擎優(yōu)化、關鍵詞優(yōu)化、網(wǎng)站改版、網(wǎng)頁設計公司、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)