안드로이드 비트맵 구현 관리 방법

 

 

비트맵(Bitmap)은 이미지 관리의 핵심 요소

 

비트맵(Bitmap)은 이미지 관리의 핵심 요소로, 안드로이드에서도 이를 활용하여 이미지 관리와 표현을 수행합니다. 안드로이드에서 비트맵과 관련된 클래스는 android.graphics.Bitmap입니다. 그래픽 관련 클래스들은 android.graphics 패키지에 포함되어 있으며, 비트맵 관련 기능도 이곳에서 찾을 수 있습니다.

 

비트맵을 생성하고 관리하기 위해 BitmapFactory 클래스가 제공됩니다. BitmapFactory는 이미지 포맷을 디코딩하여 비트맵으로 변환하는 다양한 함수들을 제공합니다. 이 함수들은 일반적으로 decodeXXX라는 이름으로 되어 있어서 필요한 기능에 맞는 함수를 쉽게 찾을 수 있습니다. 이를 통해 이미지 파일을 비트맵으로 변환하고, 비트맵을 효율적으로 로드하고 메모리에 관리할 수 있습니다.

 

BitmapFactory 클래스에서는 다양한 함수와 옵션을 제공하여 비트맵을 생성하고 디코딩할 수 있습니다. 주로 사용되는 함수와 옵션에 대해 설명하겠습니다.

 

 

BitmapFactory 클래스 주요 함수와 옵션

 

decodeResource(): 리소스로부터 비트맵을 디코딩합니다. 예를 들어, drawable 리소스나 raw 리소스로부터 비트맵을 생성할 수 있습니다.

 

decodeFile(): 파일 경로로부터 비트맵을 디코딩합니다. 로컬 파일 시스템에 저장된 이미지 파일을 비트맵으로 변환할 수 있습니다.

 

decodeStream(): InputStream으로부터 비트맵을 디코딩합니다. 네트워크 연결이나 파일 입출력 등에서 비트맵을 읽어올 때 유용합니다.

 

inSampleSize 옵션: 이미지를 디코딩할 때 샘플링 비율을 설정하는 옵션입니다. 이를 사용하여 이미지의 해상도를 줄여 메모리 사용량을 최적화할 수 있습니다.

 

inPreferredConfig 옵션: 디코딩된 비트맵의 픽셀 포맷을 설정하는 옵션입니다. ARGB_8888, RGB_565 등 다양한 옵션을 선택할 수 있으며, 메모리 사용과 이미지 품질 간의 트레이드오프를 고려하여 설정할 수 있습니다.

 

inJustDecodeBounds 옵션: 디코딩된 비트맵의 크기 정보만을 가져오고 실제 비트맵을 생성하지 않는 옵션입니다. 이를 사용하여 이미지의 크기를 미리 파악할 수 있습니다.

 

BitmapFactory의 다양한 함수와 옵션을 조합하여 원하는 이미지를 비트맵으로 변환하고, 메모리 사용과 성능을 최적화할 수 있습니다.

 

BitmapFactory.decodeByteArray(): Camera.PictureCallback으로부터 받은 JPEG 사진 데이터를 byte 배열로 전달받아 Bitmap으로 변환하는 데 사용됩니다.

 

BitmapFactory.decodeFile(): 로컬에 저장된 파일을 읽어와서 Bitmap으로 디코딩합니다. 파일 경로를 매개변수로 전달하여 FileInputStream을 생성하고, decodeStream을 수행합니다.

 

BitmapFactory.decodeResource(): 리소스 폴더에 저장된 그림 파일을 Bitmap으로 변환하여 반환합니다. getResources()와 R.drawable를 사용하여 리소스 식별자를 전달합니다.

 

BitmapFactory.decodeStream(): InputStream에서 Bitmap을 생성합니다. 네트워크 연결 또는 파일 입출력과 같은 상황에서 비트맵을 읽어올 때 유용합니다.

 

또한, BitmapFactory.Options는 BitmapFactory가 사용하는 옵션 클래스입니다. Options 객체를 생성하고 원하는 옵션을 설정한 후 BitmapFactory의 함수 호출 시 해당 옵션을 매개변수로 전달할 수 있습니다.

 

inSampleSize: 디코딩 시 이미지를 얼마나 줄일지 설정하는 옵션입니다. 값이 1보다 작으면 1로 간주되며, 큰 값일 경우 이미지를 해당 값의 역수만큼 축소하여 디코딩합니다. 일반적으로 2의 배수로 설정합니다.

 

Ex)

BitmapFactory.Options options = new

BitmapFactory.Options();

options.inSampleSize = 4;

Bitmap orgImage = BitmapFactory.decodeFile("/sdcard/test.jpg", options);

 

 

Bitmap과 Factory 클래스를 사용한 다양한 예제

 

파일에서 비트맵 생성하기

javaCopy code
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/image.jpg");

 

리소스에서 비트맵 생성하기

javaCopy code
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

 

바이트 배열로부터 비트맵 생성하기

javaCopy code
byte[] imageData = getByteArrayFromCamera(); // 카메라에서 얻은 바이트 배열
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

 

이미지 크기 조정하기 (inSampleSize 옵션 사용)

javaCopy code
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // 이미지 크기를 절반으로 축소
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/image.jpg", options);

 

비트맵 리사이징하기 (리사이즈 후 새로운 비트맵 생성)

javaCopy code
Bitmap originalBitmap = BitmapFactory.decodeFile("/sdcard/image.jpg");
int newWidth = 800;
int newHeight = 600;
Bitmap resizedBitmap = Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, true);

 

비트맵 회전하기

javaCopy code
Bitmap originalBitmap = BitmapFactory.decodeFile("/sdcard/image.jpg");
Matrix matrix = new Matrix();
matrix.postRotate(90); // 시계 방향으로 90도 회전
Bitmap rotatedBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth(), originalBitmap.getHeight(), matrix, true);

이러한 예제들은 Bitmap과 BitmapFactory를 활용하여 이미지를 생성, 디코딩, 크기 조정, 회전 등 다양한 작업을 수행하는 방법을 보여줍니다. 실제 사용 시에는 해당 예제들을 애플리케이션의 요구에 맞게 수정하여 활용하면 됩니다. 예를 들어 이미지를 일정한 배율로 축소해야 하는 경우, BitmapFactory.Options의 inSampleSize를 사용하여 이미지를 디코딩하는 것이 효율적입니다.

 

아래는 SD 카드에서 이미지를 불러와 원하는 크기로 축소하는 예제입니다:

 

일정한 크기로 이미지 축소

javaCopy code
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // 2배 축소
Bitmap orgImage = BitmapFactory.decodeFile("/sdcard/test.jpg", options);

 

inSampleSize를 사용하여 이미지를 4배 축소한 후, 다시 원하는 크기로 조정

javaCopy code
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; // 4배 축소
Bitmap orgImage = BitmapFactory.decodeFile("/sdcard/test.jpg", options);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true);

 

위의 예제에서는 inSampleSize를 설정하여 원하는 배율로 이미지를 축소한 후, createScaledBitmap을 사용하여 최종적으로 원하는 크기로 조정합니다. 이를 통해 메모리 사용량을 줄이면서 이미지를 원하는 크기로 조절할 수 있습니다.

 

 

댓글

Designed by JB FACTORY