如何从图片中获取全部颜色或主色调?附尝试代码
获取图片主色调与全部颜色样本的完整实现
看起来你已经在使用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
相关产品推荐
相关产品推荐

