Android裁剪图片为圆形图片

来源:互联网 发布:苏宁易购秒杀软件 编辑:程序博客网 时间:2024/05/15 23:50

以前在eoe论坛中找过裁剪图片为圆形图片的方法,但是效果都不是很理想,这几天因为公司业务的要求,需要对头像进行裁剪以圆形
的方式显示,这个方法是根据传入的图片的高度(height)和宽度(width)决定的,如果是 width <= height
时,则会裁剪高度,裁剪的区域是宽度不变高度从顶部到宽度width的长度;如果 width >
height,则会裁剪宽度,裁剪的区域是高度不变,宽度是取的图片宽度的中心区域,不过不同的业务需求,对裁剪图片要求不一样,可以根据业务的需求来调
整裁剪的区域。

好了,不多说了,直接上代码

 

        /**         * 转换图片成圆形         * @param bitmap 传入Bitmap对象         * @return         */        public Bitmap toRoundBitmap(Bitmap bitmap) {                int width = bitmap.getWidth();                int height = bitmap.getHeight();                float roundPx;                float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom;                if (width <= height) {                        roundPx = width / 2;                        top = 0;                        bottom = width;                        left = 0;                        right = width;                        height = width;                        dst_left = 0;                        dst_top = 0;                        dst_right = width;                        dst_bottom = width;                } else {                        roundPx = height / 2;                        float clip = (width - height) / 2;                        left = clip;                        right = width - clip;                        top = 0;                        bottom = height;                        width = height;                        dst_left = 0;                        dst_top = 0;                        dst_right = height;                        dst_bottom = height;                }                                 Bitmap output = Bitmap.createBitmap(width,                                height, Config.ARGB_8888);                Canvas canvas = new Canvas(output);                                 final int color = 0xff424242;                final Paint paint = new Paint();                final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);                final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);                final RectF rectF = new RectF(dst);                 paint.setAntiAlias(true);                                 canvas.drawARGB(0, 0, 0, 0);                paint.setColor(color);                canvas.drawRoundRect(rectF, roundPx, roundPx, paint);                 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));                canvas.drawBitmap(bitmap, src, dst, paint);                return output;        }

 

 

 

 

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击