将 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
我正在使用 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