發光按鈕-一個發光按鈕控制
阿新 • • 發佈:2020-08-07
只是一個匆匆的…… 最近,我偶然發現了KMP播放器軟體,並查看了一些圖形元素(如果你想看到一些真正好的圖形工作,我建議你去看看)。我在一個專案中需要的元素之一是一個簡單的發光按鈕控制元件,用於播放器控制元件,沒有太花哨的東西,只有一個影象,當滑鼠懸停時,它會改變顏色和發光。 獲得一幅改變顏色的影象是相當瑣碎的,它是通過修改ImageAttribute的顏色矩陣來完成的: 隱藏,複製Code
private void DrawColoredImage(Graphics g, Image img, Rectangle bounds, Color clr) { using(ImageAttributes ia = new ImageAttributes()) { ColorMatrix cm = new ColorMatrix(); // convert and refactor color palette cm.Matrix00 = ParseColor(clr.R); cm.Matrix11 = ParseColor(clr.G); cm.Matrix22 = ParseColor(clr.B); cm.Matrix33 = ParseColor(clr.A); cm.Matrix44 = 1f; //set matrix ia.SetColorMatrix(cm); // draw g.DrawImage(img, bounds, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia); } }
示例程式碼中的ParseColor只是將位元組轉換為浮點值。 獲取輝光效果也可以使用ImageAttributes類完成。影象首先膨脹,然後改變調色盤和Alpha值,然後在上面繪製乾淨的影象。所有這一切都是通過首先繪製控制元素到一個緩衝區點陣圖: 隱藏,複製Code
private void DrawButton() { if (this.Image == null) return; Rectangle bounds = new Rectangle(0, 0, this.Width, this.Height); Rectangle imageBounds = GetImageBounds(bounds, this.Image); // draw into a buffer using (Graphics g = Graphics.FromImage(_bmpBuffer)) { ... } // draw the buffer using (Graphics g = Graphics.FromHwnd(this.Handle)) DrawImage(g, _bmpBuffer, bounds); }
這個控制元件帶有大部分暴露的屬性,比如各種顏色狀態,以及可選的焦點遮罩和邊框。下面是屬性列表: 檢查:複選框狀態CheckedBorderColor:檢查邊框顏色CheckStyle:複選框風格FocusedMask:畫一個集中面具ImageDisabledColor:影象顏色ImageFocusedColor:禁用影象集中顏色ImageGlowColor:邊境發光顏色ImageHoverColor:影象盤旋顏色ImagePressedColor:影象按顏色ImageGlowFactor:發光因素深度FocusOnHover:關注按鈕懸停 歷史 2010年2月24日:最初的post27年3月27日:文章截圖和原始碼 本文轉載於:http://www.diyabc.com/frontweb/news516.html