Android处理Bitmap使其能够不失真等比缩放裁剪后显示在ImageView上

Android开发过程中,我们有时需要动态得显示一些图片,并且这些图片的大小差距会十分大,如果需求并不是需要图片完整显示,但是需要不失真,并且要图片中间部分的情况下,我们需要做一系列处理,因为这个时候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     }

 

posted on 2015-04-24 03:48 厌世夕阳 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/recwert/p/4452324.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值