2016-03-29 17 views
2

Android Philips Hue SDK'yı kullanıyorum ve şu anda ışıklı ampul XY değerini RGB'ye dönüştürmekte sorun yaşıyorum.XY Değerlerini RGB'ye Dönüştürme

Philips Hue web sitesinde bir forumda verilen this code numaralı telefona baktım ve kod Hue Support'dan birisi tarafından sağlandı.

ben forumda bu kodu kullanarak aşağıdaki işlevi vardır:

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

Ve bunu ister sesleniyorum:

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

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

Ben dönene o gibi görünüyor RGB değeri baktığımızda yanlış renk. Örneğin, resmi uygulamayı kullanarak, ampullerimden birini kırmızıya ayarladım. Uygulamamı çalıştırdığımda geri gelen RGB değeri soluk sarıdır.

Bunu yaşayan başka bir kişi veya bu sorunu nasıl çözeceğini biliyor mu?

cevap

1

Aynı Java SDK(giriş gerekli) kullanarak bir masaüstü uygulaması programlama yaparken benzer bir sorun yaşadım. İlginç bir şekilde, düz bir kırmızı soluk sarıya dönüştü, tam olarak nasıl tanımladığınız. Olası bir çözüm, xy değerlerini doğrudan renk değerlerinden dönüştürmek yerine kullanmaktır. Sonunda sorun benim için çözüldü. .getX() ve .getY() yöntemlerini kullanarak xy değerlerini PHLightState nesnesinden alabilirsiniz. Bundan sonra, RGB değerlerini almak için colorFromXY kodunu kullanın (as android color value = int). Zaten gibi Android'de

PHLightState s = light.getLastKnownLightState(); 

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

, combRGB dönüştürün. android.graphics.Color'u eklediğinizden emin olun.

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

Not: ışıklar sadece tipine göre belirli bir renk yelpazesi ele alabilir olmayan Android sistemlerde test ediyorsanız aşağıdaki kodu kullanabilirsiniz. Bu ayrıntı here'da açıklanmaktadır. Bir renk gamı ​​B olan 'normal' ampullerin bazı sınırlamaları vardır. Örneğin: çoğu yeşillik sarıya dönüşür ve maviler belli bir miktar kırmızı içerir.

Örnek değerler: Aşağıdaki genel dönüşümler LCT001-blubs ile canlı sistemimde test edilir. Ben girişi dönüştürmek için PHUtilities.calculateXYFromRGB() kullandım, daha sonra .setX() ve .setY() ile yeni ışık durumunun xy değerlerini ayarlayıp son olarak köprüye yolladım. Değerler, sonraki güncellemeyi alır almaz uygulamadaki ışık önbelleğinden ayıklanır.

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

Yardımlarınız için çok teşekkürler. Philips'in neden tek bir yönde yaptıkları gibi bir dönüştürme hizmetine sahip olmadığını anlamıyorum, neden geri dönüş yapmıyorsunuz? biraz garip – Boardy

İlgili konular