You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从图片中获取全部颜色或主色调?附尝试代码

获取图片主色调与全部颜色样本的完整实现

看起来你已经在使用Android的Palette库来提取图片色彩了,不过代码好像没写完,我来帮你补全并优化一下,让它能稳定获取图片的主色调和全部颜色样本:

public ArrayList<String> getDominantColorFromImage(Bitmap bitmap) {
    ArrayList<String> colorHexList = new ArrayList<>();
    
    // 生成Palette色彩实例(同步方式,适合非主线程场景)
    Palette palette = Palette.from(bitmap).generate();
    
    // 获取所有颜色样本集合
    List<Palette.Swatch> swatches = new ArrayList<>(palette.getSwatches());
    
    // 按颜色样本的像素占比降序排序——占比越高越接近主色调
    Collections.sort(swatches, new Comparator<Palette.Swatch>() {
        @Override
        public int compare(Palette.Swatch swatch1, Palette.Swatch swatch2) {
            return Integer.compare(swatch2.getPopulation(), swatch1.getPopulation());
        }
    });
    
    // 将每个颜色样本转换成十六进制字符串,存入结果列表
    for (Palette.Swatch swatch : swatches) {
        // 格式化RGB值为标准十六进制颜色格式
        String hexColor = String.format("#%06X", (0xFFFFFF & swatch.getRgb()));
        colorHexList.add(hexColor);
    }
    
    return colorHexList;
}

关键细节补充

  • 异步生成优化:如果在主线程处理大图片,建议用异步生成避免ANR:
    Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
        @Override
        public void onGenerated(@Nullable Palette palette) {
            if (palette != null) {
                // 在这里处理获取到的色彩样本
            }
        }
    });
    
  • 快捷获取特定色调:如果不需要全部颜色,Palette提供了现成的主色调快捷方法:
    • palette.getDominantSwatch():直接拿占比最高的主色调
    • palette.getVibrantSwatch():获取鲜艳风格的主色调
    • palette.getMutedSwatch():获取柔和风格的主色调
  • 依赖配置:确保项目已引入Palette库,在build.gradle中添加:
    dependencies {
        implementation 'androidx.palette:palette:1.0.0'
    }
    

内容的提问来源于stack exchange,提问作者Rashedul Rough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:56:00