2011-10-18 20 views
0

我對android平臺上的編程相當陌生。我在按摩一個int數組時會遇到一些問題,將它變成一個Bitmap。Android:無法使用createBitmap方法創建位圖

int數組中的每個元素都是一個從0到255的數字,並且表示灰度像素顏色(所以0會是黑色的,255會是白色的,等等)。這是我的代碼:

int nPixels = 262144; 
int width = 512; 
int height = 512; 
int[] converted = new int[nPixels]; 
int alpha = 255; 
for (int i = 0; i < nPixels; i++) { 
    //greyscale, so all r, g, and b have the same value 
    converted[i] = (alpha << 24) | (pixels[i] << 16) | (pixels[i] << 8) | pixels[i]; 
} 

Bitmap bm = Bitmap.createBitmap(converted, width, height, Bitmap.Config.ARGB_8888); 

生成的位圖的高度和寬度都是-1,表示createBitmap函數不起作用。我的方法有什麼問題?

哦,我拿了從http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html製作顏色的轉換部分。

編輯:以爲它可能是因爲alpha是256而不是255,但我仍然得到相同的錯誤。

+0

對「顏色」數組定義的位置不太清楚,我看到「已轉換」數組,但未顯示「顏色」。 – satur9nine

+0

哦,對不起,那是我剛剛粘貼的另一部分代碼。 'converted' ='colors' – confusedKid

+0

當我測試它時,你的代碼似乎運行良好。 – satur9nine

回答

0

你如何得知你的位圖有[-1 -1]的大小? 爲了獲得大小,使用:

int w = bm.getWidth(); 
int h = bm.getHeight(); 

這工作正常。

+0

我在Eclipse中使用調試器,並查看位圖的mHeight和mWidth。它也不會出現在我看來(但這可能是另一個問題)。 – confusedKid

+0

我是這麼想的。這些都是緩存的值,一旦你調用上述方法就會被填充。 –

+0

啊!所以位圖實際上工作?只有值沒有更新? – confusedKid

-1

我不確定是否可以直接從int數組創建位圖。您可能需要遍歷位圖的像素,並使用位圖setPixel方法設置陣列中的像素值。

bitmap.setPixel (int x, int y, int color) 
+0

當然,可以從像素陣列創建位圖。 –