마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

비트맵 <--> bytearray 변환

0 추천
안녕하세요

아까 질문올렸었는데 내용수정하여 다시 올립니다

 

현재 TCPIP로 서버에서 bitmap 데이터를 받아서 이미지뷰에 출력을 하려고 합니다.

 

서버로부터 받는 bitmap 데이터는 32x32의 bmp 파일로써 데이터의 길이는 2012byte 입니다.,

현재 32x32의 .bmp 파일을 울트라에디트 hex모드로 열어서 데이터를 얻었습니다.

그후 그 데이터를

 

public Bitmap bytearrayToBitmap(byte[] array) {

  Bitmap bitmap = BitmapFactory.decodeByteArray(array, 0, array.length);

  return bitmap;

}

 

위와같은 메소드에, 서버로부터 받은 데이터를 변수로 주고 변환을 시도 하였으나

DDMS를 보니 Skia 에서 --- decoder->decode returned false 가 나오고 있습니다.

 

무엇이 문제일까요?
아시리 (8,400 포인트) 님이 2014년 12월 23일 질문

1개의 답변

0 추천
 
채택된 답변

decodeByteArray 의 경우  RGBA 같은 bitmap 데이터만 입력을  해 주셔야 변환이 가능한데,

서버에서 받아들이는 데이터는 bitmap 파일을 읽어들이는 것일테니.

bitmap 데이터 앞에 bitmap 파일 헤더 정보가 포함되어 있어서 오류가 나는 것 일 겁니다

 decodeStream 를 사용해 보세요..

 

 

사악미소 (65,330 포인트) 님이 2014년 12월 23일 답변
아시리님이 2015년 2월 5일 채택됨
헤더 제외하고 픽셀데이터만 줘야 된다는 말씀이신가요?
비트맵파일 자체는 헤더부분이 있고 그뒤에 픽셀데이터가 붙는데..
픽셀 데이터만 받아서 넣어보면, false는 안나는데 리턴이 null이 나오고 있어요.
네 픽셀데이터 맞습니다. 실패가 나는 것은 입력된 픽셀 형식이 변환 지원하는 형식과   달라서 그럴겁니다.  decodeByteArray 의 경우 카메라로 사진을 찍을 때  반환되는 픽셀데이터를 bitmap으로 바꾸기 위해 주로 사용합니다.

BitmapFactory.Options 에 값을 넣어 입력 받는 픽셀데이터의 형식을 바꿔주실수도 있긴 하지만.  원본 픽셀 형식값이 어떤것인지 구해 맞춰주기가  쉽지 않으실테니.
bitmap 파일을 전송하는 것이라면 헤더 정보까지 지원하는
decodeStream 를 사용하시는 것을 추천합니다.
...