【发布时间】:2013-09-21 21:18:05
【问题描述】:
我将用户从图库中选择的图像放入ImageView。
问题在于,有时这些图片可能非常大。
例如。 , 3648 X 2736
我有一个方法,在检查图像是否大于 2048 X 2048 后,它通过改变它的高度来调整它的大小,但它不起作用。 (它仍然粉碎):
电话:
if(mPhoto.getHeight()>=2048||mPhoto.getWidth()>=2048){
image.setImageBitmap(scaleDownBitmap(mPhoto,200));
还有方法本身:
public Bitmap scaleDownBitmap(Bitmap photo, int newHeight) {
final float densityMultiplier = getResources().getDisplayMetrics().density;
int h= (int) (newHeight*densityMultiplier);
int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));
photo=Bitmap.createScaledBitmap(photo, w, h, true);
return photo;
}
我什至不认为该方法运行...一旦从文件中获取图像,就会出现OutOfMemory 崩溃。
我该怎么办?
即使我用try{}catch{}..包围设置图像的行,它也会崩溃。
图像不是可绘制文件夹中的资源。它来自相机、画廊或互联网。
我知道我可能接近内存限制,请不要回答显而易见的问题。问题是我该如何解决。
一些大图像确实可以在某些设备上运行(具有大量内存的新设备)
例如。相同的图像适用于 Galaxy s4,但会使 Galaxy s1 崩溃。
我找不到任何解决方案...
非常感谢!
【问题讨论】:
-
你可以去安卓开发者网站查看Loading Large Bitmaps Efficiently。 Android 开发者提供了如何加载大型位图的示例项目。
-
检查此链接是否有帮助developer.android.com/training/displaying-bitmaps/…。另请参阅此链接中的说明youtube.com/watch?v=pMRnGDR6Cu0
标签: android bitmap crash imageview out-of-memory