美文网首页
Android识别图片中的颜色

Android识别图片中的颜色

作者: Gophers | 来源:发表于2020-04-29 17:27 被阅读0次

    Java的同学可参考JAVA 图像分析-主要颜色

    前端的同学可参考palette.js

    IOS的同学可参考Google Palette算法详解以及OC化

    本篇使用谷歌的Palette库来实现

    效果图

    image

    添加依赖

    //Android
    implementation 'com.android.support:palette-v7:29.0.0'
    //AndroidX
    implementation 'androidx.palette:palette:1.0.0'
    

    代码

    object PaletteUtils {
        /**
        * 回调接口
        */
        interface IAnalyzeColor {
            fun result(result: ArrayList<ColorInfo>)
        }
    
        data class ColorInfo(
                //颜色
                val color: Int,
                //颜色占比
                val percentage: Float
        )
    
        /**
         * 从bitmap获取主色调及权重
         */
        fun paletteColor(bitmap: Bitmap, iColor: IAnalyzeColor?) {
            val builder = Palette.from(bitmap)
            builder.maximumColorCount(8)
            builder.generate { palette ->
                palette?.let {
                    val swatches = palette.swatches
                    swatches.forEach {
                        ALog.v("Palette", "${it.bodyTextColor} ${it.population}")
                    }
                    //这里取权重靠前的五个颜色
                    val take = swatches.toMutableList().sortedByDescending { it.population }.take(5)
                    val sum = take.sumBy { it.population }
                    val result = ArrayList<ColorInfo>(take.size)
                    take.forEach {
                        result.add(ColorInfo(it.rgb, it.population.toFloat() / sum))
                    }
                    iColor?.result(result)
                }
    
            }
        }
    }
    

    Demo

    由于代码不多,想实践的话可复用此demo

    相关文章

      网友评论

          本文标题:Android识别图片中的颜色

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