我的文件中有一个大位图(例如 3888x2592)。现在,我想将该位图大小调整为 800x533 并将其保存到另一个文件中。
我通常会通过调用来缩放位图Bitmap.createBitmap
方法,但它需要一个源位图作为第一个参数,我无法提供它,因为将原始图像加载到 Bitmap 对象中当然会超出内存(请参阅here https://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue, 例如)。
我也无法读取位图,例如,BitmapFactory.decodeFile(file, options)
,提供一个BitmapFactory.Options.inSampleSize
,因为我想将其调整为精确的宽度和高度。使用inSampleSize
会将位图大小调整为 972x648(如果我使用inSampleSize=4
)或778x518(如果我使用inSampleSize=5
,它甚至不是 2) 的幂。
我还想避免在第一步中使用 inSampleSize 读取图像,例如使用 972x648,然后在第二步中将其大小调整为正好 800x533,因为与直接调整原始图像大小相比,质量会很差。
总结一下我的问题:
有没有办法读取 10MP 或更大的大图像文件并将其保存到新图像文件,调整大小到特定的新宽度和高度,而不会出现 OutOfMemory 异常?
我也尝试过BitmapFactory.decodeFile(file, options)
并手动将Options.outHeight和Options.outWidth值设置为800和533,但它不起作用。
No.我很乐意有人纠正我,但我接受了您尝试的加载/调整大小方法作为妥协。
以下是任何人浏览的步骤:
- 计算可能的最大值
inSampleSize
仍然会产生比您的目标更大的图像。
- 使用加载图像
BitmapFactory.decodeFile(file, options)
,将 inSampleSize 作为选项传递。
- 使用调整大小到所需的尺寸
Bitmap.createScaledBitmap()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)