android色温值转成rgb

色温值

色温是屏幕的一个重要参数,‌通常按照某个特定的白点去调整,‌标准一般有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
        }

    }

}

作者:帅得不敢出门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值