[Android] Bitmap에 색상 입히기

[Android] Bitmap에 색상 입히기

주어진 비트맵에 색상을 덮어 씌우는 방법
같은 이미지를 여러 색으로 사용해야 할 때 유용하다.
예시는, 흰색 아이콘을 다른 색으로 사용하는 경우. (아이콘이 흰색이라 임시로 배경색을 줌.)


//1. Drawable -> Bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.email_xxl).copy(Bitmap.Config.ARGB_8888, true);

//2. ColorFilter 만들기
Paint paint = new Paint();
ColorFilter colorFilter = new PorterDuffColorFilter(Color.DKGRAY, PorterDuff.Mode.SRC_ATOP); //(color, mode)
paint.setColorFilter(colorFilter);

//3. ColorFilter 적용하기
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, 0, 0, paint);

1. Drawable -> Bitmap

가지고 있는 Drawable을 Bitmap으로 변환하는 방법
그냥 decode~() 메소드만 사용했을 때 Immutable bitmap passed to Canvas constructor 오류가 날 수 있으니
이 경우, copy() 를 통해 복사하여 저장하면 된다.

2. ColorFilter 만들기

Bitmap에 적용할 ColorFilter를 만든다.
예시는 다크그레이 색상을 적용하였고, PorterDuff.Mode.SRC_ATOP는 source를 위에 덮겠다 라는 의미.
(예시의 경우 Destination은 Bitmap / Source는 ColorFilter가 된다.)
참고: https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

3. ColorFilter 적용하기

마지막으로 위에서 만든 ColorFilter를 Bitmap에 적용하면 완료!


이렇게 흰색 아이콘에 컬러 필터가 입혀서 나오는 것을 볼 수 있다.

Comments