Могу ли я изменить назначение экземпляра из встроенной функции? - PullRequest
0 голосов
/ 24 января 2019

Я сделал встроенную функцию уменьшения размера растрового изображения и создал другую.

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

Я думаю, что код "быть" более крутой, не так ли? Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 24 января 2019

Нет, это невозможно и нежелательно в любом случае ИМО. Вы не можете изменить получателя функции расширения, подобной этой, лучший способ - просто вернуть новый, отредактированный неизменный экземпляр. Так же, как вы сделали в первую очередь:

val resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...