【问题标题】:How to interpolate four colors?如何插值四种颜色?
【发布时间】:2015-06-20 20:32:46
【问题描述】:

我需要在我的麦克风可视化器中插入四种颜色。

  • 如果用户保持沉默,则为白色。

  • 如果用户轻声说话,则变为红色。

  • 3 如果用户正常说,则颜色为黄色。

  • 如果用户说话,4 种颜色为绿色 大声点。

我创建 Paint void 以更改颜色,但我不知道如何插入这四种颜色,我只知道如何使用两种颜色进行此操作。我需要做什么?

 // used to take colors mix according to proportion
  private int interpolateColor(final int a, final int b,
                               final float proportion) {
    final float[] hsva = new float[3];
    final float[] hsvb = new float[3];
    Color.colorToHSV(a, hsva);
    Color.colorToHSV(b, hsvb);
    for (int i = 0; i < 3; i++) {
      hsvb[i] = interpolate(hsva[i], hsvb[i], proportion);
    }
    return Color.HSVToColor(hsvb);
  }

  private float interpolate(final float a, final float b,
                            final float proportion) {
    return (a + ((b - a) * proportion));
  }

【问题讨论】:

  • 您可以使用不止一种插值函数,但您可能想要的是:找出您介于哪两种颜色之间,然后只对这两种颜色进行插值。

标签: java android colors


【解决方案1】:

假设您已经在浮点值中确定了用户的当前“音量”,其中 0 是完全静音,1 是最大值,那么我会这样做:

float v = userVolume();

if (v < SOFT_CUTOFF)
    color = interpolateColor(SILENT_COLOR, SOFT_COLOR, v/SOFT_CUTOFF);
else if (v < NORMAL_CUTOFF)
    color = interpolateColor(SOFT_COLOR, NORMAL_COLOR, (v-SOFT_CUTOFF)/(NORMAL_CUTOFF-SOFT_CUTOFF));
else
    color = interpolateColor(NORMAL_COLOR, LOUD_COLOR, (v-NORMAL_CUTOFF)/(1-NORMAL_CUTOFF));

SOFT_CUTOFF 和 NORMAL_CUTOFF 应设置为 0 到 1 之间的值,以定义它们应为全色的比率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多