C GDI 程式設計(一)

2021-06-18 02:49:15 字數 4044 閱讀 6241

首先你要有點基本的幾何概念。例如大家常說的點動成線,線動成面,面動成體。兩點確定一條直線,不在同一直線上的三點確定乙個圓(或者平面),諸如此類。然後你要理解的是,對應於幾何概念中點,就是螢幕上的乙個畫素,因此,這種點和純粹幾何中的點還是有區別的。最後乙個就是座標了,和解析幾何不同,其座標系統如下:

正方向通常是從

x軸旋轉

90°到

y軸那個方向,由於座標位置的關係,你可以發現旋轉的正方向是順時針的,而不是像經典解析幾何中的逆時針。

關於點。點是圖形中最基本的單元,沒有之一。

c#中表示點的結構體是

point

和pointf

,前者接受的引數是整型,而後者則為

float

的浮點型(注意不是

double

型別,了解這一點很重要)。除此之外,兩者並沒有太大的區別,都是表示在二維平面中定義點的x 和

y 座標的有序對。另外,和現實世界中類似的,繪圖需要有畫筆,這在

c#中被抽象為

pen類,它是用於繪製指定寬度和樣式的直線和曲線。使用

dashstyle 

屬性繪製幾種虛線。可以使用各種填充樣式(包括純色和紋理)來填充

pen 

繪製的物件,填充模式取決於畫筆或用作填充物件的紋理。該類是乙個密封類,這意味著你無法繼承該類。

關於顏色。顏色是描述圖形的基本元素之一,

gdi+

中使用兩種模式表示色彩,乙個是

rgb,另乙個是

cmyk。

rgb色彩模式使用

rgb模型為影象中每乙個畫素的

rgb分量分配乙個

0~255

範圍內的強度值。

rgb影象只使用三種顏色,就可以使它們按照不同的比例混合,在螢幕上重現

16777216

()種顏色。在

rgb 

模式下,每種

rgb 

成分都可使用從

0(黑色)到

255(白色)的值。

例如,亮紅色使用r 值

255、g 值

0 和b 值

0。當所有三種成分值相等時,產生灰色陰影。

當所有成分的值均為

255 

時,結果是純白色;當該值為

0 時,結果是純黑色。

cmyk

也稱作印刷色彩模式,是一種依靠反光的色彩模式,和

rgb類似,

cmy是

3種印刷油墨名稱的首字母:青色

cyan

、品紅色

magenta

、黃色yellow。而k

取的是black

最後乙個字母,之所以不取首字母,是為了避免與藍色

(blue)

混淆。從理論上來說,只需要

cmy三種油墨就足夠了,它們三個加在一起就應該得到黑色。但是由於目前製造工藝還不能造出高純度的油墨,

cmy相加的結果實際是一種暗紅色。

gdi+

中承擔顏色的類是

color

結構體,

color

結構體只有乙個預設的建構函式,不過它有許多有用的靜態方法實現了顏色的構造和轉換見下表:

靜態方法 說明

fromargb(int32) 

從乙個32 

位argb 

值建立color 結構

fromargb(int32, color)

從指定的

color 

結構建立

color 

結構,但要使用新指定的

alpha 

值。儘管此方法允許為

alpha 

值傳遞32 

位值,但該值僅限於8 位

fromargb(int32, int32, int32)

從指定的

8位顏色值(紅色、綠色和藍色)建立

color

結構。alpha 

值預設為

255(完全不透明)。

fromargb(int32, int32, int32, int32)

從四個argb 

分量(alpha

、紅色、綠色和藍色)值建立

color 

結構。fromknowncolor

基於指定的預定義顏色建立

color 結構

fromname

基於預定義顏色的指定名稱建立

color 結構

另外,對於乙個

color

結構的例項,比較有用的方法如下:

例項方法 說明

getbrightness

獲取此color

結構的「色調

-飽和度

-亮度」

(hsb)

的亮度值。

gethue

獲取此color

結構的「色調

-飽和度

-亮度」

(hsb)

的色調值,以度為單位。

getsaturation

獲取此color

結構的「色調

-飽和度

-亮度」

(hsb)

的飽和度值。

toargb

獲取此color

結構的32

位argb值。

toknowncolor

獲取此color

結構的knowncolor值。

例如建立乙個紅色的顏色物件可以是:

color c = color.fromargb(255, 0, 0);

當然,color

中也有多達

140種預定義的顏色,這些顏色基本上可以完成常見的任務,開頭的幾個顏色如下表: 屬性

說明aliceblue

argb

值為#fff0f8ff

的系統定義的顏色。

antiquewhite

argb

值為#fffaebd7

的系統定義的顏色。

aqua

argb

值為#ff00ffff

的系統定義的顏色。

aquamarine

argb

值為#ff7fffd4

的系統定義的顏色。

azure

argb

值為#fff0ffff

的系統定義的顏色。

beige

argb

值為#fff5f5dc

的系統定義的顏色。

bisque

argb

值為#ffffe4c4

的系統定義的顏色。

black

argb

值為#ff000000

的系統定義的顏色。

blanchedalmond

argb

值為#ffffebcd

的系統定義的顏色。

blue

argb

值為#ff0000ff

的系統定義的顏色。

完整的顏色可以檢視

msdn。

關於顏色,還有乙個很有趣的屬性是透明度的問題(

alpha

)。事實上,

color

物件的資訊由乙個

32位的書籍表示,每

8位代表乙個資訊,分別是透明度和紅色、綠色和藍色。透明度就是相對於悲劇的顏色的混合程度,取值為

0~255。.0

表示完全透明(完全是背景色),而

255表示完全不透明,就是前景色。透明度的計算方法如下:蛇前景色和背景色的顏色中某個分量,例如藍色,分別為b1和

b2,如果透明度設定為

alpha

值,則相互交疊的區域中顏色的藍色分量值為:

b=b1*alpha/255+b2*(255-alpha)/255

對於其他顏色分量也有類似的計算公式。當然,計算的結果必須取整。下圖中是

alpha

分別為100

和200

的效果:

顯然右圖顯得更加不透明。關於透明度的問題,還有在後面做詳細的介紹。

C GDI 程式設計(三)

2.矩形 先看看矩形結構 rectangle 儲存一組整數,共四個,表示乙個矩形的位置和大小,矩形由其寬度 高度和左上角定義,可用的建構函式如下 public rectangle point location,size size 用指定的位置和大小初始化 rectangle 類的新例項。public...

C GDI 程式設計基礎(二)

pen類 繪製指定寬度和樣式的直線。使用dashstyle屬性繪製幾種虛線,可以使用各種填充樣式 包括純色和紋理 來填充pen繪製的直線,填充模式取決於畫筆或用作填充物件的紋理。建立畫筆 用指定的顏色例項化乙隻畫筆的方法如下 public pen color 用指定的畫刷例項化乙隻畫筆的方法如下 p...

C GDI 文字操作

一 投影文字 private void form1 paint object sender,painteventargs e 二 倒影文字 private void form1 paint object sender,painteventargs e 三 文字填充線條 四 旋轉文字 private ...