2011-01-13 22 views
6

我從JNI調用中獲取一個字節數組,並試圖用它構造一個Bitmap對象。在Android中以位圖形式呈現一個字節[]

我的問題是,下面的代碼,返回null。

byte[] image = services.getImageBuffer(1024, 600); 
    Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length); 

有關它的任何提示?

PS:像素佈局是BGR,而不是RGB。

+0

您是否測試過圖像字節數組包含正確的內容?否則你的代碼對我來說看起來不錯。 – mreichelt 2011-01-13 18:51:56

+0

是的,我做到了。內容是正確的,decodeByteArray不明白這一點。 – 2011-01-14 18:49:44

回答

1

的decodeByteArray真的doens不能使用這種格式。我從BGR手動更改爲RGB。

byte[] image = services.getImageBuffer(1024, 600); 

    Bitmap bmp = Bitmap.createBitmap(1024, 600, Bitmap.Config.RGB_565); 
    int row = 0, col = 0; 
    for (int i = 0; i < image.length; i += 3) { 
     bmp.setPixel(col++, row, image[i + 2] & image[i + 1] & image[i]); 

     if (col == 1024) { 
      col = 0; 
      row++; 
     } 

然而,

for (i < image.length) 。。。bmp.setPixel(image[i + 2] & image[i + 1] & image[i]); 

可引起:

08-29 14:34:23.460:ERROR/AndroidRuntime(8638):java.lang.ArrayIndexOutOfBoundsException

4

該文檔說如果圖像無法解碼,該方法返回「null」。 你可以試試:

byte[] image = services.getImageBuffer(1024, 600); 
InputStream is = new ByteArrayInputStream(image); 
Bitmap bmp = BitmapFactory.decodeStream(is); 

即使我不認爲它會改變,雖然做任何事情.. 嘗試有在android.graphics.BitmapFactory.Options看看還有