我正在使用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值是淡黄色。
是否有其他人遇到此问题或知道如何解决此问题?
答案 0 :(得分:1)
使用相同的Java SDK (需要登录)编写桌面应用程序时,我遇到了类似的问题。有趣的是,一个普通的红色变成淡黄色,正如你描述的那样。一种可能的解决方案是直接使用xy值而不是从hue-values转换。这最终解决了我的问题。您可以使用方法BitmapFactory.Options
和PHLightState
从.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()