После множества попыток благодаря всем энтузиастам Android я нашел способ эффективно обрабатывать большие изображения в приложениях Android, чтобы избавиться от outOfMemory ошибка. Но мне действительно нужно знать, это правильный формальный способ сделать это. или мне нужно добавить еще немного делать или какие-либо изменения должны быть сделаны. Прокомментируйте, пожалуйста.Является ли это правильным способом эффективной обработки больших изображений (чтобы избежать outOfMemoryErrorin Android
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();
}
попробуйте здесь http://codereview.stackexchange.com/ ... но сначала подумал, что WTF эти строки делают «BitmapFactory.decodeResource (getResources(), R.drawable.image1 до 2);« знаете ли вы, что в 'o.outWidth' есть только ширина от последнего изображения (image3)? – Selvin
Я не понял. Не могли бы вы еще раз объяснить. Благодарю. –