일반적이지 않은 사진(이미지) 모양 만들기 #1 - 모서리가 둥근 사각형
출처 : http://blog.stylingandroid.com/archives/2656
2가지 이미지를 합성해, 사각형의 이미지를 다른 모양으로 바꿀 수 있다.
이번에 알아볼 것은 모서리가 둥근 사각형을 이용하여, 사각형 이미지를 둥근 사각형 모양으로 masking 하는 것이다.
public Bitmap combineImages(Bitmap bgd, Bitmap fg) {
Bitmap bmp;
int width = bgd.getWidth() > fg.getWidth() ?
bgd.getWidth() : fg.getWidth();
int height = bgd.getHeight() > fg.getHeight() ?
bgd.getHeight() : fg.getHeight();
bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
Canvas canvas = new Canvas(bmp);
canvas.drawBitmap(bgd, 0, 0, null);
canvas.drawBitmap(fg, 0, 0, paint);
return bmp;
}
여기서 bgd 로 오는 bitmap 은 둥근 사각형 모양이며, fg 는 사각형 모양의 일반 사진이다.
PorterDuffXfermode 를 이용하여, Canvas 에 미리 그려진 alpha 가 안 먹은 부분 즉 bgd 위에만
fg 이미지를 그리는 것이다.
PorterDuff.Mode.SRC_ATOP 이 이를 가능하게 하는 옵션이다.
아주 간단하지만 이 방법에는 약점이 있다.
1. bgd, fg 가 이미지 사이즈가 거의 일치해야 한다.
bgd 나 fg 를 같은 사이즈가 되도록 scaling 을 할 수는 있지만 scale 방법에 따라 결과물이 좀 일그러져 나올 수 있다.
2. 매우 비효율적이다.
이 효과를 내기 위해서 2개의 이미지를 memory 에 로딩해야 하며, 제 3의 이미지로 생성해 내야 한다.
이미지 사이즈에 따라 OutOfMemoryError 를 볼 수도 있다.
위의 문제점들이 있지만, 작으면서도 한번정도만 사용하는 경우라면 위의 방법으로도 간단히 대처할 수도 있겠다.
하지만 general 한 방법이 있기에 그 방법은 다음에 알아보도록 하겠다.
다음 글 : http://aroundck.tistory.com/2972
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] 일반적이지 않은 사진(이미지) 모양 만들기 #2 (0) | 2015.04.30 |
---|---|
[android] View Separator 만드는 방법들 (0) | 2015.04.12 |
No repository found error in Installing ADT in eclipse (0) | 2015.03.28 |
How to implement a Floating Activity in an Android App. (0) | 2015.03.08 |
android language code ( extension of values folders ) (0) | 2015.02.27 |
댓글