日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Palette类提取图片的颜色信息

發布時間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Palette类提取图片的颜色信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文出處:http://qichaochen.github.io/2014/11/16/105-Android-5.0-Palette-01/

在Material Design設計中很重要的一部分內容是應用中圖片顏色和文字顏色需要和主題相匹配,比如下面在這個應用:

文本的顏色根據不同圖片動態進行對應適配(也許你會說,如果全部用白色文本多省事,何必這么麻煩呢?額…可以腦補一下高富帥和矮矬窮的區別)

那么在應用程序中如何提取圖片的顏色信息呢?可以提取多少種顏色信息呢? 在最新的Support Library v21提供了Palette類可以很方便的實現這個需求。

下面看一下提取圖片顏色信息的步驟和注意事項:

1、首先需要添加Palette的依賴

在build.gralde的dependencies添加appcomat v7和palette-v7依賴

dependencies {//...其他依賴compile 'com.android.support:appcompat-v7:21.0.0'compile 'com.android.support:palette-v7:21.+' }

添加完成后需要同步一下Gradle,同步成功后就可以使用Palette類了。

2、創建Palette對象

官方提供了四種根據Bitmap對象來創建Palette對象的方法,具體分別如下:

兩種同步方法:

// 最好在加載圖片線程中使用 // 默認調色板大小(16). Palette p = Palette.generate(bitmap); //設置調色板大小(24) Palette p = Palette.generate(bitmap, 24);

兩種異步方法:

// 簡單快速的實現方法,內部使用AsyncTask // 但是可能不是最優的方法(因為有線程的切換) // 默認調色板大小(16). Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {@Overridepublic void onGenerated(Palette palette) {// palette為生成的調色板} }); // 設置調色板大小(24) Palette.generateAsync(bitmap, 24, new Palette.PaletteAsyncListener() {@Overridepublic void onGenerated(Palette palette) {// palette為生成的調色板} });

調色板的大小值越大,生成的調色板的時間越長,數值越小,得到的顏色信息也越少,調色板的大小最好根據圖片類型來決定,比如:

  • 聯系人頭像:最優值24~32
  • 風景圖:8-16
  • 當然默認是16,大多數情況下都可以取得很好的效果。

3、使用Palette對象

生成了Palette對象后就可以嘗試獲取六種不同的色板,具體如下:

Palette.Swatch s1 = Palette.getVibrantSwatch(); //充滿活力的色板 Palette.Swatch s2 = Palette.getDarkVibrantSwatch(); //充滿活力的暗色類型色板 Palette.Swatch s3 = Palette.getLightVibrantSwatch(); //充滿活力的亮色類型色板 Palette.Swatch s4 = Palette.getMutedSwatch(); //黯淡的色板 Palette.Swatch s5 = Palette.getDarkMutedSwatch(); //黯淡的暗色類型色板 Palette.Swatch s6 = Palette.getLightMutedSwatch(); //黯淡的亮色類型色板

可以根據需求自由選擇色板類型(充滿活力和或充滿活力暗色類型色板應該是大部分開發經常使用的),有了色板就可以根據色板來獲取具體顏色信息,在Swatch色板中提供了五種顏色信息,分別如下:

方法說明
getPopulation()the number of pixels represented by this swatch
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

 
示例代碼如下:

Palette.Swatch swatch = palette.getVibrantSwatch(); TextView titleView = ...; if (swatch != null) {titleView.setBackgroundColor(swatch.getRgb());titleView.setTextColor(swatch.getTitleTextColor()); //設置文本顏色

請注意必須對swatch進行是否為null判斷,因為如果面板無法找到相匹配的標準色,那么然后將返回null,不進行判斷將會出現空指針異常。

最后附上三個測試效果圖和完整代碼。

完整代碼

public class MainActivity extends ActionBarActivity {private ImageView image, iv1, iv2, iv3, iv4, iv5, iv6;private Palette palette;private Palette.Swatch s1,s2,s3,s4,s5,s6;private int index = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv1 = (ImageView) findViewById(R.id.iv1);iv2 = (ImageView) findViewById(R.id.iv2);iv3 = (ImageView) findViewById(R.id.iv3);iv4 = (ImageView) findViewById(R.id.iv4);iv5 = (ImageView) findViewById(R.id.iv5);iv6 = (ImageView) findViewById(R.id.iv6);image = (ImageView) findViewById(R.id.image);GetPalette(R.drawable.a11);}private void GetPalette(int imageId) {image.setImageResource(imageId);//使用默認的調色板大小(16)Palette.generateAsync(BitmapFactory.decodeResource(getResources(), imageId), new Palette.PaletteAsyncListener() {@Overridepublic void onGenerated(Palette palette) {s1 = palette.getVibrantSwatch();s2 = palette.getDarkVibrantSwatch();s3 = palette.getLightVibrantSwatch();s4 = palette.getMutedSwatch();s5 = palette.getDarkMutedSwatch();s6 = palette.getLightMutedSwatch();if (s1 != null) {iv1.setBackgroundColor(s1.getRgb());s1.getPopulation();}if (s2 != null) {iv2.setBackgroundColor(s2.getRgb());}if (s3 != null) {iv3.setBackgroundColor(s3.getRgb());}if (s4 != null) {iv4.setBackgroundColor(s4.getRgb());}if (s5 != null) {iv5.setBackgroundColor(s5.getRgb());}if (s6 != null) {iv6.setBackgroundColor(s6.getRgb());}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main,menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == R.id.action_settings){index++;if (index%3 == 0){GetPalette(R.drawable.a11);} else if (index % 3 == 1){GetPalette(R.drawable.a12);} else if (index % 3 == 2){GetPalette(R.drawable.a13);}}return true;} }

參考

Chris Banes:《Palette v21》
Chris Banes:《Palette preview》
Palette Reference

總結

以上是生活随笔為你收集整理的使用Palette类提取图片的颜色信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.97ai.com| 免费看国产片在线观看 | 高清av网址 | 精品人妻互换一区二区三区 | 凹凸av在线| 双性娇喘浑圆奶水h男男漫画 | 与子敌伦刺激对白播放的优点 | 亚洲成色网| 一区二区三区国 | 国产一区视频在线观看免费 | 姐姐的秘密韩剧免费观看全集中文 | 痴汉电车在线播放 | 黄色无遮挡 | 国产午夜久久 | 中文字幕一区二区三区乱码在线 | 久久九九热 | 一级特级黄色片 | 久久精品成人一区二区三区蜜臀 | 精产国产伦理一二三区 | 成人免费看片' | 九九热这里有精品 | 成人国产欧美 | 玖玖在线 | 女人脱下裤子让男人捅 | 寻找身体恐怖电影免费播放 | 免费看黄在线网站 | 国产一级片免费播放 | 另类激情视频 | 日韩激情av在线 | 青青草手机视频 | 人成在线观看 | 9久久9毛片又大又硬又粗 | 久久久精品免费 | 久久九九久精品国产免费直播 | аⅴ天堂中文在线网 | 色综合久久88色综合天天免费 | 欧美日韩精品在线播放 | 六月激情网 | 国产一区二区视频在线观看 | 亚洲高清毛片一区二区 | www国产www| 午夜免费网 | 我的好妈妈在线观看 | 国产精品视频一区二区三 | 日韩高清影视在线观看 | 亚洲综合在线成人 | 天天干干 | 久久综合九色 | 韩国三级视频在线 | 中文字幕在线观看视频网站 | 成人在线免费观看网站 | 久久精品欧美一区二区三区不卡 | www.亚洲一区| 男同激情视频 | 精品久久久无码中文字幕 | av导航网站 | 国产精品99一区二区三区 | 亚洲天堂免费看 | 短篇山村男同肉耽h | 中文字幕 成人 | 就爱av| chinese国产精品 | 欧美日韩亚洲在线观看 | 色大师av一区二区三区 | 国产农村老头老太视频 | 日韩天堂网| 欧美黄页| 黄色免费视频 | 国产不卡免费视频 | 免费毛片视频 | 国产又粗又黄又爽又硬 | 中文字幕成人在线 | 国产吞精囗交免费视频网站 | 李华月全部毛片 | 午夜影院在线免费观看 | 一级激情视频 | 亚洲一区中文 | 午夜影院一区二区三区 | 极品粉嫩小仙女高潮喷水久久 | 亚洲视频一区二区在线观看 | 久久久久成人片免费观看蜜芽 | 女人下面流白浆的视频 | 国产成人av一区 | 欧美三级自拍 | 国产99在线 | 亚洲 | www.黄色大片 | 最新天堂在线视频 | 一区二区在线观看av | 91草视频 | 五月天国产精品 | 视频在线观看电影完整版高清免费 | 小妹色播影院 | 国产91精 | 欧美一区二区三区观看 | 麻豆传媒网站入口 | 91美女在线| 久久久夜精品 | 息与子五十路翔田千里 | 91大神小宝寻花在线观看 |