2013-08-05 28 views
0

我想要獲取圖像像素並將其保存在一個int數組中,但是當我檢查數組值時,有時會用0填充它,其他時間使用奇怪值填充(所有數組都具有相同的值)。我如何獲得圖像像素並將其保存在int數組中?

iv = (ImageView) findViewById (R.id.uploadImage); 
iv.buildDrawingCache(); 
bmap = iv.getDrawingCache(); 
bmap.getPixels(pix, 0, width, 0, 0, width, hieght); 

StringBuilder builder = new StringBuilder(); 

for(int i :pix) { 
    builder.append(" " + i + " "); 
} 
Toast.makeText(this, builder, Toast.LENGTH_LONG).show(); 

回答

1

嘗試這種情況:

int[] pixels = new int[yourBitmap.getHeight() * yourBitmap.getWidth()]; 
yourBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, yourBitmap.getWidth(), yourBitmap.getHeight()); 
-1

第三個參數不應該是寬度。 第三個參數叫做stride:在行間跳過的像素[]的條目數(必須> =位圖的寬度)。

嘗試 bmap.getPixels(pix, 0, width-1, 0, 0, width, hieght);

+0

在大多數情況下,這是不好的建議。對於典型的位圖,請參考文檔:'對於正常的打包結果,只需傳遞寬度值作爲步長值。'另外,你說它必須是'> =位圖的寬度',這是真的,但是你的代碼說'寬度-1' ,這是無效的。 – Geobits

0

我在這裏看到一些可能出現的問題:

  • setDrawingCacheEnabled()不叫

    對於這一點,你只需要使用緩存之前調用setDrawingCacheEnabled(true)。請務必將其設置爲false時,你就大功告成了,或者你的ImageView的就無法顯示(至少在非硬件加速設備)

  • widthheight可能不

    我不正確噸kow你得到你的價值這些,但你應該使用它getWidth()getHeight()。如果您想將其設置爲不同的值,那很好,但是您需要從原始位圖創建縮放的位圖。否則,不能保證您獲得的位圖與您認爲的尺寸相同。

  • pix可能是錯誤的大小在手

    共進的最後一個點。一旦你有高度和寬度的準確值,你需要確保數組是正確的大小。 pix = new int[height * width]對此很好。

相關問題