在Android上将大型位图文件的大小调整为缩放输出文件

我在一个文件中有一个大位图(比如3888×2592).现在,我想将该位图的大小调整为800×533并将其保存到另一个文件中.
我通常会通过调用Bitmap.createBitmap方法缩放位图,但它需要一个源位图作为第一个参数,我无法提供,因为将原始图像加载到Bitmap对象当然会超出内存(例如,见here) ).

我也无法使用BitmapFactory.decodeFile(文件,选项)读取位图,提供BitmapFactory.Options.inSampleSize,因为我想将其调整为精确的宽度和高度.使用inSampleSize会将位图的大小调整为972×648(如果我使用inSampleSize = 4)或778×518(如果我使用inSampleSize = 5,这甚至不是2的幂).

我还想避免使用inSampleSize在第一步中使用例如972×648读取图像,然后在第二步中将其大小调整为800×533,因为与直接调整原始图像大小相比,质量会很差.

总结一下我的问题:
有没有办法读取10MP或更高的大图像文件并将其保存到新的图像文件,调整大小到特定的新宽度和高度,而不会得到OutOfMemory异常?

我还尝试了BitmapFactory.decodeFile(文件,选项)并手动将Options.outHeight和Options.outWidth值设置为800和533,但它不起作用.

解决方法:

不,我喜欢有人纠正我,但我接受了你尝试作为妥协的加载/调整大小的方法.

以下是任何人浏览的步骤:

>计算仍然产生大于目标的图像的最大inSampleSize.
>使用BitmapFactory.decodeFile(文件,选项)加载图像,并将inSampleSize作为选项传递.
>使用Bitmap.createScaledBitmap()调整大小为所需的尺寸.

上一篇:cursor


下一篇:在上传到服务器之前,使用JavaScript调整客户端大小的图像