2011-01-13 5 views
6

JNI 호출에서 바이트 배열을 가져 와서 Bitmap 객체를 생성하려고합니다.안드로이드에서 바이트 []를 비트 맵으로 렌더링하십시오.

내 문제는 다음 코드는 null을 반환합니다.

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

PS : 픽셀 레이아웃은 RGB가 아닌 BGR입니다.

+0

이미지 바이트 배열에 올바른 내용이 들어 있는지 테스트 했습니까? 그렇지 않으면 코드가 괜찮아 보입니다. – mreichelt

+0

예, 했어요. 내용이 정확하다는 것을 이해하지 못하는 decodeByteArray입니다. –

답변

1

decodeByteArray을 가지고 doens't는이 형식으로 작동합니다. 나는 수동으로 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 살펴

+0

같은 오류가 발생했습니다. 옵션은 픽셀 형식을 신경 쓰지 않습니다. –

관련 문제