12

2つの色とnステップが与えられた場合、フェード効果を作成する2つの与えられた色を含むn色をどのように計算できますか?

可能であれば擬似コードが推奨されますが、これはおそらくJavaで実装されます。

ありがとう!

4

7 に答える 7

21

各色をRGBコンポーネントに分割してから、必要な個々の手順を計算します。

oldRed = 120;
newRed = 200;
steps = 10;
redStepAmount = (newRed - oldRed) / steps;

currentRed = oldRed;
for (i = 0; i < steps; i++) {
   currentRed += redStepAmount;
}

明らかに、それを緑と青に拡張します。

于 2008-11-26T02:42:58.337 に答える
11

また、確認する必要がある 2 つの適切な関連する質問があります。

多くの場合、RGB ではなく HSV 色空間でこれを行う方がよいことに注意してください。これにより、人間の目により心地よい色が生成されます (衝突または負の光学特性の可能性が低くなります)。

幸運を!

-アダム

于 2008-11-26T03:08:08.533 に答える
5

ほとんどのカラー ピッカー GUI ウィジェットのように見えるブレンドが必要な場合は、HSL または HSV に変換する必要があります。そこから、おそらく各次元の線形補間で問題ありません。

RGB 色空間で直接補間をしようとするのは悪い考えです。あまりにも非線形です (この場合、ガンマ補正は役に立ちません)。

于 2008-11-26T03:32:52.947 に答える
1

質問は、どのような変換を行いたいですか?あなたがHSV色空間に転置して与えられた場合

FF0000および00FF00

赤から黄、緑へと変化します。

ただし、「黒」またはその他のシェードをブレンドの中間点として定義する場合は、最初にその色にシェーディングする必要がありますff0000-> 000000-> 00ff00または白を介して:ff0000->ffffff->00ff00。

ただし、HSVを介した変換は、円形マップをベクトルコンポーネントにマップするために少しトリガーを使用する必要があるため、楽しい場合があります。

于 2008-11-26T02:44:34.353 に答える
1

最も簡単な方法は、色成分間の線形補間です(nickfの応答を参照)。目は非常に非線形であることに注意してください。そのため、必ずしもステップを踏んでいるように見えるとは限りません。一部の色空間はこれに対処しようとします(CIEかもしれませんか?)。そのため、最初に別の色空間に変換し、補間してから、RGBまたは使用しているものに変換し直すことができます。

于 2008-11-26T02:51:20.660 に答える
0

この答えはどうですか

- (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];
}
于 2015-07-13T05:38:56.260 に答える