代码之家  ›  专栏  ›  技术社区  ›  TT.

计算颜色淡入度

  •  11
  • TT.  · 技术社区  · 17 年前

    有两种颜色和颜色 N 步骤,如何计算n种颜色,包括创建淡入效果的两种给定颜色?

    如果可能的话,最好使用伪代码,但这可能会在Java中实现。

    谢谢

    7 回复  |  直到 17 年前
        1
  •  21
  •   Drew Noakes    13 年前

    将每种颜色划分为其RGB分量,然后计算所需的各个步骤。

    oldRed = 120;
    newRed = 200;
    steps = 10;
    redStepAmount = (newRed - oldRed) / steps;
    
    currentRed = oldRed;
    for (i = 0; i < steps; i++) {
       currentRed += redStepAmount;
    }
    

    很明显,将其扩展为绿色和蓝色。

        2
  •  11
  •   Community Mohan Dere    9 年前
        3
  •  4
  •   Tom    17 年前

    如果您想要一个看起来像大多数颜色选择器GUI小部件的混合,那么您真的需要转换为HSL或HSV。从这里开始,您可能可以在每个维度中使用线性插值。

    直接在RGB颜色空间中插值是个坏主意。它的方式太非线性(不,伽马校正在这种情况下不会有帮助)。

        4
  •  4
  •   Chris Dolphin    12 年前

    ratio 接近 rgbColor2

    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 + ')';
    }
    
        5
  •  1
  •   Kent Fredric    17 年前

    FF0000和00FF00

    它将从红色到黄色过渡到绿色。

    但是,如果您将“黑色”或其他颜色定义为混合的中点,则必须先将其着色为该颜色ff0000->000000->00ff00或白色通道:ff0000->ffffff->00ff00。

        6
  •  1
  •   Drew Hall    17 年前

    最简单的方法是在颜色组件之间进行线性插值(参见nickf的回答)。请注意,眼睛是高度非线性的,所以它不一定看起来像你在走哪怕一步。一些颜色空间试图解决这个问题(可能是CIE?),所以您可能希望先转换到另一个颜色空间,进行插值,然后转换回RGB或您正在使用的任何颜色空间。

        7
  •  0
  •   Community Mohan Dere    9 年前

    怎么样 this answer

    - (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];
    }
    
    推荐文章