Android가 비트맵을 사용하여 ImageView에 실수 없이 크기 조정 및 자르기를 수행합니다.

14350 단어 imageview
안드로이드 개발 과정에서 우리는 일부 그림을 동적으로 보여야 할 때가 있다. 그리고 이런 그림의 크기 차이가 매우 크다. 만약에 그림이 완전하게 보여야 하는 것이 아니지만 진실성이 필요하지 않고 그림의 중간 부분을 보여야 하는 상황에서 우리는 일련의 처리를 해야 한다. 왜냐하면 이때 ImageView의 각종 scale type이 적용되지 않기 때문이다.구체적인 절차는 아래 코드를 자세히 보시면 여러분도 직접 복사하여 도구류로 사용할 수 있습니다
 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     }

좋은 웹페이지 즐겨찾기