android图像视图内存不足错误

在我的Android项目中,我有imageButton,点击它之后,它必须用imageView打开新的Activity,在我的新Activity中,我必须只看到大型的ImageButton图像,我的图像大小是17mb,我内存不足错误。 但我的代码适用于尺寸较小的图像。 有人可以帮助调整图像大小或更改一些位图选项或其他方式的建议吗? 我是android的新手,抱歉英文不好:)

这是我的新Activity的XML

      

和java代码

 package com.example.example; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.ImageView; package com.example.example; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.ImageView; public class ActivityTwo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_dialog); Bundle extras = getIntent().getExtras(); String path = extras.getString("path"); if(null != path) { Uri myUri = Uri.parse(path); super.onCreate(savedInstanceState); ImageView img1 = (ImageView) findViewById(R.id.imageView1); img1.setImageURI(myUri); } } } 

在你的代码中从if(null != path)改为this

 int size = 10; //minimize as much as you want if(path != null){ Bitmap bitmapOriginal = BitmapFactory.decodeFile(pathath); Bitmap bitmapsimplesize = Bitmap.createScaledBitmap(bitmapOriginal,bitmapOriginal.getWidth() / size, bitmapOriginal.getHeight() / size, true); bitmapOriginal.recycle(); img1.setImageBitmap(bitmapsimplesize); } 

我在使用ImagesOutOfMemoryexception方面遇到了一些问题,而且所有这些exception显然是由于我使用了为应用程序分配的太多内存(称为堆)。

就像我在你的代码中看到的那样,每次按下按钮都会创建一个图像,就像你说的那样,如果图像的大小为17M ,可能如果你的设备质量很低,那么每个应用程序的最大堆数为20M ,所以你有两个图像失去记忆。

也许你只能创建一次图像,如果你必须创建多个图像,尝试删除以前的图像,并尝试调用System.gc() ,它可能会有所帮助。

如果您确实需要多次创建多个图像, inSampleSize可以在创建图像之前构建缩小的图像实例,并设置inSampleSize选项。 如果将值2设置为此属性,则将获得原始图像的1/2图像,但质量和尺寸会降低。

像这样的东西:

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; // Or other value that you estimate 

然后使用这些选项创建图像。

PS:没必要super.onCreate()调用super.onCreate()

下面的代码可以帮助您调整图像大小

 File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); File output = new File(dir, "image.png"); path = output.getAbsolutePath(); Bitmap b = BitmapFactory.decodeFile(cPath); Bitmap out = Bitmap.createScaledBitmap(b, 320, 480, false); FileOutputStream fout; try{ fout = new FileOutputStream(output); out.compress(Bitmap.CompressFormat.PNG, 100, fout); fout.flush(); fout.close(); b.recycle(); out.recycle(); }catch(Exception e){ e.printStackTrace(); } 

我意识到这是一个旧线程,但是因为我今天刚刚遇到这个错误,并且发现我收到了同样的错误,但是由于不同的原因,我想在这个问题上发表不同的观点。

在我的情况下,这是一个尺寸太大的问题,而不是尺寸(200K)。 在调整为较小尺寸(640px x 480px)后,问题得以解决。

希望这可以帮助将来遇到这篇文章的其他人。