Android 如何使用 BitmapFactory 选项缩放图像

Posted

技术标签:

【中文标题】Android 如何使用 BitmapFactory 选项缩放图像【英文标题】:Android how to scale an image with BitmapFactory Options 【发布时间】:2012-03-10 18:49:45 【问题描述】:

我想使用 BitmapFactory.decodeFile(path, options) 对 SD 卡中的图像进行解码。 我还希望将大于 2048x2048 像素的图像缩小到最多 2048x2048(保持比例)。 我可以在获取位图后手动执行此操作,但这需要在已分配的字节之外分配大量字节。 我应该如何设置我的 BitmapFactory.Options 对象来获得这种效果? 谢谢

【问题讨论】:

Resize a large bitmap file to scaled output file on android的可能重复 【参考方案1】:

你可以试试这样的:

int imageWidth, imageHeight;

Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
                        imageWidth, imageHeight, false);

您可以在此处添加自己的宽度和高度。 bitmapPictureBitmap 的对象。 让我知道这是否对您有任何帮助。

【讨论】:

就像我说的,我试图避免分配另一个 2048x2048 像素,但是让 BitmapFactory 自动执行此操作,因为我的内存非常不足。您的方法只是分配了一个不是我想要的新位图。不过感谢您的回复。【参考方案2】:

首次加载图像时使用BitmapFactory.Options.inSampleSize 以使尺寸尽可能接近您的目标尺寸,然后使用Bitmap.createScaledBitmap 缩放到您想要的确切尺寸。

this answer 中有一些代码。

【讨论】:

【参考方案3】:

首先在Options 中将inJustDecodeBounds 设置为true,这将为您提供图像的大小,而无需加载任何图像数据。 如果图像尺寸小于您的最大尺寸,则照常加载。 另一方面,如果它太大,请使用inSampleSize 读取较小的位图。

注意:我不认为解码在使用 inSampleSize 时会进行任何过滤,因此您可能会丢失一些细节,但由于您的图像尺寸太大(2048 像素),我不会不认为这会导致任何问题。

【讨论】:

以上是关于Android 如何使用 BitmapFactory 选项缩放图像的主要内容,如果未能解决你的问题,请参考以下文章

Android性能优化(八)--Android图片内存优化

网上找的挺不错的图片压缩代码

如何使用 android:maxWidth?

android源码 下载 如何使用

如何使用Android蓝牙开发

如何使用Android蓝牙开发