Bitmap数据处理

把直角图片改为圆角,通过改roundPx这个参数
fun toRoundBitmap(bitmap: Bitmap): Bitmap? {
var width = bitmap.width
var height = bitmap.height
val roundPx: Float
val left: Float
val top: Float
val right: Float
val bottom: Float
val dst_left: Float
val dst_top: Float
val dst_right: Float
val dst_bottom: Float
if (width <= height) {
roundPx = width / 2.toFloat()
left = 0f
top = 0f
right = width.toFloat()
bottom = width.toFloat()
height = width
dst_left = 0f
dst_top = 0f
dst_right = width.toFloat()
dst_bottom = width.toFloat()
} else {
roundPx = height / 2.toFloat()
val clip = (width - height) / 2.toFloat()
left = clip
right = width - clip
top = 0f
bottom = height.toFloat()
width = height
dst_left = 0f
dst_top = 0f
dst_right = height.toFloat()
dst_bottom = height.toFloat()
}
val output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val color = -0xbdbdbe
val paint = Paint()
val src = Rect(left.toInt(), top.toInt(), right.toInt(), bottom.toInt())
val dst = Rect(dst_left.toInt(), dst_top.toInt(), dst_right.toInt(), dst_bottom.toInt())
val rectF = RectF(dst)
paint.isAntiAlias = true // 设置画笔无锯齿
canvas.drawARGB(0, 0, 0, 0) // 填充整个Canvas
paint.color = color

// 以下有两种方法画圆,drawRounRect和drawCircle
// canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
canvas.drawCircle(roundPx, roundPx, roundPx, paint)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) // 设置两张图片相交时的模式,参考http://trylovecatch.iteye.com/blog/1189452
canvas.drawBitmap(bitmap, src, dst, paint) //以Mode.SRC_IN模式合并bitmap和已经draw了的Circle
return output
}

posted on 2021-01-16 15:07  zhang11111wei  阅读(102)  评论(0编辑  收藏  举报

导航