gpt4 book ai didi

Java 平滑颜色过渡

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:01 25 4
gpt4 key购买 nike

假设我有两种颜色。

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());

但不幸的是,它们都不能从一种颜色平滑地过渡到另一种颜色。有谁知道如何做到这一点同时保持颜色明亮而不是浸入较深的颜色,或者如何确保渐变过渡是平滑的而不是先慢后快再慢?

我真的想不出任何公式。

最佳答案

您在计算中使用了错误的符号。应该是加号,而不是减号,以正确应用该比率。

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()));

您在现有实现中使用深色的原因是,使用 (-),它们通常会接近于零(小于 50?或负数但大于 -50?),在负数情况下,嗯,你取的是绝对值,所以它变成了一个小的正数,即深色。

关于Java 平滑颜色过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19841477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com