Android 實(shí)現(xiàn)把bitmap圖片的某一部分的顏色改成其他顏色
把bitmap圖片的某一部分的顏色改成其他顏色
private Bitmap ChangeBitmap(Bitmap bitmap){
int bitmap_h;
int bitmap_w;
int mArrayColorLengh;
int[] mArrayColor;
int count = 0;
mArrayColorLengh = bitmap.getWidth() * bitmap.getHeight();
mArrayColor = new int[mArrayColorLengh];
bitmap_w=bitmap.getWidth();
bitmap_h =bitmap.getHeight();
int newcolor=-1;
for (int i = 0; i < bitmap.getHeight(); i++) {
for (int j = 0; j < bitmap.getWidth(); j++) {
//獲得Bitmap 圖片中每一個(gè)點(diǎn)的color顏色值
int color = bitmap.getPixel(j, i);
//將顏色值存在一個(gè)數(shù)組中 方便后面修改
// mArrayColor[count] = color;
int r = Color.red(color);
int g = Color.green(color);
int b = Color.blue(color);
int a =Color.alpha(color);
if ((90<r&&r<=200)&&(90<g&&g<=200)&&(90<b&&b<=200)){//大概得把非道路(路旁變透明)
a=0;
Log.i("imagecolor","============"+color);
}else if (r==255&&g==255&&b==33){//把黃色的箭頭白色 因?yàn)辄S色箭頭rgb大部分是255 255 33(值可以用畫圖工具取值) 組合
// 但是還有小部分有別的值組成(箭頭所不能變成全白有黃色斑點(diǎn))
r=255;
g=255;
b=255;
}
color = Color.argb(a, r, g, b);
mArrayColor[count]=color;
Log.i("imagecolor","============"+ mArrayColor[count]);
count++;
}
}
mbitmap = Bitmap.createBitmap( mArrayColor, bitmap_w, bitmap_h, Bitmap.Config.ARGB_4444 );
return mbitmap;
}

補(bǔ)充知識(shí):android圖片不同分辨率適配
dpi(Dots Per Inch):每英寸的像素點(diǎn)數(shù)量
dp(density-independent pixel):密度無(wú)關(guān)像素,當(dāng)dpi為160時(shí),1dp=1px,當(dāng)dpi為320時(shí),1dp=2px,以此類推.......,即公式1dp = (dpi / 160)px
圖片的規(guī)格:px*px,比如270*480像素的圖片
android使用匹配機(jī)制用到dpi這個(gè)參數(shù),無(wú)論是什么手機(jī),不管1080分辨率還是2K分辨率,都對(duì)應(yīng)著唯一的一個(gè)dpi,dpi的計(jì)算方法是,height和width分別是手機(jī)寬和高對(duì)應(yīng)的px數(shù)量,size代表平常所說的5英寸手機(jī)中的數(shù)字5,即英寸,代碼計(jì)算方法是float xdpi = getResources().getDisplayMetrics().xdpi; float ydpi = getResources().getDisplayMetrics().ydpi;其中獲取的xdpi和ydpi基本一樣,因?yàn)橐粋€(gè)手機(jī)的屏幕像素點(diǎn)是追求平均分布的,所以無(wú)論是寬、高、還是斜邊,其dpi應(yīng)該都是一樣的,當(dāng)然由于技術(shù)限制,一般會(huì)有些誤差。
現(xiàn)在拿到一個(gè)手機(jī),首先計(jì)算出它的dpi,然后查下方的表,找出對(duì)應(yīng)的密度,比如我的手機(jī)是1080*1920,為400dpi,則對(duì)應(yīng)xxhdpi,android系統(tǒng)會(huì)自動(dòng)優(yōu)先在drawable-xxhdpi文件夾中找對(duì)應(yīng)的圖片,如果找到了就加載,此時(shí)圖片在手機(jī)上顯示的就是它本身的大小,也就是270*480像素;如果未找到,就去更高分辨率的文件夾xxxhdpi中找,一直找到最高也沒有的話,就會(huì)查找drawable-nodpi文件夾,還是沒有就開始依次查詢低分辨率的文件夾,由高到低一直查到ldpi。
|
dpi范圍 |
密度 |
|
0dpi ~ 120dpi |
ldpi |
|
120dpi ~ 160dpi |
mdpi |
|
160dpi ~ 240dpi |
hdpi |
|
240dpi ~ 320dpi |
xhdpi |
|
320dpi ~ 480dpi |
xxhdpi |
|
480dpi ~ 640dpi |
xxxhdpi |
舉例:將一個(gè)270*480像素的圖片放入布局,寬高都是wrap_content,將該圖片放入xxhdpi中,可以看到顯示效果就是圖片寬高各占了屏幕寬高的四分之一,和預(yù)期一樣。
如果將xxhdpi下的圖片剪切到drawable-mdpi中,效果如下,可以看到圖片明顯變大。原因:系統(tǒng)在加載圖片時(shí),首先去對(duì)應(yīng)的文件夾查找,沒找到,又依次按照順序一直在drawable-mdpi找到,但是系統(tǒng)會(huì)認(rèn)為你這張圖是專門為低密度的設(shè)備所設(shè)計(jì)的,如果直接將這張圖在當(dāng)前的高密度設(shè)備上使用就有可能會(huì)出現(xiàn)像素過低的情況,于是系統(tǒng)自動(dòng)幫我們做了這樣一個(gè)放大操作。
理解:考慮該圖片在一個(gè)dpi對(duì)應(yīng)drawable-mdpi文件夾的手機(jī)上的顯示效果,因?yàn)槿绻窃趯?duì)應(yīng)文件夾找到了圖片的話,就不會(huì)對(duì)圖片做縮放操作了,所以在一個(gè)低分辨率的手機(jī)上,270*480像素的圖片的確是這樣的顯示效果。
縮放倍數(shù):以mdpi為基準(zhǔn),drawable-mdpi : drawable-hdpi : drawable-xhdpi : drawable-xxhdpi : drawable-xxxhdpi = 1 : 1.5 :2 : 3 :4 即dpi范圍的最大值之比。

