文章目录
色温值
色温是屏幕的一个重要参数,通常按照某个特定的白点去调整,标准一般有6500K(D65)和9000K(D90)两种。色温值的高低会影响屏幕的色彩表现,高于6500K表示屏幕色彩偏冷(冷屏),低于6500K表示屏幕色彩偏暖(暖屏)。对色温的喜好与所处的地理环境和瞳孔颜色有关,因此,选择何种色温值主要取决于个人喜好,以看着舒服为宜
安卓色温值转成rgb
借鉴网上其他语言的代码写的kotlin代码, 返回的是rgb整数值,如果要返回Color可自行修改,里面有红,绿,蓝,三色值。 色温转rgb,rgb再转色温,没找到严格的转换公式,可能精度上有差异。
网上不同的转换方法,得出来的值都不一样,能不能用,请自行思量。
class ColorUtil {
companion object {
/**
* 色温值转成rgb整数值
*
* @param temperature
* @return
*/
fun temperatureToRgb(temperature: Int): Int {
var tempera:Double = temperature.toDouble()
if (tempera < 1000) {
tempera = 1000.0
}
if (tempera > 40000) {
tempera = 40000.0
}
tempera = (tempera / 100.0F)
var red = 0.0
if (tempera <= 66) {
red = 255.0
} else {
red = tempera - 60
red = 329.698727446 * Math.pow(red, -0.1332047592)
if (red.compareTo(0.0) < 0) {
red = 0.0
} else if (red > 255.0) {
red = 255.0
}
}
var green = 0.0
if (tempera <= 66) {
green = tempera
green = 99.4708025861 * Math.log(green) - 161.1195681661
if (green < 0) {
green = 0.0
}
if (green > 255) {
green = 255.0
}
} else {
green = tempera - 60
green = 288.1221695283 * Math.pow(green, -0.0755148492)
if (green < 0) {
green = 0.0
}
if (green > 255) {
green = 255.0
}
}
var blue = 0.0
if (tempera >= 66) {
blue = 255.0
} else {
if (tempera <= 19) {
blue = 0.0
} else {
blue = tempera - 10
blue = 138.5177312231 * Math.log(blue) - 305.0447927307
if (blue < 0) {
blue = 0.0
}
if (blue > 255) {
blue = 255.0
}
}
}
/**
* rgb中的red, green,blue必须转为int, 不能是浮点,否则值差异非常大
* 另外还要把右移8位,且符号位要置为0,比如(255, 186, 129)转成hex得到ffffba81, 我们需要的是ffba81
*/
val intValue = Color.rgb(red.toInt(), green.toInt(), blue.toInt()) and(0xffffff)
return intValue
}
}
}
作者:帅得不敢出门