2010-03-08 12 views
12

में कनवर्ट करें मुझे आरजीबी मानों को एचएसवी मानों में परिवर्तित करने के लिए इंटरनेट पर एक विधि मिली है। दुर्भाग्यवश, जब मान आर = जी = बी हैं, तो 0/0 ऑपरेशन के कारण मुझे NaN मिल रहा है।आरजीबी मान को एचएसवी

क्या आप जानते हैं कि जावा में इस रूपांतरण के लिए एक कार्यान्वित विधि है या मुझे क्या करना है जब मुझे 0/0 डिवीजन एचएसवी का सही मूल्य प्राप्त करने के लिए मिलता है?

यहाँ मेरी विधि, इंटरनेट पर कुछ कोड से अनुकूलित आता है:

public static double[] RGBtoHSV(double r, double g, double b){ 

    double h, s, v; 

    double min, max, delta; 

    min = Math.min(Math.min(r, g), b); 
    max = Math.max(Math.max(r, g), b); 

    // V 
    v = max; 

    delta = max - min; 

    // S 
    if(max != 0) 
     s = delta/max; 
    else { 
     s = 0; 
     h = -1; 
     return new double[]{h,s,v}; 
    } 

    // H 
    if(r == max) 
     h = (g - b)/delta; // between yellow & magenta 
    else if(g == max) 
     h = 2 + (b - r)/delta; // between cyan & yellow 
    else 
     h = 4 + (r - g)/delta; // between magenta & cyan 

    h *= 60; // degrees 

    if(h < 0) 
     h += 360; 

    return new double[]{h,s,v}; 
} 
+0

सवाल का वास्तविक जवाब में रुचि किसी के लिए , मेरा मानना ​​है कि आर = जी = बी, एचएसवी = [0,0, आर/255.0]। रंग मनमाने ढंग से है, संतृप्ति 0 है (यह भूरे रंग की छाया है) और मान हालांकि उज्ज्वल आर = जी = बी मान है। – thomas88wp

उत्तर

49

मैं यकीन है कि आप क्या चाहते हैं कर रहा हूँ है RGBtoHSB

int r = ... 
int g = ... 
int b = ... 
float[] hsv = new float[3]; 
Color.RGBtoHSB(r,g,b,hsv) 
//hsv contains the desired values 
+0

एचएसवी और एचएसबी के बीच क्या अंतर है? – marionmaiden

+8

तीसरे मान के लिए बस एक अलग नाम। ह्यू, संतृप्ति, और मूल्य या चमक। – job

+3

एचएसवी एचएसएल के समान नहीं है। https://en.wikipedia.org/wiki/HSL_and_HSV –

संबंधित मुद्दे