Q
顏色縮放功能
14
A
回答
17
基本上,對於兩個值之間平滑過渡的一般方法是下面的函數:
function transition(value, maximum, start_point, end_point):
return start_point + (end_point - start_point)*value/maximum
即給定的,可以定義確實爲三元組(RGB,HSV等)轉換的功能。
function transition3(value, maximum, (s1, s2, s3), (e1, e2, e3)):
r1= transition(value, maximum, s1, e1)
r2= transition(value, maximum, s2, e2)
r3= transition(value, maximum, s3, e3)
return (r1, r2, r3)
假設你有RGB色彩爲小號和ē三胞胎,你可以使用transition3功能原樣。然而,通過HSV色彩空間會產生更多的「自然」轉換。因此,考慮到轉換功能(從Python colorsys模塊無恥地竊取並轉換爲僞代碼:):
function rgb_to_hsv(r, g, b):
maxc= max(r, g, b)
minc= min(r, g, b)
v= maxc
if minc == maxc then return (0, 0, v)
diff= maxc - minc
s= diff/maxc
rc= (maxc - r)/diff
gc= (maxc - g)/diff
bc= (maxc - b)/diff
if r == maxc then
h= bc - gc
else if g == maxc then
h= 2.0 + rc - bc
else
h = 4.0 + gc - rc
h = (h/6.0) % 1.0 //comment: this calculates only the fractional part of h/6
return (h, s, v)
function hsv_to_rgb(h, s, v):
if s == 0.0 then return (v, v, v)
i= int(floor(h*6.0)) //comment: floor() should drop the fractional part
f= (h*6.0) - i
p= v*(1.0 - s)
q= v*(1.0 - s*f)
t= v*(1.0 - s*(1.0 - f))
if i mod 6 == 0 then return v, t, p
if i == 1 then return q, v, p
if i == 2 then return p, v, t
if i == 3 then return p, q, v
if i == 4 then return t, p, v
if i == 5 then return v, p, q
//comment: 0 <= i <= 6, so we never come here
,你可以有代碼如下:
start_triplet= rgb_to_hsv(0, 255, 0) //comment: green converted to HSV
end_triplet= rgb_to_hsv(255, 0, 0) //comment: accordingly for red
maximum= 200
… //comment: value is defined somewhere here
rgb_triplet_to_display= hsv_to_rgb(transition3(value, maximum, start_triplet, end_triplet))
7
red = (float)val/200 * 255;
green = (float)(200 - val)/200 * 255;
blue = 0;
return red << 16 + green << 8 + blue;
1
翻翻this wikipedia article我個人會選擇一個路徑通過一個色彩空間,和值映射到該路徑。
但這是一個直接的功能。我認爲你可能更適合使用可以給你Hex的快速顏色找到的javascript顏色選擇器,並且可以存儲十六進制。
3
找一個你喜歡,你喜歡(RGB2 =#FF0000,例如),然後綠色(RGB 1 =#00FF00,EG)和紅色計算這樣
R = R1 * (200-i)/200 + R2 * i/200
G = G1 * (200-i)/200 + G2 * i/200
B = B1 * (200-i)/200 + B2 * i/200
2
爲了獲得最佳的控制和顏色準確的效果,你應該使用HSV色彩空間。使用HSV,您可以輕鬆地將色調,飽和度和/或亮度分開調整。然後,您將轉換爲RGB。
7
你不說在什麼環境下你這樣做。如果你能HSV colors工作,這將是很容易通過設置S = 100 V = 100,並通過確定H至事:
H = 0.4 * value + 120
Converting from HSV to RGB也相當容易。
[編輯]注意:與其他一些建議的解決方案相比,這將改變顏色綠色 - >黃色 - >橙色 - >紅色。
0
如果您使用紅色線性斜坡和綠色價值,如彼得帕克建議,價值100的顏色基本上是puke green(127,127,0)。理想情況下,您希望它在該中點處是明亮的橙色或黃色。對於這一點,你可以使用:
Red = max(value/100, 1) * 255
Green = (1 - max(value/100, 1)) * 255
Blue = 0
2
在@ tzot代碼擴展...您還可以設置一箇中間點在起點和終點,這可能是有用之間,如果你想有一個「過渡色「!
//comment: s = start_triplet, m = mid_triplet, e = end_triplet
function transition3midpoint = (value, maximum, s, m, e):
mid = maximum/2
if value < mid
return transition3(value, mid, s, m)
else
return transition3(value - mid, mid, m, e)
相關問題
- 1. 縮放功能
- 2. Java中的顏色縮放
- 3. 縮放顏色強度
- 4. 更改顏色的功能
- 5. Python中的顏色功能
- 6. 顏色生成功能
- 7. 顏色在java中的縮放圖像重新縮放
- 8. matplotlib:在縮放後重新縮放imshow的顏色
- 9. CSS背景顏色不縮放ASP.NET
- 10. 縮放鼠標:選框顏色
- 11. 如何縮放邊緣顏色igraph?
- 12. 路徑跟蹤:縮放顏色
- 13. HighCharts.StockChart移除縮放功能
- 14. Java健身功能 - 縮放
- 15. Matplotlib imshow縮放功能?
- 16. iphone視頻縮放功能
- 17. 圖形和縮放功能
- 18. Javascript Gmaps縮放功能
- 19. QWidget上的縮放功能
- 20. Jframe上的縮放功能?
- 21. 增量縮放功能
- 22. Highcharts刪除縮放功能
- 23. TiledScrollView的捏放縮放功能
- 24. Java中圖像的組合重新縮放和顏色縮減?
- 25. 更改像素顏色作爲其顏色的功能
- 26. 滾動視圖內縮放縮放功能
- 27. 在功能縮放,線性迴歸後重新縮放
- 28. 不縮放特定子元素的縮放功能
- 29. Javascript功能改變文字顏色
- 30. 薩斯顏色變淺功能 - 使用%
這將使中點(100)puke green:rgb(127,127,0)。你會希望你的中點是一個明亮的黃色或橙色。見:http://stackoverflow.com/questions/168838/color-scaling-function#168980 – 2008-10-03 21:30:55
我同意這一點,它不會看起來不錯,但我是一個編碼器和中點不是規範的一部分;) – 2008-10-03 21:36:02