将XY值转换为RGB

时间:2016-03-29 21:42:15

标签: android philips-hue

我正在使用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值是淡黄色。

是否有其他人遇到此问题或知道如何解决此问题?

1 个答案:

答案 0 :(得分:1)

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

int

在Android上,转换PHLightState s = light.getLastKnownLightState(); float xy[] = new float[] {s.getX(), s.getY()}; int combRGB = PHUtilities.colorFromXY(xy, light.getModelNumber()); 就像您已经做的那样。请务必加入combRGB。如果您在非Android系统上进行测试,则可以使用以下代码:

android.graphics.Color

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

示例值:以下整体转化在我的带有LCT001-blubs的实时系统上进行了测试。我使用Color theColor = new Color(combRGB); int[] sepRGB = {theColor.getRed(), theColor.getGreen(), theColor.getBlue()}; 转换输入,然后使用PHUtilities.calculateXYFromRGB().setX()设置新灯光状态的xy值,最后将其发送到桥接器。然后,一旦获得下一次更新,就会从应用程序中的轻缓存中提取这些值。

.setY()