Android kotlin - проблема с основной математикой, чтобы изменить размер растрового изображения - PullRequest
0 голосов
/ 05 сентября 2018

Я получил этот код:

        var newheight = 1000
        if(myBitmap.height > newheight){
            var aspect = myBitmap.height / myBitmap.width
            Log.d("letsSee", "width: " + myBitmap.width + " height: " + myBitmap.height) // letsSee: width: 2592 height: 1458

            var newwidth = newheight * aspect
            Log.d("letsSee", "newwidth: " + newwidth + " aspect: " + aspect) // newwidth: 0 aspect: 0

            myBitmap = createScaledBitmap (myBitmap, newwidth, newheight,false)
        }

Приложение падает таким образом, что здесь не так? Я также пытался добавить .toInt():

            var newwidth = newheight * aspect.toInt()

            myBitmap = createScaledBitmap (myBitmap, newwidth.toInt(), newheight,false)

..

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

В строке var aspect = myBitmap.height / myBitmap.width

В kotlin, когда вы делите целое число на целое число, результат округляется до целого числа.

Прежде всего, в соответствии с вашим использованиемcase aspect = width / height

Более того, поскольку вы получаете результат в виде целого числа, если в результате будет, скажем, 0,5, aspect будет иметь значение ZERO, поскольку оно является целым числом.Приложение вылетает из-за того, что newwidth становится равным нулю.

Пожалуйста, измените строку на

val aspect = myBitmap.width.toFloat() / myBitmap.height.toFloat()

И используйте newwidth.toInt() при вызове createScaledBitmap.

PS Пожалуйста, не обращайте внимания на мою грамматику.

0 голосов
/ 05 сентября 2018

Ошибка округления:

var aspect = myBitmap.height / myBitmap.width

Когда вы делите 1458/2592, это 0,5625, но обе переменные равны int, как и переменная aspect. В результате он округляется до 0.

Вам необходимо вычислить выражение как число с плавающей запятой (приведите хотя бы 1 переменную к числу с плавающей запятой, чтобы неявно изменить результирующий тип):

var aspect = myBitmap.height / myBitmap.width.toFloat()

Ваш аспект должен быть около 0,5625 сейчас. Затем уменьшите значение до int при расчете ширины в пикселях:

var newwidth = (newheight * aspect).toInt()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...