美文网首页UI
安卓实现图片反色,改色-ColorMatrixColorFilt

安卓实现图片反色,改色-ColorMatrixColorFilt

作者: 蓝不蓝编程 | 来源:发表于2020-09-10 10:58 被阅读0次

    效果图

    原图
    过滤蓝光
    反色

    主要代码

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            filterBlueLightBtn.setOnClickListener { filterBlueLight() }
            reverseColorBtn.setOnClickListener { reverseColor() }
            resumeBtn.setOnClickListener { resumeColor() }
        }
    
        /**
         * 反色
         */
        private fun reverseColor() {
            val paint = Paint()
            val cm = ColorMatrix(floatArrayOf(
                    -1f, 0f, 0f, 0f, 255f,
                    0f, -1f, 0f, 0f, 255f,
                    0f, 0f, -1f, 0f, 255f,
                    0f, 0f, 0f, 1f, 0f))
            paint.colorFilter = ColorMatrixColorFilter(cm)
            window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE, paint)
        }
    
        /**
         * 过滤蓝光
         */
        private fun filterBlueLight() {
            val paint = Paint()
            // 把蓝色减弱为原来的0.7
            val cm = ColorMatrix(floatArrayOf(
                    1f, 0f, 0f, 0f, 0f,
                    0f, 1f, 0f, 0f, 0f,
                    0f, 0f, 0.7f, 0f, 0f,
                    0f, 0f, 0f, 1f, 0f))
            paint.colorFilter = ColorMatrixColorFilter(cm)
            window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE, paint)
        }
    
        /**
         * 恢复
         */
        private fun resumeColor() {
            window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE, Paint())
        }
    }
    

    完整源代码

    https://gitee.com/cxyzy1/ColorMatrixColorFilterDemo

    附录

    这种方式是基于view做的修改,也可直接针对ImageView设置颜色过滤器,详见:https://www.jianshu.com/p/f1f93a37738b

    相关文章

      网友评论

        本文标题:安卓实现图片反色,改色-ColorMatrixColorFilt

        本文链接:https://www.haomeiwen.com/subject/wobuektx.html