티스토리 뷰

반응형



[Android] Bitmap 크기 조절 / 겹치기(합치기) / 잘라내기 

Android Bitmap resize, overlay, crop, scale


[Android] Bitmap 회전, 좌우 / 상하 반전 적용하기 ( inverse, rotate ) 바로가기


   Drawable을 Bitmap으로 가져오기


1
2
3
public static Bitmap getOverlayBitmap(Context context) {
    return BitmapFactory.decodeResource(context.getResources(), R.drawable.dwfox);
}
cs



   Bitmap 이미지 크기 조절


가로길이를 200으로 맞춰 이미지 크기를 조절해주기

1
2
3
4
5
6
7
8
9
10
11
12
13
static public Bitmap resizeBitmap(Bitmap original) {
 
    int resizeWidth = 200;
 
    double aspectRatio = (double) original.getHeight() / (double) original.getWidth();
    int targetHeight = (int) (resizeWidth * aspectRatio);
    Bitmap result = Bitmap.createScaledBitmap(original, resizeWidth, targetHeight, false);
    if (result != original) {
        original.recycle();
    }
    return result;
}
 
cs





   Bitmap 이미지 잘라내기


1
2
3
4
5
6
7
8
9
10
11
static public Bitmap cropBitmap(Bitmap original) {
    Bitmap result = Bitmap.createBitmap(original
            , original.getWidth() / 4 //X 시작위치 (원본의 4/1지점)
            , original.getHeight() / 4 //Y 시작위치 (원본의 4/1지점)
            , original.getWidth() / 2 // 넓이 (원본의 절반 크기)
            , original.getHeight() / 2); // 높이 (원본의 절반 크기)
    if (result != original) {
        original.recycle();
    }
    return result;
cs


# 결과 화면


   Bitmap 이미지 사이즈 줄이고 잘라서 겹치기(정사각형)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
static public Bitmap overlayBitmap(Bitmap original, Context context) {
 
    double aspectRatio = (double) original.getHeight() / (double) original.getWidth();
 
    int MAX_LENGTH = 120;
 
    int targetWidth, targetHeight;
    int startW = 0;
    int startH = 0;
    Bitmap originalResizeBmp;
 
    if (aspectRatio >= 1) { //세로가 긴 경우
        targetWidth = MAX_LENGTH;
        targetHeight = (int) (targetWidth * aspectRatio);
        startH = (targetHeight - targetWidth) / 2;
 
    } else { //가로가 긴 경우
        targetHeight = MAX_LENGTH;
        targetWidth = (int) (targetHeight / aspectRatio);
        startW = (targetWidth - targetHeight) / 2;
    }
 
    //하단 비트맵
    originalResizeBmp = Bitmap.createScaledBitmap(original, targetWidth, targetHeight, false);
    originalResizeBmp = originalResizeBmp.createBitmap(originalResizeBmp, startW, startH
            , (targetWidth > targetHeight ? targetHeight : targetWidth)
            , (targetWidth > targetHeight ? targetHeight : targetWidth));
 
    //상단 비트맵
    Bitmap overlayBmp = Bitmap.createScaledBitmap(getOverlayBitmap(context)
            , (targetWidth > targetHeight ? targetHeight : targetWidth)
            , (targetWidth > targetHeight ? targetHeight : targetWidth)
            , false);
 
    //결과값 저장을 위한 Bitmap
    Bitmap resultOverlayBmp = Bitmap.createBitmap(originalResizeBmp.getWidth()
            , originalResizeBmp.getHeight()
            , originalResizeBmp.getConfig());
 
 
    //상단 비트맵에 알파값을 적용하기 위한 Paint
    Paint alphaPaint = new Paint();
    alphaPaint.setAlpha(125);
 
    //캔버스를 통해 비트맵을 겹치기한다.
    Canvas canvas = new Canvas(resultOverlayBmp);
    canvas.drawBitmap(originalResizeBmp, new Matrix(), null);
    canvas.drawBitmap(overlayBmp, new Matrix(), alphaPaint);
 
    if (originalResizeBmp != original) {
        original.recycle();
    }
    if (originalResizeBmp != resultOverlayBmp) {
        originalResizeBmp.recycle();
    }
    if (overlayBmp != resultOverlayBmp) {
        overlayBmp.recycle();
    }
 
    return resultOverlayBmp;
}
cs



# 결과화면


반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함