【问题标题】:Lighten color using HSV?使用 HSV 淡化颜色?
【发布时间】:2013-06-20 13:47:09
【问题描述】:

在我的代码中我有这个:

public static int darkenColor(int color, float value) {
    float[] hsv = new float[3];
    Color.colorToHSV(color, hsv);
    hsv[2] *= value; // value component

    return Color.HSVToColor(hsv);
}

我想创建它的对应物lightenColor。正确的公式是什么?

【问题讨论】:

  • *= 的对应物可能是什么...
  • 数值通道范围在0到1之间。0为黑色1为白色
  • 在原始函数或新函数中,您应该将结果限制在可接受的范围内(例如 0-255)。

标签: java android hsv


【解决方案1】:
hsv[2] = Math.pow(hsv[2], value) 

如果值 >= 0,则始终位于 [0..1] 中。您可以对这两种方法使用该公式。

【讨论】:

  • 另一种方法会是什么样子?相同但带有否定的value?
  • 如果你想增加 hsv[2] 值必须在 [0..1],如果你需要减少值必须在 (1..infinity) - 这是一种方法。如果您需要两种具有相同值范围的方法,则可以将 hsv[2]=Math.pow(hsv[2], value) 用于 darkenColor 和 hsv[2]=Math.pow(hsv[2], 1 / value) 用于 lightenColor,其中 value >= 1。
  • 倒数 1 / value 是有道理的。不过,我无法理解pow 的用法。你能指出一个解释为什么应该使用它而不是乘法的来源吗?例如。 100*0.3 != pow(100, 0.3)
  • 我只是建议您使用pow,因为它保证您的hsv[2] 值将始终在[0..1] 范围内。
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2013-08-28
  • 2012-01-03
  • 1970-01-01
  • 2022-09-24
相关资源
最近更新 更多