제임스딘딘의
Tech & Life

개발자의 기록 노트/Android

[안드로이드] Bitmap 과 ByteArray 상호변환

제임스-딘딘 2010. 12. 27. 11:00

Bitmap 과 ByteArray 상호변환


이 포스팅은 Bitmap 데이터 형을 ByteArray로 변환하거나, 혹은 그 역, ByteArray -> Bitmap으로 변환하는 방법을 예제코드와 함께 다룬다.


안드로이드 카메라와 이미지를 다루다보면, 종종 데이터 형(type)이 달라서 형변환을 해야 하는 상황이 발생한다. 

그때 필요한 내용이다.


방법을 간단히 요약하자면 아래 두줄만 보면 된다.

Bitmap -> ByteArray : ByteArrayOutputStream 인스턴스를 생성한 후, Bitmap의 compress 메서드를 통해 비트맵을 압축하여 stream에 담는다.

ByteArray -> Bitmap : BitmapFactory의 decodeByteArray 메서드를 통해 byte Array를 Bitmap으로 변환한다.


Bitmap -> ByteArray 예제코드

안드로이드의 Bitmap은 비트맵 데이터를 stream에 넣어주는 compress 메서드를 제공하고 있다.

public byte[] bitmapToByteArray( Bitmap $bitmap ) {   
     ByteArrayOutputStream stream = new ByteArrayOutputStream() ;   
     $bitmap.compress( CompressFormat.JPEG, 100, stream) ;   
     byte[] byteArray = stream.toByteArray() ;   
     return byteArray ;   
}  

compress 인자는 3개의 값을 받는다.

  1. 압축 옵션( JPEG, PNG ) 
  2. 품질 설정 ( 0 - 100까지의 int형 )
  3. 압축된 바이트배열을 담을 stream

그리고, byteArray는 세번째 인자인 stream의 toByteArray( ) 메서드를 통해 반환받을 수 있다.


ByteArray -> Bitmap 예제코드

다음은 역으로, 바이트 배열로부터 비트맵을 생성하는 예제코드이다.

public Bitmap byteArrayToBitmap( byte[] $byteArray ) {   
    Bitmap bitmap = BitmapFactory.decodeByteArray( $byteArray, 0, $byteArray.length ) ;   
    return bitmap;   
}  

바이트 배열로부터 비트맵 생성은 BitmapFactory의 decodeByteArray( ) 메서드를 통해 간단히 생성할 수 있다.

decodeByteArray( ) 메서드 인자값도 3개이다.

  1. byteArray(바이트 배열)
  2. offset(배열의 시작점)
  3. length(decode할 바이트 배열의 길이)