CircleImageManager ——将图片转换为圆形图片的类

package com.kale.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

public class CircleImageManager {

    /**
     * @param context 对象
     * @param resId 图片资源的id
     * @return 一个圆形的Drawable对象
     */
    public static Drawable getCircleDrawable(Context context,int resId) {
        Bitmap bitmap = getCircleBitmap(context, resId);
        Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
        return drawable;
    }

    /**
     * @param context
     * @param resId
     * @return 转换好的bitmap对象
     */
    public static Bitmap getCircleBitmap(Context context,int resId) {
        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId);
        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;
            left = 0;
            top = 0;
            right = width;
            bottom = 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 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); // 填充整个Canvas

        // 以下有两种方法画圆,drawRounRect和drawCircle
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
        // canvas.drawCircle(roundPx, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://trylovecatch.iteye.com/blog/1189452
        canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle

        return output;
    }
}

CircleImageManager ——将图片转换为圆形图片的类,布布扣,bubuko.com

时间: 2024-12-23 09:20:22

CircleImageManager ——将图片转换为圆形图片的类的相关文章

Android圆角图片和圆形图片实现总结

1. 概述 Android研发中经常会遇见圆角或者圆形图片的展示,但是系统中ImageView并不能直接支持,需要我们自己做一些处理,来实现圆角图片或者圆形图片,自己最近对这块的实现做了一下总结,看一下几种实现方法. 图层叠加,上层覆盖一层蒙版,遮挡图片,让图片展示出圆角或者圆形效果 重新绘制 BitmapShader Xfermode RoundedBitmapDrawable CardView,使用官方控件,自动裁剪,达到圆角或者圆形效果.(5.0以上系统) 第一种方法,很傻,不太优雅,不推

PHP将Base64图片转换为本地图片并保存

本文出至:新太潮流网络博客 /** * [将Base64图片转换为本地图片并保存] * @E-mial [email protected] * @TIME 2017-04-07 * @WEB http://blog.iinu.com.cn * @param [Base64] $base64_image_content [要保存的Base64] * @param [目录] $path [要保存的路径] */ function base64_image_content($base64_image_c

BMP图片转换为JPEG图片

原文:BMP图片转换为JPEG图片 昨天在家学习,发现很多人把BMP图片转换为其它图片格式,有些人写得简单,有些人写得复杂. Insus.NET在想,一直在做文件上传,下载,或是图片剪切,都有进行过文件另存,在另存时,还需指定ContentType. 你可以在MSDN: http://msdn.microsoft.com/en-us/library/system.drawing.image(v=vs.110).aspx  找到相关方法: 好的,我们就写一个方法:为了看到效果,Insus.NET举

将矩形图片转化为圆形图片

功能:点击按钮将一张矩形的图片裁剪为圆形的图片,圆形图片为矩形的内切圆 工具类: import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; /** * 将矩形图片变为圆形的工具类 */ public clas

Picasso第三方图片框架显示图片

1:资源: https://github.com/square/picasso](https://github.com/square/picasso 2:添加权限: <uses-permission android:name="android.permission.INTERNET"/> 3.布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:

Golang压缩Jpeg图片和PNG图片

博主一直在维护一个导出PDF的服务,但是这个服务导出的PDF文件是真的巨大,动辄就上百MB.这里面主要是图片占据了大多数体积,所以考虑在导出前压缩一下图片. Jpeg的图片压缩是很好做的,因为jpeg这个协议本身就支持调整图片质量的.在golang中,我们只需要使用标准库的image/jpeg,将图片从二进制数据解码后,降低质量再编码为二进制数据即可实现压缩.而且质量和压缩比例相对而言还不错. func compressImageResource(data []byte) []byte { im

UIImage类扩展返回一个带边框的圆形图片

/** * 将image转换为圆型带边框的图片(最好写一个UIImage的类扩展) * * @param name 图片的名字 * @param borderWidth 外层边框的宽度 * @param borderColor 外层边框的颜色 * * @return 返回已经处理好的圆形图片 */ + (instancetype)circleImageWithName:(NSString *)name borderWidth:(CGFloat)borderWidth borderColor:(U

Glide的加载图片的帮助类,用来把图片圆角或者改成圆形图片

Glide虽然非常好用但是没找到把图片圆角的方法,所以百度了一个非常不错的加载类自己实现圆角图 感谢原文章作者:http://blog.csdn.net/weidongjian/article/details/47144549 自定义一个extend BitmapTransformation的方法,把获得的bitmap转化成圆形图片 import android.content.Context; import android.content.res.Resources; import andro

自定义圆形图片

圆形图片相必是项目开发中也是不少用的一个知识点吧. 那么这里学习一下简单的制作圆形图片,主要运用 BitmapShader 类的知识来实现 一.首先,了解一下 BitmapShader 类 BitmapShader是Shader的子类,可以通过Paint.setShader(Shader shader)进行设置 看一下BitmapShader 的构造方法 BitmapShader bitmapShader = new BitmapShader(bitmap,TileMode, TileMode)