Мое приложение снимает изображение с помощью камеры устройства, а затем открывает его, чтобы пользователь мог выполнить некоторую обработку.Для этого я проверяю ориентацию изображения и при необходимости поворачиваю его, что я делаю так:
Bitmap image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), lastTaken);
int rotation = getCameraPhotoOrientation(filePath);
if (0 < rotation)
{
Matrix mx = new Matrix();
mx.setRotate((float) rotation);
image = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), mx, true);
}
Этот код работает на большинстве устройств, однако на одном из старых тестовых устройств, которые я использовал, онвызывает OutOfMemoryException
, когда изображение поворачивается, предположительно потому, что оно пытается удержать две копии изображения в памяти.
Как я могу избежать этого?
Если не существует простого способа предотвратить проблему на данном этапе процесса, есть ли способ, которым я могу проверить, сколько памяти у меня есть, и ограничить разрешение изображения, которое использует камера, таким, чтобыоставит достаточно места для этой операции?Я уже указываю разрешение, поэтому вопрос в том, как сравнить размер изображения и доступную память, чтобы определить, какое разрешение будет безопасным.Мое единственное ограничение заключается в том, что изменения, которые вносит пользователь, должны относиться к исходному изображению, поэтому редактирование уменьшенной копии изображения не обрезает его, если нет простого способа отразить эти изменения в сохраненной версии.Следовательно, уменьшение размера изображения до уровня, который может поддерживаться в памяти, никоим образом не будет катастрофой.