BitmapFactory.decodeFile вызывает outOfMemoryError только тогда, когда я выбираю изображение из галереи телефона, а не тогда, когда я выбираю изображение для съемки фотографии с намерением камеры. Я фактически избегаю использования decodeFile при использовании намерения камеры. Могу ли я использовать тот же подход при выборе из галереи (получение данных из намерения)? Вот мой код для получения изображения в обоих направлениях:BitmapFactory.decodeFile вызывает outOfMemoryError
Если изображение было выбрано из устройства»Галерея:
if (requestCode == 1)
{
if (intent != null && resultcode == RESULT_OK)
{
ImageHelper ih = new ImageHelper();
mProfilePicPath = ih.getSelectedImageFilePathFromGallery(this, intent);
Bitmap portraitPhoto = ih.getChosenImageFromGallery(mProfilePicPath);
try{
ih.saveImage("Profile pics", portraitPhoto, this);
ImageHelper.getChosenImageFromGallery:
public Bitmap getChosenImageFromGallery(String imagePath) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imagePath, options);
options.inSampleSize = DressingRoomActivity.calculateInSampleSize(options, 500, 500);
options.inJustDecodeBounds = false;
Bitmap portraitPhoto = ImageHelper.convertToPortraitOrientation(options, imagePath);
return portraitPhoto;
}
Если изображение было выбрано с фото с использованием камеры:
else if ((requestCode == CAMERA_REQUEST)&& (resultcode == Activity.RESULT_OK)){
Bundle extras = intent.getExtras();
Uri selectedImage = intent.getData();
if (extras != null) {
ImageHelper ih = new ImageHelper();
mProfilePicPath = ih.getFilePathFromCameraPhoto(this, selectedImage);
Bitmap photo = (Bitmap) intent.getExtras().get("data");
try{
ih.saveImage("Profile pics", photo, this);
Как вы можете видеть, чтобы захватить изображение из галле ry и получить Bitmap от него, мне нужно создать битмап только 500 х 500 пикселей с помощью этого кода options.inSampleSize = DressingRoomActivity.calculateInSampleSize(options, 500, 500);
В противном случае он вызывает outOfMemoryError в строке Bitmap bmp = BitmapFactory.decodeFile(path, options);
Что находится в методе ImageHelper.convertToPortraitOrientation(options, imagePath);
. Это означает, что пользователь получает качество AS IS в своем изображении с камеры и качество 500 пикселей от их изображения в галерее.
Мои вопросы: 1) Есть ли способ не сделать мое качество изображения 500 пикселей при выборе из галереи? Как избежать этой строки как-то: Bitmap bmp = BitmapFactory.decodeFile(path, options);
или каким-то другим способом?
2) С галереей мне пришлось преобразовать в портрет, который является лишь незначительным раздражением, но почему это так? Он меняет фотографию сбоку, если я этого не делаю.
Спасибо! BigHeap звучит так, как будто он не может использоваться на устройствах низкого качества для Android.Будет ли WeakReference работать в этом методе, если я его отредактирую? 'public static Bitmap createRotatedBitmap (битмап bm, степень плавания) { \t Bitmap bitmap = null; \t if (degree! = 0) { \t Матричная матрица = новая матрица(); \t matrix.preRotate (degree); \t bitmap = Bitmap.createBitmap (bm, 0, 0, bm.getWidth(), \t bm.getHeight(), matrix, true); \t} \t return bitmap; \t} ' –
user3164083
WeakRefrence будет работать! Но если вы делаете слишком много декодирования, вы должны использовать опцию largeHeap. Не беспокойтесь, приложение будет работать и на устройствах с низким качеством Android. –
Спасибо :) Это приложение - все об изображениях. Существует много расшифровки. Поэтому я буду использовать largeHeap. Должен ли я использовать WealReference, на ваш взгляд? –
user3164083