利用Palette庫來取得圖片中的主要色彩
使用這個Android的開源庫android-support-v7-palette卫键。
流程:
得到一個bitmap熬粗,通過方法進(jìn)行分析鸥鹉,取出LightVibrantSwatch蛮穿,DarkVibrantSwatch,LightMutedSwatch毁渗,DarkMutedSwatch這些樣本践磅,然后得到rgb。Palette這個類中提取以下突出的顏色:
Vibrant (有活力)
Vibrant dark(有活力 暗色)
Vibrant light(有活力 亮色)
Muted (柔和)
Muted dark(柔和 暗色)
Muted light(柔和 亮色)創(chuàng)建方法
//目標(biāo)bitmap
Bitmap bm =BitmapFactory.decodeResource(getResources(),R.drawable.kale);
//方法1
Palette.Builder builder = Palette.from(bm);
Palette palette=builder.generate();
//方法2 使用異步
builder.generate(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Here's your generated palette
}
Palette palette=Palette.generate() 等方法直接廢棄掉了
使用樣本(swatch)
創(chuàng)建完一個實例之后灸异,我們還需要得到一種采集的樣本(swatch)府适,有6中樣本(swatch):
Palette.getVibrantSwatch()
Palette.getDarkVibrantSwatch()
Palette.getLightVibrantSwatch()
Palette.getMutedSwatch()
Palette.getDarkMutedSwatch()
Palette.getLightMutedSwatch()
List<Palette.Swatch> swatches = palette.getSwatches();//一次性獲得所有的swatch;使用方法
getPopulation(): the amount of pixels which this swatch represents.
getRgb(): the RGB value of this color.
getHsl(): the HSL value of this color.
getBodyTextColor(): the RGB value of a text color which can be displayed on top of this color.
getTitleTextColor(): the RGB value of a text color which can be displayed on top of this color.
比如如果你的TextView 有個背景圖片,要想讓字體顏色能夠和背景圖片匹配肺樟,則使用getBodyTextColor()比較合適檐春,getTitleTextColor()其實應(yīng)該和getBodyTextColor()差不多
-
Size問題
在上面的代碼中,你可能注意到了可以設(shè)置palette的size么伯。size越大疟暖,花費(fèi)的時間越長,而越小田柔,可以選擇的色彩也越小俐巴。最佳的選擇是根據(jù)image的用途: - 頭像之類的,size最好在24-32之間硬爆;
- 風(fēng)景大圖之類的 size差不多在8-16欣舵;
- 默認(rèn)是16.
- 使用代碼
Bitmap bm = BitmapFactory.decodeResource(getResources(),
R.drawable.kale);
Palette palette = Palette.generate(bm);
if (palette.getLightVibrantSwatch() != null) {//需要注意的是`getVibrantSwatch()可能會返回一個null值,所以檢查一下是必須的缀磕。
//得到不同的樣本缘圈,設(shè)置給imageview進(jìn)行顯示
iv.setBackgroundColor(palette.getLightVibrantSwatch().getRgb());
iv1.setBackgroundColor(palette.getDarkVibrantSwatch().getRgb());
iv2.setBackgroundColor(palette.getLightMutedSwatch().getRgb());
iv3.setBackgroundColor(palette.getDarkMutedSwatch().getRgb());
}