비트맵(Bitmap)은 이미지 관리의 핵심 요소
비트맵(Bitmap)은 이미지 관리의 핵심 요소로, 안드로이드에서 이미지를 표현하기 위해 사용되는 객체 입니다.
메모리에 만들어지는 모든 이미지는 비트맵 객체로 관리됩니다. 메모리에 로딩된 비트맵 객체를 통해서 이미지를 우리가 원하는대로 조작할 수도 있습니다.
비트맵을 생성하고 관리하기 위해 BitmapFactory 클래스가 제공됩니다. BitmapFactory는 이미지 포맷을 디코딩하여 비트맵으로 변환하는 다양한 함수들을 제공합니다. 이 함수들은 일반적으로 decodeXXX라는 이름으로 되어 있어서 필요한 기능에 맞는 함수를 쉽게 찾을 수 있습니다. 이를 통해 이미지 파일을 비트맵으로 변환하고, 비트맵을 효율적으로 로드하고 메모리에 관리할 수 있습니다.
BitmapFactory 클래스에서는 다양한 함수와 옵션을 제공하여 비트맵을 생성하고 디코딩할 수 있습니다. 주로 사용되는 함수와 옵션에 대해 설명하겠습니다.
BitmapFactory 클래스 주요 함수와 옵션
바이트 배열로부터 비트맵 생성하기
BitmapFactory.decodeByteArray()
Camera.PictureCallback으로부터 받은 JPEG 사진 데이터를 byte 배열로 전달받아 Bitmap으로 변환하는 데 사용됩니다.
byte[] imageData = getByteArrayFromCamera(); // 카메라에서 얻은 바이트 배열
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
파일에서 비트맵 생성하기
BitmapFactory.decodeFile()
파일 경로로부터 비트맵을 디코딩합니다. 로컬 파일 시스템에 저장된 이미지 파일을 비트맵으로 변환할 수 있습니다.
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/image.jpg");
리소스에서 비트맵 생성하기
BitmapFactory.decodeResource()
리소스 폴더에 저장된 그림 파일을 Bitmap으로 변환하여 반환합니다. getResources()와 R.drawable를 사용하여 리소스 식별자를 전달합니다. 예를 들어, drawable 리소스나 raw 리소스로부터 비트맵을 생성할 수 있습니다.
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Stream으로부터 비트맵 생성하기
BitmapFactory.decodeStream()
InputStream에서 Bitmap을 생성합니다. 네트워크 연결 또는 파일 입출력과 같은 상황에서 비트맵을 읽어올 때 유용합니다.
// assets에서 InputStream 열기
val inputStream: InputStream = assets.open(fileName)
// BitmapFactory를 사용해 InputStream을 Bitmap으로 디코드
BitmapFactory.decodeStream(inputStream)
Option
또한, BitmapFactory.Options는 BitmapFactory가 사용하는 옵션 클래스입니다. Options 객체를 생성하고 원하는 옵션을 설정한 후 BitmapFactory의 함수 호출 시 해당 옵션을 매개변수로 전달할 수 있습니다.
대표적인 예로, inSampleSize가 있습니다.
Ex)
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap orgImage = BitmapFactory.decodeFile("/sdcard/test.jpg", options);
Bitmap과 Factory 클래스를 사용한 다양한 예제
이미지 크기 조정하기 (inSampleSize 옵션 사용)
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);
비트맵 회전하기
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를 사용하여 이미지를 디코딩하는 것이 효율적입니다.
참고자료
https://ddalbabo.tistory.com/3
안드로이드 비트맵 구현 관리 방법
비트맵(Bitmap)은 이미지 관리의 핵심 요소 비트맵(Bitmap)은 이미지 관리의 핵심 요소로, 안드로이드에서도 이를 활용하여 이미지 관리와 표현을 수행합니다. 안드로이드에서 비트맵과 관련된 클
ddalbabo.tistory.com
https://dogrushdev.tistory.com/253
(안드로이드) 43 - 그래픽(Graphic)2 - 비트맵(Bitmap)
1. 비트맵(Bitmap)이란? 비트맵(Bitmap)은 안드로이드에서 이미지를 표현하기 위해 사용되는 객체이다. 메모리에 만들어지는 모든 이미지는 비트맵 객체로 관리된다. 메모리에 로딩된 비트맵 객체를
dogrushdev.tistory.com
'Android > Image Loading' 카테고리의 다른 글
[Android] 이미지 로딩 라이브러리 (Glide vs Picasso / Coil) (0) | 2025.01.22 |
---|---|
[Android] 이미지 로딩에 대한 고찰 (feat. 메모리 캐시 vs 디스크 캐시) (0) | 2025.01.21 |
[Android] 어떻게 이미지 로드를 최적화하면 좋을까?(2) - LRU Cache 내부동작 살펴보자 (0) | 2025.01.21 |
[Android] 어떻게 이미지 로드를 최적화하면 좋을까?(1) - Down Sampling (1) | 2025.01.21 |