Android裁剪图片为圆形图片的实现原理与代码

 更新时间:2013年01月07日 17:38:42   作者:  
这个方法是根据传入的图片的高度(height)和宽度(width)决定的,如果是 width <= height时,则会裁剪高度,裁剪的区域是宽度不变高度从顶部到宽度width的长度
以前在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;
}

相关文章

  • Android开发控制ScrollView滑动速度的方法

    Android开发控制ScrollView滑动速度的方法

    这篇文章主要介绍了Android开发控制ScrollView滑动速度的方法,结合实例形式分析了Android编程中ScrollView滑动事件相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • Android 高仿斗鱼滑动验证码

    Android 高仿斗鱼滑动验证码

    这篇文章主要介绍了Android 高仿斗鱼滑动验证码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Android变形(Transform)之Matrix用法

    Android变形(Transform)之Matrix用法

    Android的2D变形(包括缩放,扭曲,平移,旋转等)可以通过Matrix来实现,本文研究了一下;接下来就将我这俩天研究的东西和大家分享下,先来看看Matrix的用法感兴趣的你可不要错过了哈
    2013-02-02
  • Android中关于自定义相机预览界面拉伸问题

    Android中关于自定义相机预览界面拉伸问题

    这篇文章主要为大家详细介绍了Android中关于自定义相机预览界面拉伸问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android进阶之从IO到NIO的模型机制演进

    Android进阶之从IO到NIO的模型机制演进

    这篇文章主要为大家介绍了Android进阶之从IO到NIO的模型机制演进详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android使用WebView实现全屏切换播放网页视频功能

    Android使用WebView实现全屏切换播放网页视频功能

    这篇文章主要介绍了Android使用WebView实现全屏切换播放网页视频功能,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2019-07-07
  • Android 6.0动态权限及跳转GPS设置界面的方法

    Android 6.0动态权限及跳转GPS设置界面的方法

    今天小编就为大家分享一篇Android 6.0动态权限及跳转GPS设置界面的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 获取Android签名MD5的方式实例详解

    获取Android签名MD5的方式实例详解

    平时开发,很多第三方需要配置应用签名,比如百度,高德地图等,下面这篇文章主要给大家介绍了关于获取Android签名MD5的方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Android中替换WebView加载网页失败时的页面

    Android中替换WebView加载网页失败时的页面

    这篇文章主要介绍了Android中替换WebView加载网页失败时的页面,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-01-01
  • EasyValidate优雅地校验提交数据完整性

    EasyValidate优雅地校验提交数据完整性

    这篇文章主要介绍了EasyValidate优雅地校验提交数据完整性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论