适配各种分辨率的图片切圆方法

项目中有这样的需求,需要把服务器传来的用户头像,切成圆形,放到一个大小位置确定的环形阴影区域内。

把网上有现成的工具类,我组合了一下,如下:

 1 import android.content.Context;
 2 import android.graphics.Bitmap;
 3 import android.graphics.Canvas;
 4 import android.graphics.Matrix;
 5 import android.graphics.Paint;
 6 import android.graphics.PorterDuffXfermode;
 7 import android.graphics.Rect;
 8 import android.graphics.RectF;
 9 import android.graphics.Bitmap.Config;
10 import android.graphics.PorterDuff.Mode;
11 import android.util.Log;
12 
13 public class ImageHelper {
14     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
15         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
16                 .getHeight(), Config.ARGB_8888);
17         Canvas canvas = new Canvas(output);
18 
19         final int color = 0xff424242;
20         final Paint paint = new Paint();
21         final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
22         final RectF rectF = new RectF(rect);
23         final float roundPx = pixels;
24 
25         paint.setAntiAlias(true);
26         canvas.drawARGB(0, 0, 0, 0);
27         paint.setColor(color);
28         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
29 
30         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
31         canvas.drawBitmap(bitmap, rect, rect, paint);
32 
33         return output;
34     }
35     
36     public static Bitmap getBitmapByPix(Bitmap bm,Context context) {
37     
38         // 获得图片的宽高    
39         int width = bm.getWidth();    
40         int height =bm.getHeight();
41         Log.e("bm.getWidth()", bm.getWidth()+"");
42         // 设置想要的大小    
43         int newWidth = dip2px(context, 66);    
44         int newHeight = dip2px(context, 66);//66dp是自己想要的大小,大家随意
45         
46         
47         // 计算缩放比例    
48         float scaleWidth = ((float) newWidth) / width;    
49         float scaleHeight = ((float) newHeight) / height;
50         
51         // 取得想要缩放的matrix参数    
52         Matrix matrix = new Matrix();    
53         matrix.postScale(scaleWidth, scaleHeight);
54         
55         // 得到新的图片    
56         return Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
57         
58         
59     }
60     
61     /** 
62      * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
63      */  
64     public static int dip2px(Context context, float dpValue) {  
65         final float scale = context.getResources().getDisplayMetrics().density;  
66         
67         return (int) (dpValue * scale + 0.5f);  
68     }  
69   
70     /** 
71      * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
72      */  
73     public static int px2dip(Context context, float pxValue) {  
74         final float scale = context.getResources().getDisplayMetrics().density;  
75         return (int) (pxValue / scale + 0.5f);  
76     }  
77 }

 

从使用情况上来说,可以考虑先切圆再缩放,最好图是正方形的效果最佳。

 

ps:dp=dip 适配的时候用这个参数哦

   px是pixel 即像素

posted @ 2013-03-15 15:02  黄泉hj  阅读(2273)  评论(0编辑  收藏  举报
沪江在线词典