2016-03-29 29 views
2

Ich verwende das Android Philips Hue SDK und ich habe derzeit ein Problem mit der Umwandlung der Glühbirnen XY-Wert in RGB.Konvertieren XY-Werte in RGB

Ich habe this code in einem Forum auf der Philips Hue-Website zur Verfügung gestellt und der Code wurde von jemandem von Hue Support zur Verfügung gestellt.

Ich habe die folgende Funktion den Code aus dem Forum mit:

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}; 
    } 

Und ich rufe es mag:

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

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

auf dem Wert RGB Blick bekomme ich es scheint wieder die zu sein falsche Farbe. Zum Beispiel habe ich mit der offiziellen App eine meiner Glühbirnen auf rot gesetzt. Wenn ich meine App starte, ist der RGB-Wert, der zurückkommt, ein blasses Gelb.

Hat dies noch jemand erfahren oder kann das Problem gelöst werden?

Antwort

1

Ich hatte ein ähnliches Problem beim Programmieren einer Desktop-Anwendung mit der gleichen Java SDK(Login erforderlich). Interessanterweise verwandelte sich ein einfaches Rot in ein verblassendes Gelb, genau wie du es beschreibst. Eine mögliche Lösung besteht darin, die xy-Werte direkt anstelle der Konvertierung von Farbtonwerten zu verwenden. Das hat das Problem für mich gelöst. Sie können die XY-Werte vom Objekt PHLightState mit den Methoden .getX() und .getY() abrufen. Danach verwenden Sie colorFromXY wie in Ihrem Code, um die RGB-Werte zu erhalten (as android color value = int).

PHLightState s = light.getLastKnownLightState(); 

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

Auf Android konvertieren combRGB wie Sie bereits tun. Stellen Sie sicher, dass android.graphics.Color enthalten ist. Wenn Sie auf Nicht-Android-Systeme testen können Sie den folgenden Code verwenden:

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

Hinweis: Die Lichter können nur einen bestimmten Farbbereich adressieren je nach Typ. Dies wird im Detail erläutert here. Die "normalen" Glühbirnen mit einer Farbskala B haben einige Einschränkungen. Zum Beispiel: Die meisten Grüns werden gelb und der Blues enthält eine bestimmte Menge an Rot.

Beispielwerte: Die folgenden Gesamtumrechnungen wurden an meinem Live-System mit LCT001-Blubs getestet. Ich habe PHUtilities.calculateXYFromRGB() verwendet, um den Eingang zu konvertieren, dann setze ich die xy-Werte des neuen Lichtzustands mit .setX() und .setY() und schicke es schließlich an die Brücke. Die Werte werden dann aus dem Light-Cache in der Anwendung extrahiert, sobald sie das nächste Update erhalten.

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 
+1

Vielen Dank für Ihre Hilfe. Ich verstehe nicht, warum Philips kein Konvertierungsprogramm hat, da es in eine Richtung geht, warum nicht auch zurück konvertieren. ein wenig merkwürdig – Boardy