作为一名新程序员,每当我使用OutOfMemoryException
BitmapFactory.decodeStream(is,option)
对象的returns
方法时,我都会对Bitmap
感到困惑。由于每个应用程序都有virtual machine
预算,如果超出预算会导致OutOfMemoryException
并且应用程序崩溃,因为bitmap
很重。所以任何人都可以帮助我。我必须使用ImageView
方法将图像设置为setImageBitmap(bitmap)
。除非直到m无法进行Bitmap
引用,否则如何将其设置为ImageView
?
答案 0 :(得分:1)
尝试这样,它会起作用..
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resId, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(res, resId, options);
}
答案 1 :(得分:0)
此link将提供您需要的所有信息,以避免OutOfMemoryExceptions
。
这是您问题的最佳答案,因为您没有详细说明代码的实现。看看它,然后学习。
答案 2 :(得分:0)
我遇到了同样的问题所以我使用了以下选项
BitmapFactory.Options options=new BitmapFactory.Options();
options.inPreferQualityOverSpeed=false;
options.inSampleSize=10;
options.inScaled=false;
options.inTargetDensity=100;
我希望这对你也有用
答案 3 :(得分:0)
Android开发参考包含许多新Android开发人员的示例和指南。
Here您可以找到一个开发指南,解释在应用程序中加载位图的bes实践。
此解决方案是将内存中的图像缩小到imageView的大小,以避免OutOfMemoryException。因为对于非常大的图片,如果您的屏幕仅为720p宽,则不需要加载每个像素。
答案 4 :(得分:0)
如果您在模拟器上测试应用,请尝试通过编辑AVD来增加VM heap
的大小。希望这会对你有所帮助。
答案 5 :(得分:0)
尝试解码您的位图,然后使用它。
try this
Bitmap bitmap = Bitmap.createScaledBitmap(ImageResource,desired height , desired width ,false);