我制作了一个内联函数以缩小位图的大小并创建另一个。

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)
}

我认为“成为”代码更酷,是吗?
有人知道怎么做吗?

最佳答案

没有这不可能,IMO也不希望这样做。您不能像这样更改扩展函数的接收者,最好的方法是简单地返回一个新的,编辑的,不可变的实例。就像您一开始所做的那样:

val resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)

关于android - 我可以从内联函数更改实例的分配吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54342140/

10-12 00:25
查看更多