我正在实现一个活动显示全屏图像视图的应用程序。现在我在应用程序的文件目录中下载了一些图像。我想在该活动中将图像设置为图像视图,我将缩小较大的图像。我在使用应用程序10到15分钟后出现OutOfMemory错误。错误在BitmapFactory的decodeFile中。这是我的代码:
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float)height / (float)reqHeight);
} else {
inSampleSize = Math.round((float)width / (float)reqWidth);
}
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromFile(String imagePath,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imagePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(imagePath, options);
}
现在我给予reqHeight = 500和reqWidth = 500
此代码在Android指南页面中提供。有什么我想念的,如果有的话请帮助我。我尝试了很多东西,但没有得到任何解决方案。
答案 0 :(得分:2)
更改int inSampleSize = 1; to int inSampleSize = 2或3并再次测试应用程序,我希望这将解决您的问题。我还建议使用这种技术,尝试延迟加载所有图像下载,这样就不会有位图和outOfMemoryError。哟可以延迟加载 - https://github.com/thest1/LazyList
答案 1 :(得分:1)
尝试使用此
Bitmap resizedbitmap2 = Bitmap.createScaledBitmap(your_bitmap, width, height,
true);
它会帮助你。
答案 2 :(得分:0)
如果您正在存储decodeSampledBitmapFromFile返回的位图列表,则应用程序中可能存在内存泄漏。尝试检查内存泄漏,并使用Bitmap.recycle()来回收位图并帮助安卓内存。