我想使用 BitmapFactory.decodeFile(path, options) 解码 SD 卡中的图像。
我还希望将大于 2048x2048 像素的图像缩小到最多 2048x2048(保持比例)。
我可以在获取位图后手动执行此操作,但这需要在已分配的字节之外分配大量字节。
我应该如何设置我的 BitmapFactory.Options 对象来获得这种效果?
谢谢
问问题
40590 次
3 回答
12
首次加载图像时使用BitmapFactory.Options.inSampleSize以使尺寸尽可能接近目标尺寸,然后用于Bitmap.createScaledBitmap
缩放到所需的确切尺寸。
这个答案中有一些代码。
于 2012-02-20T12:28:31.130 回答
6
首先在您的 中设置inJustDecodeBounds
,这将为您提供图像的大小,而无需加载任何图像数据。
如果图像尺寸小于您的最大尺寸,则照常加载。
另一方面,如果它太大,请使用读取较小的位图。 true
Options
inSampleSize
注意:我认为使用 inSampleSize 时解码不会进行任何过滤,因此您可能会丢失一些细节,但由于您的图像尺寸太大(2048 像素),我认为这不会导致任何问题。
于 2012-02-20T12:28:26.883 回答
4
你可以尝试这样的事情:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
在这里您可以添加自己的宽度和高度。bitmapPicture
是 的对象Bitmap
。让我知道这是否对您有任何帮助。
于 2012-02-20T12:21:25.440 回答