2010-11-03 88 views
16

如何從HSL值創建C#顏色?從HSL值創建C#顏色

+1

另請參閱:http://stackoverflow.com/questions/2942/hsl-in-net/2504318#2504318 – 2010-11-03 13:50:29

回答

15

Rich Newman創建了一個HSLColor類,可用於替代System.Drawing.Color。

http://richnewman.wordpress.com/hslcolor-class/

+2

這個類似乎工作*大部分時間*。我有一個問題,我有一個HSL顏色(210,45,72),這是一個藍色獲取輸出爲rgb(90,62,83),這是一個紅色。我試圖登上他的博客,但幾乎從不加載大聲笑。 – Sinaesthetic 2014-10-15 23:12:34

+3

該類使用Color.GetBrightness方法,所以它實際上呈現的是[HSB](http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC36)顏色空間,而不是HSL。 – ironic 2015-05-17 09:14:55

+1

不適用於#bbe30a和#320ae3。我只嘗試了兩個值並放棄。 – aloisdg 2016-06-11 14:26:59

10

添加下面的下面的行「使用」,在你的代碼文件命名空間:

using System.Runtime.InteropServices 

,並以P/Invoke的,添加以下功能:

[DllImport("shlwapi.dll")] 
public static extern int ColorHLSToRGB(int H, int L, int S); 

在你想要的任何課程中。

如果您將色調,亮度和飽和度的顏色設置爲整數,則將這些值賦予該函數,然後將所需的RGB顏色作爲整數返回。 然後使用ColorTranslator.FromWin32將返回的rgb顏色作爲整數轉換爲System.Drawing.Color結構。

另一種方法是使用Color.FromArgb(Int32)重載方法,從該整數中創建所需顏色爲System.Drawing.Color結構。

另一種方式是創建ColorConverter類的一個實例,然後調用ConvertFrom方法,並給它的RGB顏色整數從ColorHLSToRGB函數返回,或者致電的ConvertTo方法用相同的第一參數,但在第二個參數輸入typeof(System.Drawing.Color)。然後將返回的對象轉換爲System.Drawing.Color結構類型。

結果正是你正在尋找和預期的!

你也可以嘗試其他算法或方法,你可以搜索,找出並在互聯網上學習,如何將RGB顏色轉換爲整數爲System.Drawing.Color結構或如何將HLS值轉換爲三個整數System.Drawing.Color結構!

+2

有幾件事要注意:'H','L'和'S'從0到240.請記住,0的亮度表示黑色,240表示白色,所以如果你想要一個純色'#F00')你需要將'L'設置爲120.另外值得注意的是:如果你打算使用Color.FromArgb(Int32)過載,顏色的alpha將爲0,這意味着它'將是透明的。 'ColorTranslator.FromWin32()'沒有這個問題。 – Nolonar 2017-05-10 15:13:29