GDI 的線性漸變及透明色

2022-02-17 01:04:44 字數 1732 閱讀 1333

最近剛做好乙個站,rails 3,大家捧場看看,謝謝!www.yo945.com

以前用過一段時間的gdi,感覺挺麻煩,換個畫刷還得呼叫selectobject來切換當前所用的畫刷,用完後再換回去,相當的煩。

最近需要自己畫幾個控制項,就看了一下gdi+方面的內容,感覺用起來真的很不錯(和以前c++builder上的canvas有點類似),要用紅筆,就直接把pen物件傳進去就成了。

要畫漂亮的控制項,離不開漸變色和透明,在gdi+中,實現漸變和透明都挺簡單,簡略的記一下,以備後用。

漸變色使用system.drawing.drawing2d.lineargradientbrush這個線性漸變畫刷來實現,簡單的用法是,建立乙個畫刷物件,然後讓graphics用這個畫刷來畫,就自然的成為漸變色了,比如:

private void form1_paint(object sender, painteventargs e)

效果如圖:

如果要建立稍微複雜一點的漸變,可以使用system.drawing.drawing2d.colorblend類來輔助,進行多色漸變,也就是漸變時,可以超過一種顏色,**如下:

private void form1_paint(object sender, painteventargs e)

; //顏色分布位置,即乙個顏色,處理漸變過程中的哪個位置,最大為1

float positions = new float ;

cb.colors = colors;

cb.positions = positions;

lineargradientbrush lb = new lineargradientbrush(this.clientrectangle, color.blue, color.transparent, lineargradientmode.vertical);

lb.interpolationcolors = cb;

e.graphics.fillrectangle(lb, this.clientrectangle);

}

效果如圖,這組顏色用在像listview裡面的選擇的顏色,還是蠻漂亮的

來組變化大一點的,位置是0,0.3,0.6,1.0

gdi+中的透明色

現在還只會最簡單的透明色,就是在構造color的時候,設定其透明值

private void form1_paint(object sender, painteventargs e)

效果如下:

有時候,用同一種色彩,但是透明度不一樣的顏色來畫漸變,效果也挺不錯的

透明色及漸變色設定

畫窗體背景色 漸變刷 lineargradientbrush mybrush new lineargradientbrush new rectangle 0,0,this.width,this.height color.fromargb 50,color.blue color.fromargb 40...

GDI 學習之線性漸變畫刷

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!我發現使用gdi 來製作畫圖工具的調色盤極為方便 這個工作如果讓gdi來做不知要寫多少 下面我們學習一下gdi 的線性漸變畫刷 lineargradientbrush類的用法,具體 如下 cpp view plain copy print?cdc ...

任意角度的RGB雙色線性漸變演算法示例

用兩種rgb顏色對矩形進行線性漸變填充時,需要合適的演算法計算各點的顏色,這樣才不會出現中間過渡色,或者出現漸變填充不完整。而在增加從任意角度進行漸變後,情況似乎變得更加複雜。比如這樣 又比如這樣 這些都是色彩計算錯誤引起的。現在來看看正確的漸變圖,其中顏色和漸變角度和上面的一樣 首先說明漸變角度,...