Android如何将一张图片裁成圆形/圆角矩形/特殊形状

来源:互联网 发布:大数据技术具体应用 编辑:程序博客网 时间:2024/04/27 01:23

总体思路如下:

(1)使用canvas先画一层形状层,即最后是要图片裁剪成神马样的
(2)再将paint做如下设置(画两层则取上层和下层的交叉部分,显示上层)
paint.setXfermode(new PorterDuffXfermode(Mode. SRC_IN));
具体这句话是做什么请看:http://407827531.iteye.com/blog/1470519
(3)再使用canvas将图片画进去
(4)canvas的输出的bitmap就是需要的东西啦

关键:如何将.9.png转换成bitmap对象呢?

代码如下:

NinePatchDrawable drawable = (NinePatchDrawable) mContext .getResources().getDrawable(R.drawable. my_shape);            drawable.setBounds(rect);            Bitmap first = Bitmap. createBitmap(bitmap.getWidth(), bitmap.getHeight(),                    Config. ARGB_8888);            Canvas newCanvas = new Canvas(first);            drawable.draw(newCanvas);


my_shape.9.png是一张背景透明的有一个特定形状的图形的.9图


最后

整个函数的代码如下:

public static Bitmap getShapedBitmap(Context context, Bitmap bitmap, int pixels) {        try {            Bitmap output = Bitmap. createBitmap(bitmap.getWidth(), bitmap.getHeight(),                    Config. ARGB_8888);            Canvas canvas = new Canvas(output);            final Paint paint = new Paint();            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());            final RectF rectF = new RectF(rect);            final float roundPx = pixels;            NinePatchDrawable drawable = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.my_shape);            drawable.setBounds(rect);            Bitmap first = Bitmap. createBitmap(bitmap.getWidth(), bitmap.getHeight(),                    Config. ARGB_8888);            Canvas newCanvas = new Canvas(first);            drawable.draw(newCanvas);            paint.setAntiAlias( true);            canvas.drawARGB(0, 0, 0, 0);            paint.setColor(Color. BLACK);//          canvas.drawRoundRect(rectF, roundPx, roundPx, paint);//若想切成圆角矩形,则用这句话            canvas.drawBitmap(first, rect, rectF, paint);//切成特定的形状            paint.setXfermode( new PorterDuffXfermode(Mode. SRC_IN));            canvas.drawBitmap(bitmap, rect, rect, paint);            return output;        } catch (Exception e) {            return null;        }    }

个人比较懒,就懒得跑程序再截效果图了,由于代码是拿工作中使用代码更改而成,比较粗糙,只此记录一个实现思路。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老师是条青花鱼怎么办 吃了带鱼和南瓜怎么办 苹果平板ad忘了怎么办 小米6进海水了怎么办 小米手机掉海水里怎么办 苹果7进海水了怎么办 7p手机进海水怎么办 育海参苗出现红细菌怎么办 苹果手机掉进厕所怎么办 2个月的婴儿肺炎怎么办 甜甜圈珊瑚脱骨怎么办 宝宝吃了生物球怎么办 狗尾巴被剪掉了怎么办 魟鱼尾巴刺了怎么办 狗咬过了24小时怎么办 狗咬超过24小时怎么办 狗咬超过48小时怎么办 狗咬超过72小时怎么办 狗抓超过24小时怎么办 龙须树叶子发黄怎么办? 车被广告牌砸了怎么办 开花店压力好大怎么办 快成熟葡萄软果怎么办 木本叶长白斑点了怎么办 天猫卖家超过72小时未发货怎么办 淘宝超过72小时不发货怎么办 鸿运当头干叶了怎么办 百合枝干长歪了怎么办 植物主干长歪了怎么办 钱兜子花叶子黄怎么办 丝瓜有苦味吃了怎么办 吃了苦的西葫芦怎么办 吃了苦的西葫芦中毒怎么办 吃了一点苦丝瓜怎么办 丝瓜苦味我吃了怎么办? 小孩牙地包天怎么办 小孩的牙地包天怎么办 小孩牙是地包天怎么办 布偶猫生宝宝时怎么办 仔猪拉稀打针喂药都不好怎么办 qq群宠物沉眠怎么办