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개의 값을 받는다.
- 압축 옵션( JPEG, PNG )
- 품질 설정 ( 0 - 100까지의 int형 )
- 압축된 바이트배열을 담을 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개이다.
- byteArray(바이트 배열)
- offset(배열의 시작점)
- length(decode할 바이트 배열의 길이)
'개발자의 기록 노트 > Android' 카테고리의 다른 글
[안드로이드] Preferences 다루기 - 앱의 환경설정을 위한 Class (0) | 2011.01.09 |
---|---|
[안드로이드] 서로다른 Activity 사이에 Parcelable사용하여 데이터/객체 전달 및 받는 방법 (0) | 2010.12.30 |
[안드로이드] 이미지와 텍스트가 같이 들어간 버튼 만들기 (0) | 2010.12.30 |
[안드로이드] 인터넷에서 이미지 비동기 다운로드 (0) | 2010.12.25 |
[안드로이드] 증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm) (0) | 2010.12.25 |
[안드로이드] 안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점 (0) | 2010.12.25 |