【问题标题】:Convert XY Values to RGB将 XY 值转换为 RGB
【发布时间】:2016-03-29 21:42:15
【问题描述】:

我正在使用 Android Philips Hue SDK,目前在将灯泡 XY 值转换为 RGB 时遇到问题。

我查看了飞利浦 Hue 网站论坛中提供的 this code,代码由 Hue 支持人员提供。

我使用论坛中的此代码具有以下功能:

public static int[] convertXYToRGB(float[] xy, String lightModel)
    {
        int color = PHUtilities.colorFromXY(xy, lightModel);
        int r = Color.red(color);
        int g = Color.green(color);
        int b = Color.blue(color);
        return new int[] {r, g, b};
    }

我这样称呼它:

int hue = lightState.getHue();
float[] xy = PHUtilities.calculateXY(hue, item.light.getModelNumber());

int[] rgb = Utilities.convertXYToRGB(xy, item.light.getModelNumber());

查看我返回的 RGB 值,它似乎是错误的颜色。例如,使用官方应用程序,我将我的一个灯泡设置为红色。当我运行我的应用程序时,返回的 RGB 值是淡黄色。

有没有其他人遇到过这个问题或知道如何解决这个问题?

【问题讨论】:

    标签: android philips-hue


    【解决方案1】:

    我在使用相同的Java SDK 编写桌面应用程序时遇到了类似的问题(需要登录)。有趣的是,纯红色变成了淡黄色,正如你所描述的那样。一种可能的解决方案是直接使用 xy 值,而不是从色调值转换。这终于为我解决了这个问题。您可以使用.getX().getY() 方法从PHLightState 对象中获取xy 值。之后,在代码中使用 colorFromXY 来获取 RGB 值 (as android color value = int)。

    PHLightState s = light.getLastKnownLightState();
    
    float xy[] = new float[] {s.getX(), s.getY()};
    int combRGB = PHUtilities.colorFromXY(xy, light.getModelNumber());
    

    在 Android 上,像您已经做的那样转换 combRGB。确保包含android.graphics.Color。如果您在非 Android 系统上进行测试,您可以使用以下代码:

    Color theColor = new Color(combRGB);
    int[] sepRGB = {theColor.getRed(), theColor.getGreen(), theColor.getBlue()};
    

    注意:根据类型,灯只能处理一定的色域。这将详细解释here。具有色域 B 的“普通”灯泡有相当多的限制。例如:大多数绿色变成黄色,蓝色包含一定量的红色。

    示例值:以下整体转换是在我使用 LCT001-blubs 的实时系统上测试的。我使用PHUtilities.calculateXYFromRGB() 转换输入,然后用.setX().setY() 设置新光状态的xy 值,最后将其发送到桥接器。然后,一旦获得下一次更新,就会从应用程序的轻量缓存中提取这些值。

    255   0   0   ->   254   0   0
      0 255   0   ->   237 254   0
      0   0 255   ->    90   0 254
    200   0 200   ->   254   0 210
    255 153   0   ->   254 106   0
    255 153 153   ->   254  99 125
    

    【讨论】:

    • 非常感谢您的帮助。我不明白为什么飞利浦没有一个转换实用程序,因为他们在一个方向上这样做,为什么不转换回来。有点奇怪
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2012-10-29
    • 2011-01-24
    • 2013-05-10
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多