我得到了以下代码:
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)
..
答案 0 :(得分:1)
这是一个舍入错误:
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()
答案 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。请不要介意我的语法。