GDI 學習之線性漸變畫刷

2021-08-31 10:21:53 字數 2813 閱讀 3637

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

我發現使用gdi+來製作畫圖工具的調色盤極為方便(這個工作如果讓gdi來做不知要寫多少**)。下面我們學習一下gdi+的線性漸變畫刷:lineargradientbrush類的用法,具體**如下:

[cpp]view plain

copy

print?

cdc *pdc = pview->getdc();  

// 定義乙個畫圖物件

gdiplus::graphics graphics(pdc->m_hdc);  

// 獲取檢視客戶區大小

crect rt;  

pview->getclientrect(&rt);  

// 定義乙個線性漸變畫刷,按紅黃藍綠的順序四種顏色漸變

lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/2),color(255,255,0,0),color(255,0,0,255));  

color colors = ;  // green

real positions = ;    

lingrbrush.setinterpolationcolors(colors, positions,4);  

// 填充指定區域矩形

graphics.fillrectangle(&lingrbrush,rt.width()/2,0,80,rt.height()/2);   

cdc *pdc = pview->getdc();    // 定義乙個畫圖物件 gdiplus::graphics graphics(pdc->m_hdc);      // 獲取檢視客戶區大小  crect rt;  pview->getclientrect(&rt);// 定義乙個線性漸變畫刷,按紅黃藍綠的順序四種顏色漸變     lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/2),color(255,255,0,0),color(255,0,0,255));  color colors = ;  // green   real positions = ;   lingrbrush.setinterpolationcolors(colors, positions,4); // 填充指定區域矩形 graphics.fillrectangle(&lingrbrush,rt.width()/2,0,80,rt.height()/2); 

效果如下:

這個線性漸變畫刷很簡單,就是按垂直方向(即y軸方向)漸變的。我感興趣的是畫刷的兩個引數point(100,0),point(100,rt.height()/2),書上介紹的起點的顏色和終點顏色的位置和要填充的矩形之間的關係是怎樣的?我們看到上面的畫刷的起點和終點的高度和要填充的矩形的高度是一樣的,都是rt.height()/2。我們把畫刷的高度縮小為原來的一般,看看有什麼效果,即定義為:

[cpp]view plain

copy

print?

lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/4),color(255,255,0,0),color(255,0,0,255));  

lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/4),color(255,255,0,0),color(255,0,0,255)); 

效果圖如下:

我們發現上圖等於連續用兩個畫刷填充這個矩形。假如填充的目標矩形的高度小於畫刷的高度,又會是怎樣的效果呢?**改為:

[cpp]view plain

copy

print?

lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/2),color(255,255,0,0),color(255,0,255,0));  

color colors = ;  // green

real positions = ;    

lingrbrush.setinterpolationcolors(colors, positions,4);  

// 填充指定區域矩形

graphics.fillrectangle(&lingrbrush,rt.width()/2,0,80,rt.height()/4);  

lineargradientbrush lingrbrush(point(100,0),point(100,rt.height()/2),color(255,255,0,0),color(255,0,255,0));  color colors = ;  // green   real positions = ;   lingrbrush.setinterpolationcolors(colors, positions,4); // 填充指定區域矩形 graphics.fillrectangle(&lingrbrush,rt.width()/2,0,80,rt.height()/4);

效果圖如下:

我們看到這時矩形區域的填充只使用了畫刷的一部分。這時或許我們可以得出乙個簡單的結論:用畫刷填充多邊形區域,有點類似於鋪地磚,地磚好比畫刷,空地好比要填充的區域區域。

思考題:

線性漸變畫刷的起點和終點的座標值和要填充的矩形之間是什麼關係?

給我老師的人工智慧教程打call!

線性漸變畫刷

第一種 1.首先先繪製乙個矩形 然後在button 裡定義乙個background,再用乙個線性漸變來寫他的樣式 button height 60 width 120 margin 87,200,86.6,10.4 button.background lineargradientbrush star...

GDI 的線性漸變及透明色

最近剛做好乙個站,rails 3,大家捧場看看,謝謝!www.yo945.com 以前用過一段時間的gdi,感覺挺麻煩,換個畫刷還得呼叫selectobject來切換當前所用的畫刷,用完後再換回去,相當的煩。最近需要自己畫幾個控制項,就看了一下gdi 方面的內容,感覺用起來真的很不錯 和以前c bu...

GDI 基礎程式設計(2) 畫刷的使用

中的注釋還是很清楚的,在此不羅嗦了 void cgdi畫刷dlg gdibrushdrawimage cdc pdc 填充閉合區域 g.fillclosedcurve solidbrush,pt,4,fillmodealternate,1.0 構造比和多邊形 pointf p 5 填充多邊形 sol...