android_画图_图片剪切

        android里面图片剪切常用的一般是调用系统的剪切程序,或者通过createBitmap来设置图片的宽度和高度,返回一个新的bitmap,目前我做的项目需要在储存图片的时候剪切掉图片的底部的一部分区域,用系统的剪切还得调用一下,这样不适合我的要求,通过createBitmap(srcbitmap,x,y,with,height-要剪切的高度或者宽度)   这个方法只能剪切掉图片的上部分,也不符合我的要求,因此我这里采用的是两个图层重叠的方法来实现的,如果各位有什么好的方法,请留言,谢谢!

说到图层重叠就不得不说这个方法:setXfermode ,用法一般是这样的:
Canvas canvas = new Canvas(bitmap1);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(mask, 0f, 0f, paint);

该方法是设置两张图片相交时的模式 ,我们知道 在正常的情况下,在已有的图像(代码中:bitmap1)上绘图将会在其上面添加一层新的形状(代码中:mask)。 如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint; 而setXfermode就可以来解决这个问题。

这里我看到网上有篇说怎样裁剪圆角图片的方法,修改了下,活学活用,我的方法如下:

public static Bitmap CutBitmap(Bitmap bitmap, Activity activity) {
final DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
float densi = dm.density;//屏幕密度
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float roundPx = 0, roundPy = 0;
float dst_left = 0, dst_top = 0, dst_right = 0, dst_bottom = 0;
if (width <= height) {
dst_left = 0;
dst_top = 0;
dst_right = width;
dst_bottom = height - 50*densi;//图片高度-要剪切掉的区域高度
roundPx = 0;
roundPy = 0;
}
Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
// src是指要画的图的大小,dst高度或者宽度小于src则不完全显示
// 如果src的宽度、高度小于dst宽度、高度,则图像被拉伸显示
final Rect src = new Rect(0, 0, (int) dst_right, (int) dst_bottom);
final Rect dst = new Rect((int) dst_left, (int) dst_top,
(int) dst_right, (int) height);
final RectF rectF = new RectF(dst);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);// 透明色
canvas.drawRoundRect(rectF, roundPx, roundPy, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, src, dst, paint);
return output;
}

如果有问题可以留言,欢迎指正错误,让我们共同进步!

附效果图:

剪切前的图片:


剪切后的图片:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值