2010-11-13 55 views
11

如何從內置方法getPixels爲位圖解釋返回的數組?Android中位圖的getPixels方法的說明

這裏是我的代碼:

public void foo() { 
    int[] pixels; 
    Bitmap bitmapFoo = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.test2);    
    int height = bitmapFoo.getHeight(); 
    int width = bitmapFoo.getWidth(); 

    pixels = new int[height * width]; 

    bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1);  
} 

陣列「像素」獲取返回其值從-988,602,635到1242635509,那是剛從我做了一個簡單的PNG文件幾種顏色。我怎樣才能解釋從這個方法返回的數字?

編輯:我意識到這個單一的整數代表一種顏色。我只是不明白如何將這個單個整數解釋爲構成顏色的RBG和alpha值。

謝謝。

PS。如果你問自己,「他想做什麼?」我試圖找出一種動態修改位圖顏色的方法。

+0

你簡單的getPixels參數只是救了我... – Betaminos 2012-08-21 13:07:46

回答

10

它返回int爲Color class.

Color類定義方法 創建和變換顏色整數。 顏色被表示爲4個字節由打包整數, :α,紅,綠,藍 。這些值是未預計的, 表示任何透明度僅存儲在顏色組件中的alpha組件中,而不是 中 。的 組件存儲如下 (阿爾法< < 24)| (紅色< < 16)| (綠色 < < 8)|藍色。每個組件的範圍爲 ,範圍是0..255,其中0表示該組件的 貢獻,而 255表示100%的貢獻。因此 不透明的黑色將是0xFF000000(100% 不透明的,但沒有從紅, 格力,藍色和乳白色有助於將 0xFFFFFFFF的

例如,當您使用噴漆的對象:

Paint pRed = new Paint(); 
pRed.setColor(Color.RED); 

setColor期待一個int。Color.RED的是,對「紅」他們預先定義的含義int值。

+0

嘿謝謝,但我知道它是一種顏色。我應該更好地說出我的問題,問我真正想要的。這是我的不好,它已被編輯。 +1。 – user432209 2010-11-13 14:21:40

+0

@ user432209請參閱我的引用部分。 (alpha << 24)| (紅色<< 16)| (綠色「8」)藍色是如何將顏色打包到int中的。 – 2010-11-13 14:22:59

+0

這是我沒有得到的部分。 (alpha << 24)| (紅色<< 16)| (綠色「8」對我來說毫無意義。 – user432209 2010-11-13 14:24:31

1

如果你有你的alpha,紅色,綠色和藍色值,你的顏色是相等至(阿爾法< < 24)+(紅色< < 16)+(綠色< < 8)+藍色。

要檢索的α,從一個int紅色,綠色和藍色值,說的argb:

int alpha=argb>>24; 
int red=(argb-alpha)>>16; 
int green=(argb-(alpha+red))>>8; 
int blue=(argb-(alpha+red+green)); 
5

更:

int alpha=argb>>24; 
int red=(argb & 0x00FF0000)>>16; 
int green=(argb & 0x0000FF00)>>8; 
int blue=(argb & 0x000000FF); 
14

您也可以執行下列操作以從 檢索顏色一個int:

int mColor = 0xffffffff; 

int alpha = Color.alpha(mColor); 
int red = Color.red(mColor); 
int green = Color.green(mColor); 
int blue = Color.blue(mColor); 
0

除此之外,我認爲它應該是

bitmapFoo.getPixels(pixels, 0, width, 0, 0, width, height); 

座標從0開始,對吧?

+0

根據[getPixels](http://developer.android.com/reference/android/graphics/Bitmap.html)的文檔,Stride必須是> =位圖的寬度。您在這裏使用'0'作爲步幅。 – 2012-06-29 10:24:31

+0

第三個參數是stride,它等於示例中的寬度。參數列表如下:'int []像素,int偏移量,int stride,int x,int y,int width,int height' – BVB 2013-06-05 19:54:03