我想使用BitmapFactory.decodeFile(路径,选项)解码SD卡中的图像。
我还希望将大于2048x2048像素的图像缩小到最多2048x2048(保持比例)。
我可以在获取位图后手动执行此操作,但除了已经分配的字节外,还需要分配大量字节。
我应该如何设置我的BitmapFactory.Options对象以获得该效果?
感谢
答案 0 :(得分:10)
首次加载图片时使用BitmapFactory.Options.inSampleSize,使尺寸尽可能接近目标尺寸,然后使用Bitmap.createScaledBitmap
缩放到您想要的确切尺寸。
this answer中有一些代码。
答案 1 :(得分:5)
首先在inJustDecodeBounds
中将true
设置为Options
,这样就可以显示图片的大小,而无需加载任何图片数据。
如果图像尺寸小于最大尺寸,则只需照常加载即可
另一方面,如果它太大,请使用inSampleSize
来读取较小的位图。
注意:我不认为解码在使用inSampleSize时会进行任何过滤,因此您可能会丢失一些细节,但是因为您的图像尺寸太大(2048像素)我不喜欢认为这会导致任何问题。
答案 2 :(得分:3)
您可以尝试这样的事情:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
在这里,您可以添加自己的宽度和高度。 bitmapPicture
是Bitmap
的对象。
如果这对您有任何帮助,请告诉我。