總結(jié):為了達(dá)到在各個(gè)分辨率的手機(jī)上都有一樣的效果,最好要有一套不同分辨率的圖片來(lái)放在各個(gè)文件夾中,一般對(duì)應(yīng)如下,不過項(xiàng)目中為了減小app體積,除了APP的圖標(biāo)會(huì)準(zhǔn)備一套外,其他的一般都只會(huì)準(zhǔn)備一張較高分辨率的,比如精進(jìn)學(xué)堂就只有drawable-xxhdpi。準(zhǔn)備高分辨率而不是低分辨率是為了防止放大圖片導(dǎo)致的模糊,而縮小造成的影響就沒那么嚴(yán)重。
|
密度 |
建議尺寸 |
|
drawable-mdpi |
48 * 48 |
|
drawable-hdpi |
72 * 72 |
|
drawable-xhdpi |
96 * 96 |
|
drawable-xxhdpi |
144 * 144 |
|
drawable-xxxhdpi |
192 * 192 |
比如,可以去精進(jìn)學(xué)堂的項(xiàng)目中看一下,對(duì)應(yīng)的icon的規(guī)格都是按上面的設(shè)計(jì)的
以上這篇Android 實(shí)現(xiàn)把bitmap圖片的某一部分的顏色改成其他顏色就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解Android Bitmap的使用
- android獲取圖片尺寸的兩種方式及bitmap的縮放操作
- Android 實(shí)現(xiàn)將Bitmap 保存到本地
- Android中的Bitmap序列化失敗的解決方法
- Android BitmapUtils工具類使用詳解
- Android Bitmap的加載與緩存
- 詳解Android Bitmap的常用壓縮方式
- Android中的Bitmap的詳細(xì)介紹
- Android圖片處理工具類BitmapUtils
- Android開發(fā)中Bitmap高效加載使用詳解
- Android中Glide獲取圖片Path、Bitmap用法詳解
- Android Bitmap像素級(jí)操作詳解
相關(guān)文章
詳解Android中使用OkHttp發(fā)送HTTP的post請(qǐng)求的方法
OkHttp(github.com/square/okhttp)是近來(lái)人氣迅速攀升的一款第三方安卓HTTP支持包,這里我們就來(lái)詳解Android中使用OkHttp發(fā)送HTTP的post請(qǐng)求的方法2016-07-07
Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)
本文主要介紹了Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
Android實(shí)現(xiàn)單頁(yè)面浮層可拖動(dòng)view的一種方法
本篇文章主要介紹了Android實(shí)現(xiàn)單頁(yè)面浮層可拖動(dòng)view的一種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10
基于Android實(shí)現(xiàn)一個(gè)常用的布局吸頂效果
這篇文章給大家介紹一個(gè)布局吸頂效果,一般出現(xiàn)在內(nèi)容較長(zhǎng)頁(yè)面還嵌套著分類頁(yè)面的情況,比如電商的詳情頁(yè)嵌套分類,在頁(yè)面滑動(dòng)到tab的時(shí)候我們希望tab還能保留在頁(yè)面頂部而不被頂上去,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09
Android xUtils更新到3.0后的基本使用規(guī)則詳解
xUtils是基于android的開發(fā)框架,簡(jiǎn)化了很多的開發(fā)步驟,可以說是非常好的開發(fā)工具。下面小編給大家?guī)?lái)了Android xUtils更新到3.0后的基本使用規(guī)則詳解,感興趣的朋友一起學(xué)習(xí)吧2016-08-08
理解Android的手勢(shì)識(shí)別提高APP的用戶體驗(yàn)
對(duì)于觸摸屏,其原生的消息無(wú)非按下、抬起、移動(dòng)這幾種,我們只需要簡(jiǎn)單重載onTouch或者設(shè)置觸摸偵聽器setOnTouchListener即可進(jìn)行處理2013-06-06
Android編程設(shè)計(jì)模式之狀態(tài)模式詳解
這篇文章主要介紹了Android編程設(shè)計(jì)模式之狀態(tài)模式,結(jié)合實(shí)例形式詳細(xì)分析了Android狀態(tài)模式的概念、功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-12-12

