这是有效处理大型图像的正确方法吗(以避免Android中的OutOfMemoryError)
感谢所有Android爱好者的努力,我找到了一种在Android应用程序中高效处理大型图像的方法,以消除outOfMemory错误。但我真的需要知道这是正确的正式方法。还是我需要添加一些内容或进行任何更改。请评论这是有效处理大型图像的正确方法吗(以避免Android中的OutOfMemoryError),android,out-of-memory,bitmapfactory,android-bitmap,Android,Out Of Memory,Bitmapfactory,Android Bitmap,感谢所有Android爱好者的努力,我找到了一种在Android应用程序中高效处理大型图像的方法,以消除outOfMemory错误。但我真的需要知道这是正确的正式方法。还是我需要添加一些内容或进行任何更改。请评论 Bitmap bitmap1; iv1 = (ImageView) findViewById(R.id.iv1); iv2 = (ImageView) findViewById(R.id.iv2); iv3 = (ImageView) findViewById(R.id.iv3);
Bitmap bitmap1;
iv1 = (ImageView) findViewById(R.id.iv1);
iv2 = (ImageView) findViewById(R.id.iv2);
iv3 = (ImageView) findViewById(R.id.iv3);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.image1);
BitmapFactory.decodeResource(getResources(), R.drawable.image2);
BitmapFactory.decodeResource(getResources(), R.drawable.image3);
int srcWidth = o.outWidth;
int srcHeight = o.outHeight;
int dstWidth = 600;
int dstHeight = 450;
int inSampleSize = 1;
if (srcHeight > dstHeight || srcWidth > dstWidth) {
final int halfHeight = srcHeight / 2;
final int halfWidth = srcWidth / 2;
while ((halfHeight / inSampleSize) > dstWidth
&& (halfWidth / inSampleSize) > dstWidth) {
inSampleSize *= 2;
}
}
o.inSampleSize = inSampleSize;
o.inJustDecodeBounds = false;
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image1, o);
iv1.setImageBitmap(bitmap1);
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image2, o);
iv2.setImageBitmap(bitmap1);
Toast.makeText(getApplicationContext(),
"DEcoded", Toast.LENGTH_LONG).show();
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image3, o);
iv3.setImageBitmap(bitmap1);
@Override
protected void onDestroy() {
bitmap1.recycle();
super.onDestroy();
Toast.makeText(getApplicationContext(),
"Bitmap Destroyed", Toast.LENGTH_LONG).show();
}
似乎您的代码正在做与相同的事情 这个想法是,如果我们试图在300*300的视图区域中显示位图,我们不需要将相当大的资源(比如1000*1000位图资源)加载到内存中。只需先获取纵横比,然后将其解码为相对较小的位图,以节省内存(并避免OOM)
所以我认为这应该足够了。试试这里……但首先想到的是,如果这些行正在执行
BitmapFactory.decodeResource(getResources(),R.drawable.image1到2);
您知道ino.outWidth
仅是上一幅图像的宽度(image3)我不明白你的意思。请你进一步解释一下。谢谢。谢谢你的回答。