【问题标题】:android Color class - strange behavior, internal rounding error?android Color 类 - 奇怪的行为,内部舍入错误?
【发布时间】:2014-01-06 14:32:39
【问题描述】:

我有一个简单的颜色整数,例如 0x8833aacc
如果我现在使用 Color.colorToHSV 创建它的 HSV 值,
然后用Color.HSVToColor 把int 取回来,略有不同!
the red value decreases by 1

但它并非每次都这样做,例如使用0x8830aacc时一切正常,为什么?
我的示例代码显示了这一点:

final float[] current_hsv = new float[3];
float current_alpha = 1.0f;

private int GetColor()
{
    return Color.HSVToColor((int)(current_alpha * 255.0f), current_hsv);
}

private void SetColor(int color)
{
    Color.colorToHSV(color, current_hsv);
    current_alpha = (float)Color.alpha(color) / 255.0f;
}

private void Test()
{
    int color = 0x8833aacc;
    SetColor(color);
    int g = GetColor();

    //convert to hex, you'll see the red value decreased by 1!!!
    Log.i("Test", "color: " + String.format("%08x", color) + " got color: " + String.format("%08x", g));
}

我该如何解决这个问题?

【问题讨论】:

    标签: java android colors internal


    【解决方案1】:

    自己修好了:
    androids Color.colorToHSVColor.HSVToColor 内部肯定有一个错误。
    我现在使用 oracles HSBToRGBRGBToHSB 实现,
    他们没有这个问题。

    (对于那些不知道的人:HSB是[色相] [饱和度] [亮度]
    并且 [亮度] 与 HSV 中的 [值] 相同 - 所以没有区别)
    现在一切正常:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多