2012-03-31 3 views
2

Я пишу приложение, которое использует камеру телефона, чтобы сделать снимок, а затем использовать его в своем приложении. Дело в том, что в приложении заканчивается память, и, вероятно, это связано с высоким разрешением растрового изображения. Есть ли способ сохранить растровое изображение того же размера, но уменьшить разрешение?изменить растровое разрешение в приложении для Android

Спасибо!

ответ

2

это может быть сделано с помощью Options.inSampleSize, при создании растрового изображения

+0

Разве это не размер? Что делать, если вы хотите просто манипулировать разрешением без изменения размера? –

4

Вы можете установить его ширину и высоту

Bitmap bm = ShrinkBitmap(imagefile, 150, 150); 

Функция для вызова

Bitmap ShrinkBitmap(String file, int width, int height){ 

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); 
    bmpFactoryOptions.inJustDecodeBounds = true; 
    Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); 

    int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height); 
    int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width); 

    if (heightRatio > 1 || widthRatio > 1) 
    { 
    if (heightRatio > widthRatio) 
    { 
     bmpFactoryOptions.inSampleSize = heightRatio; 
    } else { 
     bmpFactoryOptions.inSampleSize = widthRatio; 
    } 
    } 

    bmpFactoryOptions.inJustDecodeBounds = false; 
    bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); 
return bitmap; 
} 

}

Это еще две ссылки, которые могут помочь вам. Link 1 & Link 2

+0

это работает, когда я использую опцию decodeResource для получить мое растровое изображение. Но, работая с намерением получить изображение, я получаю Uri и делаю это: Uri selectedImageUri = data.getData(); Bitmap bitmap = MediaStore.Images.Media.getBitmap (this.getContentResolver(), selectedImageUri); Есть ли способ изменить размер после того, как у меня есть растровое изображение таким образом? –

+0

Нет, я не думаю, что это сработает ... – Bhavin

2

от ответа jeet.chanchawat»S: https://stackoverflow.com/a/10703256/3027225

public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) { 
     int width = bm.getWidth(); 
     int height = bm.getHeight(); 
     float scaleWidth = ((float) newWidth)/width; 
     float scaleHeight = ((float) newHeight)/height; 
     // CREATE A MATRIX FOR THE MANIPULATION 
     Matrix matrix = new Matrix(); 
     // RESIZE THE BIT MAP 
     matrix.postScale(scaleWidth, scaleHeight); 

     // "RECREATE" THE NEW BITMAP 
     Bitmap resizedBitmap = Bitmap.createBitmap(
      bm, 0, 0, width, height, matrix, false); 
     return resizedBitmap; 
    } 
Смежные вопросы