Created
November 15, 2015 20:47
-
-
Save jimstudt/c5069349f305dd5bb6b2 to your computer and use it in GitHub Desktop.
An iOS extension to UIColor to get a white point corresponding to a temperature.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension UIColor { | |
// based on http://www.zombieprototypes.com/?p=210 who looked at some data and did a bunch of curve fitting | |
static func colorWithKelvin( kelvin: CGFloat) -> UIColor { | |
let k = kelvin < 1000 ? 1000 : ( kelvin > 40000 ? 40000 : kelvin) | |
func interpolate( value: CGFloat, a: CGFloat, b:CGFloat, c:CGFloat) -> CGFloat { | |
return a + b*value + c*log(value) | |
} | |
var red,green,blue: CGFloat | |
if k < 6600 { | |
red = 255 | |
green = interpolate(k/100-2, a: -155.25485562709179, b: -0.44596950469579133, c: 104.49216199393888) | |
if k < 2000 { | |
blue = 0 | |
} else { | |
blue = interpolate(k/100-10, a: -254.76935184120902, b: 0.8274096064007395, c: 115.67994401066147) | |
} | |
} else { | |
red = interpolate( k/100-55, a: 351.97690566805693, b: 0.114206453784165, c: -40.25366309332127) | |
green = interpolate(k/100-50, a: 325.4494125711974, b: 0.07943456536662342, c: -28.0852963507957) | |
blue = 255 | |
} | |
return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1.0) | |
} | |
static func colorByMultiplying( a: UIColor, _ b: UIColor) -> UIColor { | |
var ar = CGFloat(0) | |
var ab = CGFloat(0) | |
var ag = CGFloat(0) | |
var aa = CGFloat(0) | |
var br = CGFloat(0) | |
var bb = CGFloat(0) | |
var bg = CGFloat(0) | |
var ba = CGFloat(0) | |
if a.getRed(&ar, green: &ag, blue: &ab, alpha: &aa) && | |
b.getRed(&br, green: &bg, blue: &bb, alpha: &ba) { | |
return UIColor(red: ar*br, green: ag*bg, blue: ab*bb, alpha: aa*ba) | |
} else { | |
// Couldn't work. | |
return a | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment