我制作了一个内联函数以缩小位图的大小并创建另一个。
private fun Bitmap.limitSizeTo(maxSize: Int): Bitmap {
var width = this.width
var height = this.height
val bitmapRatio = width.toFloat() / height.toFloat()
if (bitmapRatio > 1) {
width = maxSize
height = (width / bitmapRatio).toInt()
} else {
height = maxSize
width = (height * bitmapRatio).toInt()
}
return Bitmap.createScaledBitmap(this, width, height, true)
}
原样:
var resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)
成为:
bitmap.limitSizeTo(100)
doSomething(bitmap)
我尝试但未编译的是:
private fun Bitmap.limitSizeTo(maxSize: Int): Bitmap {
var width = this.width
var height = this.height
val bitmapRatio = width.toFloat() / height.toFloat()
if (bitmapRatio > 1) {
width = maxSize
height = (width / bitmapRatio).toInt()
} else {
height = maxSize
width = (height * bitmapRatio).toInt()
}
this = Bitmap.createScaledBitmap(this, width, height, true)
}
我认为“成为”代码更酷,是吗? 有人知道怎么做吗?
答案 0 :(得分:2)
没有这是不可能的,IMO也不希望这样做。您不能像这样更改扩展函数的接收者,最好的方法是简单地返回一个新的,编辑的,不变的实例。就像您一开始所做的一样:
val resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)