我有一个大的位图文件(比如3888x2592),现在我想将该位图调整为800x533并保存到另一个文件中。
通常情况下,我会通过调用Bitmap.createBitmap
方法对位图进行缩放,但它需要一个源位图作为第一个参数,由于加载原始图像到位图对象中当然会超过内存限制(例如见这里),因此我无法提供这个参数。
我也无法使用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,但这种方式行不通。