我有一個int值範圍可以從-148至10,我試圖映射此值在下面的梯度的顏色:int值轉換爲顏色的梯度
- 黑色( -148)
- 藍
- 青色
- 綠色
- 黃
- 橙色
- 紅
- 白色(10)
在視覺上,我的顏色漸變看起來是這樣的:
我首先想到的是向下突破的範圍內(-148〜10)到對應於這八個小團體顏色,但顯然會導致多個值轉換爲相同的顏色。我想在這個漸變中使用更多或甚至所有的顏色,但我不知道如何去做這件事。任何人都可以提供建議嗎?對於它的價值,我正在使用C#/ .NET,所以我需要將我的int轉換爲RGB值。
我有一個int值範圍可以從-148至10,我試圖映射此值在下面的梯度的顏色:int值轉換爲顏色的梯度
在視覺上,我的顏色漸變看起來是這樣的:
我首先想到的是向下突破的範圍內(-148〜10)到對應於這八個小團體顏色,但顯然會導致多個值轉換爲相同的顏色。我想在這個漸變中使用更多或甚至所有的顏色,但我不知道如何去做這件事。任何人都可以提供建議嗎?對於它的價值,我正在使用C#/ .NET,所以我需要將我的int轉換爲RGB值。
您是否意味着像這樣的映射功能? (在顏色表透明條目是在顏色1從列表中的第9項所採取的值10的情況下的虛設)
Color[] colors = new Color[] { Colors.Black, Colors.Blue, Colors.Cyan, Colors.Green, Colors.Yellow, Colors.Orange, Colors.Red, Colors.White, Colors.Transparent }; public Color IntToColor(int i) { float scaled = (float)(i + 148)/158 * 7; Color color0 = colors[(int)scaled]; Color color1 = colors[(int)scaled + 1]; float fraction = scaled - (int)scaled; Color result = new Color(); result.R = (byte)((1 - fraction) * (float)color0.R + fraction * (float)color1.R); result.G = (byte)((1 - fraction) * (float)color0.G + fraction * (float)color1.G); result.B = (byte)((1 - fraction) * (float)color0.B + fraction * (float)color1.B); result.A = 255; return result; }
PS:爲簡單起見不存在用於檢查[-148:10]範圍 PPS:我知道我的代碼不會贏得任何選美比賽。
這對於那些相鄰的顏色可以很好地工作。你可能想看看[this](http://stackoverflow.com/questions/26165071/how-to-append-two-brush-classes/26167795?noredirect=1#comment41044719_26167795)帖子來看比較混合rgb組件和混合顏色的顏色進一步分開.. – TaW 2014-10-03 12:10:23
你實際上正在尋找HSV色彩空間。你可以做的是:
1地圖的[-148,10]到[0,360]度H中
2固定S和V值。 (我想S = 1和V = 1你的情況)
3獲得從先前計算出的H,S HSV顏色,和V
4轉換HSV顏色以RGB顏色和使用。
您的圖片的寬度爲200,大小爲203字節。我會讀出159個值並將它們存儲在List中。當然,你可以在C#中計算它們,但這將需要更多的資源,IMO ..
Dictionary<int, Color> mycolors = new Dictionary<int,Color>();
Bitmap bmp = new Bitmap("D:\\spectrum.png");
float fx = bmp.Width/159f;
for (int x = 0; x < 160; x++)
mycolors.Add(x - 148, bmp.GetPixel((int)(fx * x), 1));
這將映射159種顏色。如果你想要比這些更多(或者你的圖像保持200以上),則需要進行計算。但是你不能將它們映射到你的整數範圍 - 所以請下定決心! Here是實現HSV-> RGB映射的代碼,您可以使用該映射,至少從藍色變爲紅色。黑色和白色的淡入淡出必須來自兩個以上的例程......最適合Fratyx的內插代碼。 (因爲它會從每個區段的最清晰的顏色的外環切割一點..)
如果你的範圍是[0,255],你知道答案嗎? – 2014-09-29 18:51:15
我不會,看着黑色和白色的開始和結束點。 – TaW 2014-09-29 19:01:00
您的圖片的寬度爲200,大小爲203字節。我會讀出159個值並將它們存儲在列表中。當然,你可以在c#中計算它們,但是這會花費更多的資源,imo .. –
TaW
2014-09-29 19:05:47