Android Kotlin-基本数学调整位图大小的麻烦

时间:2018-09-05 20:26:20

标签: java android kotlin

我得到了以下代码:

        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 :(得分:1)

这是一个舍入错误:

var aspect = myBitmap.height / myBitmap.width

当您将1458/2592除以0.5625时,但两个变量均为intaspect变量也是如此。结果,它四舍五入为0。

您需要将表达式计算为浮点数(将至少1个变量转换为浮点数以隐式更改结果类型):

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

您的纵横比现在应该为0.5625。然后在计算以像素为单位的宽度时向下推至int

var newwidth = (newheight * aspect).toInt()

答案 1 :(得分:0)

var aspect = myBitmap.height / myBitmap.width

在kotlin中,将整数除以整数时,结果将四舍五入为整数。

首先,根据您的用例,长宽比=宽度/高度

此外,当您以整数形式获取结果时,如果结果为0.5,则aspect将具有零值,因为它是整数。该应用程序崩溃是因为newwidth变为零。

请将该行更改为

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

并在调用newwidth.toInt()时使用createScaledBitmap

P.S。请不要介意我的语法。