假设我有两种颜色。
public final static Color FAR = new Color(237, 237, 30);
public final static Color CLOSE = new Color(58, 237, 221);
如何在不使用深色的情况下过渡从一种颜色到另一种颜色?
我想出了一些思路,比如:
double ratio = diff / range; // goes from 1 to 0
int red = (int)Math.abs((ratio * FAR.getRed()) - ((1 - ratio) * CLOSE.getRed()));
int green = (int)Math.abs((ratio * FAR.getGreen()) - ((1 - ratio) * CLOSE.getGreen()));
int blue = (int)Math.abs((ratio * FAR.getBlue()) - ((1 - ratio) * CLOSE.getBlue()));
或者
double ratio = diff / range; // goes from 1 to 0
int red = (int) ((1 - (diff / range)) * FAR.getRed() + CLOSE.getRed() - FAR.getRed());
int green = (int) ((1 - (diff / range)) * FAR.getGreen() + CLOSE.getGreen() - FAR.getGreen());
int blue = (int) ((1 - (diff / range)) * FAR.getBlue() + CLOSE.getBlue() - FAR.getBlue());
然而,不幸的是,它们中没有一种可以平滑地从一种颜色过渡到另一种颜色。
有人知道如何做到在保持颜色鲜艳的同时不使其变暗,或者如何确保渐变过渡平滑而不是起初缓慢,然后变快,再变慢吗?
我真的想不出任何公式。
diff
和range
都是整数吗?如果是,要注意整数除法。 - Alexis C.