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