2011-01-13 17 views
6

Ricevo un array di byte da una chiamata JNI e cerco di creare un oggetto Bitmap con esso.Rendering di un byte [] come Bitmap in Android

Il mio problema è, il seguente codice, restituisce null.

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

Qualche consiglio a riguardo?

PS: il layout dei pixel è BGR, non un RGB.

+0

Hai verificato che l'array di byte immagine contenga il contenuto corretto? Altrimenti il ​​tuo codice mi sembra a posto. – mreichelt

+0

Sì, l'ho fatto. Il contenuto è corretto, decodeByteArray che non lo ha capito. –

risposta

1

Il decodeByteArray davvero non funziona con questo formato. Cambio manualmente da BGR a 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++; 
     } 

Tuttavia,

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

può causare:

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

4

Il documento dice che il metodo restituisce "null se l'immagine non può essere decodificata". Si può provare:

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

Anche se io non credo che cambierà nulla però .. cercare di avere uno sguardo a android.graphics.BitmapFactory.Options così

+0

Stesso errore. E le Opzioni non si preoccupano del formato pixel. –

Problemi correlati