Загрузка большого изображения в растровое изображение в Android - PullRequest
3 голосов
/ 20 октября 2011

Привет, я использую приведенный ниже код для загрузки изображений с SDCard, он работает правильно,

Bitmap picture=BitmapFactory.decodeFile("/sdcard...");

или

Bitmap picture= BitmapFactory.decodeByteArray(byte[]..);  

Массив byte[] содержит байты, считанные с SDCARD с использованием FileInputstream, и не является нулевым. Оба вышеуказанных кода работают нормально. Проблема в том, что они не работают для изображений, которые больше, например У меня есть изображение размером 1,8 МБ. Мое приложение падает при декодировании изображения. Любой метод, используемый для изображения изображений, терпит неудачу. Любое решение PLZ Thakns.

Ответы [ 4 ]

6 голосов
/ 20 октября 2011

Попробуйте создать очищаемое растровое изображение.

   byte[] data = ...(read byte array from file)
   BitmapFactory.Options opt = new BitmapFactory.Options();
   opt.inPurgeable = true;
   Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length, opt); 
3 голосов
/ 20 октября 2011

Используйте приведенный ниже код, чтобы изменить размер изображения на любой нужный вам размер.

 Bitmap picture=BitmapFactory.decodeFile("/sdcard...");
    int width = picture.getWidth();
    int height = picture.getWidth();
    float aspectRatio = (float) width / (float) height;
    int newWidth = 70;
    int newHeight = (int) (70 / aspectRatio);       
    picture= Bitmap.createScaledBitmap(picture, newWidth, newHeight, true);
2 голосов
/ 31 июля 2012

В учебнике по http://developer.android.com/training/displaying-bitmaps/load-bitmap.html объясняется, как загружать большие изображения в растровое изображение, не встречая страшного исключения OutOfMemoryException.

1 голос
/ 24 октября 2011

Виртуальная машина Android имеет ограничение памяти, которое ограничивает размер декодируемых изображений.Чтобы отобразить изображения с рефиксами в виде изображения, можно использовать следующий код:

decode_options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(temp,decode_options);  //This will just fill the output parameters
if(decode_options.outWidth > image_width
        || decode_options.outHeight > image_height)
{
    float scale_width,scale_height;

    scale_width = ((float)decode_options.outWidth) / image_width;
    scale_param = scale_width;
    scale_height = ((float)decode_options.outHeight) / image_height;

    if(scale_param < scale_height)
        scale_param = scale_height;
}

decode_options.inJustDecodeBounds = false;
decode_options.inSampleSize  = (int)(scale_param + 1);
decode_options.inPreferredConfig =  Bitmap.Config.ARGB_8888;
decoded_data = 
        BitmapFactory.decodeFile(temp,decode_options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...