
我对颜色数学一无所知,但是我可以为代码提供这种替代结构,这使我的审美感觉发痒,因为这使我很清楚,这6种情况分别是值t和p的不同排列。(我也很害怕长的if-
else链。)
public static String hsvToRgb(float hue, float saturation, float value) { int h = (int)(hue * 6); float f = hue * 6 - h; float p = value * (1 - saturation); float q = value * (1 - f * saturation); float t = value * (1 - (1 - f) * saturation); switch (h) { case 0: return rgbToString(value, t, p); case 1: return rgbToString(q, value, p); case 2: return rgbToString(p, value, t); case 3: return rgbToString(p, q, value); case 4: return rgbToString(t, p, value); case 5: return rgbToString(value, p, q); default: throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + saturation + ", " + value); }}public static String rgbToString(float r, float g, float b) { String rs = Integer.toHexString((int)(r * 256)); String gs = Integer.toHexString((int)(g * 256)); String bs = Integer.toHexString((int)(b * 256)); return rs + gs + bs;}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)