В onPictureTaken
, я хочу сделать следующее:Как избежать «исключения из памяти» при обработке Bitmap?
Bitmap decodedPicture = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix matrix = new Matrix();
matrix.preScale(-1.0f, 1.0f);
Bitmap picture = Bitmap.createBitmap(decodedPicture, 0, 0, decodedPicture.getWidth(), decodedPicture.getHeight(), matrix, false);
View v1 = mainLayout.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap screenshot = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
Bitmap scaledPicture = Bitmap.createScaledBitmap(picture, screenshot.getWidth(), screenshot.getHeight(), true);
Bitmap compos = Bitmap.createBitmap(scaledPicture.getWidth(), scaledPicture.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(compos);
canvas.drawBitmap(scaledPicture, new Matrix(), null);
canvas.drawBitmap(screenshot, new Matrix(), null);
MediaStore.Images.Media.insertImage(getContentResolver(), compos, "name" , "description");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Мое единственное требование заключается в том, что я хотел бы сохранить высокое качество фото ... Кажется, я, возможно, придется пожертвовать этим.
На моих устройствах Nexus 4 и новее этот код работает нормально и, как ожидалось. Но на более старых устройствах, у которых меньше памяти, у меня заканчивается RAM! :(
Как я могу сделать то же самое манипулирование изображениями, не сталкиваясь с ограничением памяти? Я не пытаюсь отображать эти изображения на экране, так что решения, которые имеют отношение к уменьшенному изображению, 't действительно применимо здесь ...
Вы можете Null некоторые ссылки, а затем намекают на GC? Это должно удалить некоторые ненужные данные ... – tilpner