2015-08-15 151 views
1

所以我一直試圖在一定程度範圍內使用HSV來循環顏色,但我似乎無法在顏色之間平滑過渡。理想情況下,我希望能夠在特定的度數範圍內移動(80-140),並在0.5-1之間循環飽和度和值。我真的不知道該從哪裏去,我渴望學習如何。Java:使用HSV循環特定顏色

int[] colors = HsvToRgb(h,s ,v); 

的方法我用:

public static int[] HsvToRgb(double h, double S, double V) { 
    double H = h; 
    while (H < 0) { 
     H += 360; 
    } 
    while (H >= 360) { 
     H -= 360; 
    } 
    double R = 0, G = 0, B = 0; 
    if (V <= 0) { 
     R = G = B = 0; 
    } else if (S <= 0) { 
     R = G = B = V; 
    } else { 
     double hf = H/60.0; 
     int i = (int) Math.floor(hf); 
     double f = hf - i; 
     double pv = V * (1 - S); 
     double qv = V * (1 - S * f); 
     double tv = V * (1 - S * (1 - f)); 
     switch (i) { 
      case 0: 
       R = V; 
       G = tv; 
       B = pv; 
       break; 
      case 1: 
       R = qv; 
       G = V; 
       B = pv; 
       break; 
      case 2: 
       R = pv; 
       G = V; 
       B = tv; 
       break; 
      case 3: 
       R = pv; 
       G = qv; 
       B = V; 
       break; 
      case 4: 
       R = tv; 
       G = pv; 
       B = V; 
       break; 
      case 5: 
       R = V; 
       G = pv; 
       B = qv; 
       break; 
      case 6: 
       R = V; 
       G = tv; 
       B = pv; 
       break; 
      case -1: 
       R = V; 
       G = pv; 
       B = qv; 
       break; 
     } 
    } 
    int r = Clamp((int) (R * 255.0)); 
    int g = Clamp((int) (G * 255.0)); 
    int b = Clamp((int) (B * 255.0)); 
    return new int[]{r, g, b}; 
} 

public static int Clamp(int i) { 
    if (i < 0) { 
     return 0; 
    } 
    if (i > 255) { 
     return 255; 
    } 
    return i; 
} 

回答

0

退房HSL Color。它的API,可以讓你輕鬆使用類似方法改變顏色:

  1. adjustHue - 指定一種顏色的程度
  2. adjustLuminance - 指定亮度
  3. 的絕對比例
  4. adjustSaturation - 指定飽和
  5. 的絕對比例
  6. adjustShade - 調整陰影會使您的顏色更深。您可以通過指定調整百分比來控制顏色的深度。
  7. adjustTone - 調整色調會給你一個更淺的顏色。您可以通過指定調整百分比來控制顏色變淺的程度。