計算褪色
回答
將每種顏色分爲RGB分量,然後計算所需的各個步驟。
oldRed = 120;
newRed = 200;
steps = 10;
redStepAmount = (newRed - oldRed)/steps;
currentRed = oldRed;
for (i = 0; i < steps; i++) {
currentRed += redStepAmount;
}
明顯延伸綠色和藍色。
問題是你想要發生什麼變化?如果轉成HSV色彩空間,並給出
FF0000和00FF00
它會從紅色變爲黃色過渡到綠色。
但是,如果您將「黑色」或其他某種顏色定義爲混合的中點,則必須先將該顏色設爲ff0000-> 000000-> 00ff00或通過白色進行調色:ff0000 - > ffffff - > 00ff00。
但是,通過HSV進行轉換可能很有趣,因爲您必須使用一些trig來將圓形圖映射到矢量組件中。
最簡單的方法是在顏色組件之間進行線性插值(參見nickf的響應)。請注意,眼睛是非常非線性的,所以它不一定會讓你看到你正在做出一些步驟。一些色彩空間試圖解決這個問題(CIE也許?),所以你可能想先變換到另一個色彩空間,插值,然後轉換回RGB或任何你使用的。
應用於顏色值的gamma值將有助於抵消非線性,因此轉換到另一個顏色空間可能是矯枉過正的。 – 2008-11-26 03:19:21
有兩個很好的相關問題,你還應該查看:
請注意,你通常能夠更好地在HSV色彩空間做這個,而不是RGB - 它爲人眼產生更令人愉悅的色彩(較低的碰撞或負光學屬性)。
祝你好運!
- 亞當
如果你想有一個融合,看起來像大多數顏色選擇器GUI小東西,你真的要轉換爲HSL或HSV。從那裏,你可能在每個維度都有線性插值。
試圖做任何插值直接在RGB色彩空間是一個壞主意。它的方式太非線性了(在這種情況下,伽馬校正不會起作用)。
對於那些尋找的東西,他們可以複製和粘貼。爲RGB顏色製作了一個快速功能。返回接近rgbColor2
的單個顏色,數量爲ratio
。
function fadeToColor(rgbColor1, rgbColor2, ratio) {
var color1 = rgbColor1.substring(4, rgbColor1.length - 1).split(','),
color2 = rgbColor2.substring(4, rgbColor2.length - 1).split(','),
difference,
newColor = [];
for (var i = 0; i < color1.length; i++) {
difference = color2[i] - color1[i];
newColor.push(Math.floor(parseInt(color1[i], 10) + difference * ratio));
}
return 'rgb(' + newColor + ')';
}
- (UIColor *)colorFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor percent:(float)percent
{
float dec = percent/100.f;
CGFloat fRed, fBlue, fGreen, fAlpha;
CGFloat tRed, tBlue, tGreen, tAlpha;
CGFloat red, green, blue, alpha;
if(CGColorGetNumberOfComponents(fromColor.CGColor) == 2) {
[fromColor getWhite:&fRed alpha:&fAlpha];
fGreen = fRed;
fBlue = fRed;
}
else {
[fromColor getRed:&fRed green:&fGreen blue:&fBlue alpha:&fAlpha];
}
if(CGColorGetNumberOfComponents(toColor.CGColor) == 2) {
[toColor getWhite:&tRed alpha:&tAlpha];
tGreen = tRed;
tBlue = tRed;
}
else {
[toColor getRed:&tRed green:&tGreen blue:&tBlue alpha:&tAlpha];
}
red = (dec * (tRed - fRed)) + fRed;
green = (dec * (tGreen - fGreen)) + fGreen;
blue = (dec * (tBlue - fBlue)) + fBlue;
alpha = (dec * (tAlpha - fAlpha)) + fAlpha;
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
- 1. jquery使div與計時器褪色
- 2. 基於Checked-Box計數的褪色Divog
- 3. 褪色圖像網頁設計
- 4. ObjectAnimator不褪色
- 5. 與jquery褪色?
- 6. Fancybox 3.0褪色
- 7. 與jquery褪色
- 8. 褪色背景
- 9. 褪色樣本
- 10. 如何褪色
- 11. 褪色的ghostscript
- 12. jQuery:褪色
- 13. 邊境褪色
- 14. 圖像褪色
- 15. ArcMap顏色顯得褪色
- 16. Fullpage.js與背景色褪色
- 17. Python - RGB LED顏色褪色
- 18. 背景顏色不褪色
- 19. Javascript顏色褪色延遲
- 20. Cycle2褪色標題
- 21. jQuery過早褪色
- 22. CSS褪色懸停
- 23. jQuery褪色效果
- 24. CATransition推不褪色
- 25. Android自動褪色
- 26. CSS懸停褪色
- 27. 褪色垂直線
- 28. Lua:褪色功能
- 29. CSS3漸變褪色
- 30. jquery - 背景褪色。
如圖永遠達不到newRed,一方面是因爲整數截斷和差一錯誤的代碼。更好地重組爲currentRed = oldRed +((i *(newRed - oldRed))/(steps-1)。 – 2008-11-26 04:16:04
是的,當我正在寫它時,我想到了這一點 - 但有一些方法,我想我'd爲實施者留下練習:-) – nickf 2008-11-26 05:02:13