學 delphiX ,但不知
DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
DXDraw.UpdatePalette;
這幾句是什麼意思
在http://www.huosoft.com/bbs/ShowPost.asp?ThreadID=134 找到了介紹的文章
關於TasphyrePalette的基礎使用
關於TasphyrePalette的基礎使用
//本文意在描述TasphyrePalette的基本使用方面的知識,文中內容針對入門級使用者瞭解TasphyrePalette而書寫的。
Palette是什嗎?Pallette是調色盤的意思。
我們首先要開始一個簡單的關於調色版使用的例子,讓你簡單的知道調色盤該如何使用。
首先我們在單元的Type裡定義一個Palette,看起來象下面的一樣。Palette可以是你隨便起的。
Palette: TAsphyrePalette;
這樣我們就得到了一個Palette,但是我們現在還不能使用。我們還需要像下面這樣:
Palette:= TAsphyrePalette.Create();
這樣我們才算真真正正的得了一個Palette(調色盤),現在這個調色盤是空的或者說是一個我們新買到的調色盤,我們需要給這個新調色盤裡添加基礎顏色。看起來像下面的步驟。
Palette.Add($FFFF0000, 0.0);
Palette.Add($FFFFFF00, 1.0);
Palette的add是添加的意思。在Palette裡面我們添加了兩種顏色。$FFFF0000是紅色,$FFFFFF00是黃色。也許你到現在還不明白,我們做這些的意義。不過不要緊,請跟著我往下看,秘密就在最後面的一個參數上,現在我們不要去理會它。
我們下一步要做的是,即然我們把顏色加到調色盤裡,那麼我們怎麼樣來使用調色盤裡的顏色。
我們注意看下面的部分:
palette.Color[0.0] // 1
palette.Color[1.0] // 2
這是我們通過Palette來獲得顏色的方法。通過1,我們可以得到紅色。通過2我們可以獲得黃色。也許你現在會問,即然這樣,我們直接使用顏色代碼$FFFF0000或$FFFFFF00不就可以了嗎?幹嘛,還要用使palette呢?
現在我們來思考一個問題,如果我們需要一個黃色和紅色中間的顏色。我們該怎麼做?
palette.Color[0.5]
注意上面這句後面的參數。他是0.0和1.0之間的中間值。也許你可能已經想到,沒錯,我們通過中間值,就能得到紅色和黃色中間的顏色。
Palette.Add($FFFF0000, 0.0);
Palette.Add($FFFFFF00, 1.0);
上面這兩句是我們曾經為調色盤添加的顏色,那麼後面的參數,0.0 和 1.0,你已經可以明白是做什麼用的,不需要我再細細的說明。
那麼在正常使用的時候呢!是下面這個樣子。
Sender.Canvas.LineEx(10, 200,100, 220,palette.Color[0.5])
上面是一個畫線的語句,裡面的數值分別是x1,y1,x2,y2,這是畫一條線用的兩點座標,如果你不懂的話建議你回頭去看看初中數學書,那裡會給你提供你關於座標的知識協助。最後的palette.Color[0.5]就是這條線的顏色color,中間值0.5,跟據我們前面設計的palette,這條線的顏色是紅色和黃色中間的顏色。
最後,準備簡單的分析一下palette.
Palette的根是TasphyrePalette類,我們重點就要看看TasphyrePalette.有興趣的入門者跟我往下看:
TAsphyrePalette = class
private
Data : array of TAsphyreColorNode;
這是TasphyrePalette類最頭上的兩句,我們不用看得那麼深,初學者看得太深,最大的壞處就是會讓自己會頭痛,就像我現在這樣。
TasphyrePalette的核心就是數組化的TasphyreColorNode,我們現在看到重點了。
我們現在需要集中精力來看TasphyreColorNode是個什麼東西,他怎麼就能把顏色記住。
TAsphyreColorNode = record
Color : TTrueColor;
NodeType: TNodeType;
Theta : Real;
上面的四行,就是Tasphyre的核心了,你可能會感歎,就這麼簡單啊!沒算一直就這麼簡單,是你把它想的太難了。
好了,我們來簡單理解一下TasphyreColorNode
Color : TtrueColor 就是我們Palette.Add($FFFF0000, 0.0);句子存放顏色的地方。
Theta : Real; 就是存放0.0 和 0.1的地方。
你可能會大叫那NodeType是什麼啊!我們至始到終也沒設定它。看看下面這句ADD。
Result:= Add(Diffuse, ntPlain, Theta);
發現沒有,NodeType已經被黓認為ntPlain了。為什嗎?因為需要你自己去發現,不要總等別人喂你,不能光讓我一個人頭痛啊,你說是不是。
這裡我們還有一個東西,是需要必須瞭解的。就是TtrueColor是個什麼玩意!
來跟我看看,簡單到你可能會吃驚。
TTrueColor = record
r, g, b, a: Single;
R,G,B,A,分別帶表紅色,綠色,藍色,對就是三原色。最後一個A是用來記錄alpha值的。什麼是alpha呢!讓我想想,還是你自己去查資料吧!光alpha詳細的來講,都夠寫一本書的了。呵呵!
可參照http://www.huosoft.com/bbs/ShowPost.asp?ThreadID=135例子來閱讀本文。