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多国语言转换Excel及Excel转换为string详解

    Android多国语言转换Excel及Excel转换为string详解

    这篇文章主要给大家介绍了关于Android多国语言转换Excel以及Excel转换为string的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2019-01-01
  • Android中ViewPager1和ViewPager2的使用教程

    Android中ViewPager1和ViewPager2的使用教程

    这篇文章主要介绍了Android中ViewPager1和ViewPager2的使用,效果图是结合BottomNavigationView+ViewPager一起使用的,具体实例代码跟随小编一起看看吧
    2021-10-10
  • android开发PathEffect问题处理

    android开发PathEffect问题处理

    本文主要整理了关于android中PathEffect的问题汇总以及处理方式,以及给大家做了关于PathEffect类的详细解释。
    2017-11-11
  • Android ToolBar 修改边距的实现方法

    Android ToolBar 修改边距的实现方法

    这篇文章主要介绍了Android ToolBar 修改边距的实现方法的相关资料,通过此文希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • Flutter开发之路由与导航的实现

    Flutter开发之路由与导航的实现

    这篇文章主要介绍了Flutter开发之路由与导航的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Android仿网易严选底部弹出菜单效果

    Android仿网易严选底部弹出菜单效果

    这篇文章主要为大家详细介绍了Android仿网易严选底部弹出菜单效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android中实现iOS中的毛玻璃效果

    Android中实现iOS中的毛玻璃效果

    为了实现毛玻璃效果,我们需要一组compute kernels(.rs文件中编写),及一组用于控制renderScript相关的Javaapi(.rs文件自动生成为Java类)。 这篇文章主要介绍了Android中实现iOS中的毛玻璃效果,需要的朋友可以参考下
    2017-06-06
  • android编程实现的自定义注释模板实例

    android编程实现的自定义注释模板实例

    这篇文章主要介绍了android编程实现的自定义注释模板,以完整实例形式分析了Android自定义魔板的定义及具体实现与使用技巧,需要的朋友可以参考下
    2015-11-11
  • android基于socket的局域网内服务器与客户端加密通信

    android基于socket的局域网内服务器与客户端加密通信

    本篇文章主要介绍了android基于socket的局域网内服务器与客户端加密通信,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2017-04-04
  • Android WebView 优化之路

    Android WebView 优化之路

    Android WebView 优化之路,如何才能更有效的对Android WebView进行优化,本文将为大家一一举例,感兴趣的小伙伴们可以参考一下
    2016-02-02

最新评论