Доступ к изображению SDCard - PullRequest
       19

Доступ к изображению SDCard

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

Я занимаюсь разработкой приложения для Android, в котором мне нужно загрузить изображение с SDCard в Интернет. Для этого я использую MediaStore провайдера контента и получаю путь к изображению из столбца MediaStore.Images.Media.DATA , а теперь я создаю растровое изображение из этого пути, используя Bitmap.decodeFile (String path) метод и затем отображая это растровое изображение в ImageView в Списке . Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь перейти к действию, которое показывает это изображение в списке, я получаю такую ​​ошибку 10-20 11: 10: 47.070: ОШИБКА / AndroidRuntime (922): java.lang .OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины

Может кто-нибудь предложить мне решение этой проблемы или альтернативный способ достижения моей цели. Заранее спасибо.

Ответы [ 3 ]

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

Код ниже используется для изменения размера выбранного изображения

Bitmap bitmap  = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); 
            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            int newWidth = 100;
            int newHeight = 100;

            // calculate the scale - in this case = 0.4f
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;

            // createa matrix for the manipulation
            Matrix matrix = new Matrix();
            // resize the bit map
            matrix.postScale(scaleWidth, scaleHeight);

            Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, 
                    width, height, matrix, true); 

            ((ImageView) findViewById(R.id.ImageviewTest)).setImageBitmap(resizedBitmap);
1 голос
/ 20 октября 2011

Это происходит много раз, потому что изображение, хранящееся на SD-карте, имеет высокое разрешение, и ваше приложение не может обработать размер изображения до размера кучи

После использования строки ниже, чтобы получить Bitmap

Bitmap bmp = Bitmap.decodeFile(String path) 

Вам следует попробовать изменить до нужного размера

newBmp = Bitmap.createScaledBitmap(bmp, 240, 320, true);

, а затем использовать newBmp для установки в вашем виде.

0 голосов
/ 20 октября 2011
String filepath = Environment.getExternalStorageDirectory()
            .getAbsolutePath();
    File file = new File(filepath, filename);
    FileInputStream fs;
    try {
        fs = new FileInputStream(file);
        BitmapFactory.Options bfOptions = new BitmapFactory.Options();
        /*
         * bfOptions.inDither=false; //Disable Dithering mode
         * bfOptions.inPurgeable=true; //Tell to gc that whether it needs
         * free memory, the Bitmap can be cleared
         * bfOptions.inInputShareable=true;
         */
        bfOptions.inJustDecodeBounds = false;
        bfOptions.inTempStorage = new byte[32 * 1024];
        Bitmap b = BitmapFactory.decodeFileDescriptor(fs.getFD(), null,
                bfOptions);
        img.setImageBitmap(b);
}
catch()
{
}
...