Android가 비트맵을 사용하여 ImageView에 실수 없이 크기 조정 및 자르기를 수행합니다.
14350 단어 imageview
1 /**
2 * IamgeView Bitmap
3 * @param imageView
4 * @param bitmap
5 * @return
6 */
7 public static Bitmap createFitBitmap(ImageView imageView, Bitmap bitmap) {
8 Log.i(TAG, "createFitBitmap<---------------------");
9 int widthTarget = imageView.getWidth();
10 int heightTarget = imageView.getHeight();
11 int widthBitmap = bitmap.getWidth();
12 int heightBitmap = bitmap.getHeight();
13 Log.i(TAG, "widthTarget = " + widthTarget );
14 Log.i(TAG, "heightTarget = " + heightTarget );
15 Log.i(TAG, "widthBitmap = " + widthBitmap );
16 Log.i(TAG, "heightBitmap = " + heightBitmap );
17 Bitmap result = null;
18 if( widthBitmap >= widthTarget && heightBitmap >= heightTarget ){
19 result = createLargeToSmallBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap);
20 }
21 else if( widthBitmap >= widthTarget && heightBitmap < heightTarget ){
22 Bitmap temp = createLargeWidthToEqualHeightBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap);
23 result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp);
24 }
25 else if( widthBitmap < widthTarget && heightBitmap >= heightTarget ){
26 Bitmap temp = createLargeHeightToEqualWidthBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap);
27 result = createLargeToSmallBitmap(temp.getWidth(), temp.getHeight(), widthTarget, heightTarget, temp);
28 }
29 else{
30 Bitmap temp = createSmallToEqualBitmap(widthBitmap, heightBitmap, widthTarget, heightTarget, bitmap);
31 result = createFitBitmap(imageView, temp);
32 }
33 Log.i(TAG, "createFitBitmap--------------------->");
34 return result;
35 }
36
37
38
39 private static Bitmap createLargeToSmallBitmap( int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){
40 Log.i(TAG, "createLargeToSmallBitmap<---------------------");
41 Log.i(TAG, "widthTarget = " + widthTarget );
42 Log.i(TAG, "heightTarget = " + heightTarget );
43 Log.i(TAG, "widthBitmap = " + widthBitmap );
44 Log.i(TAG, "heightBitmap = " + heightBitmap );
45 int x = (widthBitmap - widthTarget) / 2;
46 int y = (heightBitmap - heightTarget) / 2;
47 Log.i(TAG, "createLargeToSmallBitmap--------------------->");
48 return Bitmap.createBitmap(bitmap, x, y, widthTarget, heightTarget);
49 }
50
51 private static Bitmap createLargeWidthToEqualHeightBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){
52
53 Log.i(TAG, "createLargeWidthToEqualHeightBitmap<---------------------");
54 Log.i(TAG, "widthTarget = " + widthTarget );
55 Log.i(TAG, "heightTarget = " + heightTarget );
56 Log.i(TAG, "widthBitmap = " + widthBitmap );
57 Log.i(TAG, "heightBitmap = " + heightBitmap );
58 double scale = ( heightTarget * 1.0 ) / heightBitmap;
59 Log.i(TAG, "createLargeWidthToEqualHeightBitmap--------------------->");
60 return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale) , heightTarget, false);
61 }
62
63 private static Bitmap createLargeHeightToEqualWidthBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){
64
65 Log.i(TAG, "createLargeHeightToEqualWidthBitmap<---------------------");
66 Log.i(TAG, "widthTarget = " + widthTarget );
67 Log.i(TAG, "heightTarget = " + heightTarget );
68 Log.i(TAG, "widthBitmap = " + widthBitmap );
69 Log.i(TAG, "heightBitmap = " + heightBitmap );
70 double scale = ( widthTarget * 1.0 ) / widthBitmap;
71 Log.i(TAG, "createLargeHeightToEqualWidthBitmap--------------------->");
72 return Bitmap.createScaledBitmap(bitmap, widthTarget , (int)(heightTarget * scale), false);
73 }
74
75 private static Bitmap createSmallToEqualBitmap(int widthBitmap, int heightBitmap, int widthTarget, int heightTarget, Bitmap bitmap){
76
77 Log.i(TAG, "createSmallToEqualBitmap<---------------------");
78 Log.i(TAG, "widthTarget = " + widthTarget );
79 Log.i(TAG, "heightTarget = " + heightTarget );
80 Log.i(TAG, "widthBitmap = " + widthBitmap );
81 Log.i(TAG, "heightBitmap = " + heightBitmap );
82 double scaleWidth = ( widthTarget * 1.0 ) / widthBitmap;
83 double scaleHeight = ( heightTarget * 1.0 ) / heightBitmap;
84 double scale = Math.min(scaleWidth, scaleHeight);
85 Log.i(TAG, "createSmallToEqualBitmap--------------------->");
86 return Bitmap.createScaledBitmap(bitmap, (int)(widthBitmap * scale), (int)(heightBitmap * scale), false);
87 }