Google Palette 1 -介绍以及使用

  1. Palette 简介
    Google Palette 是一个用来提取图片平均颜色的工具
    最常用的做法就是根据封面来设置详情页面的title 颜色
    例如:
    在这里插入图片描述

在这个例子里,可以看到,使用了视频图片的主要的两个颜色作为title 背景和简介文字的背景
2. Palette 使用
首先先添加依赖
如果你用的是support-v7 的

implementation 'com.android.support:palette-v7:24.2.1'

如果是androidX 的

implementation "androidx.palette:palette:1.0.0"

Palette 使用,有同步和异步两种模式,因为会涉及解析图片的问题,所以遇到大图片或者低性能机,有可能会用更多时间去处理。所以建议使用异步方式去解析
eg:其中resource 是一个Bidmap 对象,所以如果是网络图片的话,需要自己去用Glide 等工具下载后使用
异步:

                Palette.from(resource).generate { palette ->
                   //do SomeThing
                }

同步:

                val palette = Palette.from(resource).generate()
                //do someThing

通过以上两种方式都可以获取到的Palette 对象
通过getXX 方法可以获取到以下各种模式的 Palette.Swatch 对象

 *     Vibrant //艳丽
 *     Vibrant Dark //艳丽暗色
 *     Vibrant Light //艳丽亮色
 *     Muted //柔和
 *     Muted Dark // 柔和暗色
 *     Muted Light //柔和亮色

然后getRGB 就可以获取到我们一般使用的颜色值
eg: 示例图,我所使用的是,title > darkVibrantSwatch ,text > darkMutedSwatch 参考比较一下

  1. 注意问题
    在获取Swatch 时有一定几率会获取到null ,所以防止空指针时注意要判空处理

  2. 完整代码

Palette.from(resource).generate { palette ->
    //获取到合适颜色Swatch
    var vibrantTitle = palette?.darkVibrantSwatch
    var vibrantbody = palette?.darkMutedSwatch

    //当为空时,获取解析到的第一位作为备选
    if (vibrantTitle == null && palette?.swatches?.size != 0) {
        vibrantTitle = palette?.swatches?.get(0)
    }
    if (vibrantbody == null && palette?.swatches?.size != 0) {
        vibrantbody = palette?.swatches?.get(0)
    }
    //设置颜色
    vibrantTitle?.let {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.statusBarColor = vibrantTitle.rgb
            app_bar.setBackgroundColor(vibrantTitle.rgb)
        }
    }
    vibrantbody?.let {
        ll_root.setBackgroundColor(vibrantbody.rgb)
    }
}
以下是使用Sentinel-1数据反演土壤湿度的Python代码示例: ```python # 导入必要的库 import ee import math # 初始化 Earth Engine ee.Initialize() # 定义区域 roi = ee.Geometry.Point(116.3, 39.9).buffer(1000) # 定义时间段 start_date = ee.Date('2020-01-01') end_date = ee.Date('2020-12-31') # 加载Sentinel-1数据 s1 = ee.ImageCollection('COPERNICUS/S1_GRD') \ .filterBounds(roi) \ .filterDate(start_date, end_date) \ .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV')) \ .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH')) \ .filter(ee.Filter.eq('instrumentMode', 'IW')) # 定义常数 a = 0.004 b = 0.3081 # 计算土壤湿度 def calculate_soil_moisture(image): # 选择VV和VH通道 vv = image.select('VV') vh = image.select('VH') # 计算Gamma0 gamma0 = ee.Image(10).pow(vv.divide(10.0)).multiply(math.cos(image.select('angle').multiply(math.pi/180.0))).divide(math.sin(image.select('angle').multiply(math.pi/180.0))) # 计算R r = vh.divide(vv) # 计算土壤湿度 soil_moisture = gamma0.expression('(a*R + b)/(1 + R)', {'a': a, 'b': b, 'R': r}) return image.addBands(soil_moisture.rename('soil_moisture')) # 对所有图像进行土壤湿度计算 s1_with_soil_moisture = s1.map(calculate_soil_moisture) # 取出最新的土壤湿度图像 soil_moisture = ee.Image(s1_with_soil_moisture.sort('system:time_start', False).first().select('soil_moisture')) # 可视化 vis_params = {'min': 0, 'max': 0.5, 'palette': ['blue', 'white', 'green']} Map.addLayer(soil_moisture, vis_params, 'Soil Moisture') ``` 需要注意的是,这段代码使用Google Earth Engine平台,需要在该平台上运行。而且,该代码仅供参考,实际应用中需要根据具体情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值