将 XY 值转换为 RGB

Convert XY Values to RGB

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

我查看了 Philips 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 值是淡黄色。

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

我在使用相同的 Java SDK (login required). Interestingly, a plain red turned into a fade yellow, exactly how you describe it. A possible solution is to use the xy-values directly instead of the conversion from hue-values. That finally solved the problem for me. You can get the xy-values from the PHLightState object using the methods .getX() and .getY(). After that, use colorFromXY as in your code to get the RGB-values (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 的 'normal' 灯泡有很多限制。例如:大多数绿色变成黄色,蓝色包含一定量的红色。

示例值: 以下整体转换是在我使用 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