2011-01-13 6 views
6

Je reçois un tableau d'octets d'un appel JNI et essaye de construire un objet Bitmap avec lui.Rendu d'un octet [] en tant que bitmap dans Android

Mon problème est, le code suivant, renvoie null.

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

Des conseils à ce sujet? PS: La disposition des pixels est BGR et non RVB.

+0

Avez-vous testé que le tableau d'octets image contient le contenu correct? Sinon, votre code me semble ok. – mreichelt

+0

Oui, je l'ai fait. Le contenu est correct, le decodeByteArray qui ne comprend pas cela. –

Répondre

1

Le decodeByteArray vraiment Doens't fonctionne avec ce format. Je change de BGR en RGB manuellement.

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++; 
     } 

Cependant,

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

peut provoquer:

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

4

Le doc indique que la méthode renvoie "null si l'image n'a pas pu être décodée". Vous pouvez essayer:

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

Même si je ne pense pas que ça va changer quoi que ce soit bien .. Essayez de jeter un oeil à android.graphics.BitmapFactory.Options ainsi

+0

Même erreur. Et les options ne se soucient pas du format de pixel. –

Questions connexes