Выбор изображений из галереи (SD-карты) в моем приложении… ¿Как разрешить фотографии максимум до 500 КБ? - PullRequest
2 голосов
/ 31 января 2011

ЧТО Я СДЕЛАЛ СЕЙЧАС: Я выбираю изображения в своем приложении с помощью Android и показываю их на ImageView моего макета, и иногда я получаю исключение java.lang.OutOfMemoryError: bitmap size exceeds VM budget. Это происходит, когда фотографии превышают 500 КБ.

ЧТО Я ДОЛЖЕН ДЕЛАТЬ (И Я НЕ ЗНАЮ, КАК ЭТО СДЕЛАТЬ): то, что я хочу сделать, это разрешить пользователю выбирать только фотографии размером до 500 КБ. И если пользователь выбирает фотографию размером более 500 КБ, то в моем приложении должен отображаться тост, сообщающий пользователю, что он может выбирать только фотографии размером до 500 КБ .... ¿как это сделать?

это мой код:

changeImageButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
                startActivityForResult(i, ACTIVITY_SELECT_IMAGE);
            }
        }); 



protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

        switch(requestCode) {
        case 1:
        {
            setResult(1);
            finish();    
        }
        case ACTIVITY_SELECT_IMAGE:
            if(resultCode == RESULT_OK){  
                Uri selectedImage = imageReturnedIntent.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};

                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String filePath = cursor.getString(columnIndex);
                cursor.close();

                selectedPhoto = BitmapFactory.decodeFile(filePath);
                //profileImage.setImageBitmap(selectedPhoto);
                profileImage.setImageBitmap(Bitmap.createScaledBitmap(selectedPhoto, 80, 80, false));
            }
        }
    }

profileImage - это ImageView моего макета. и я использую масштабированный butmap, чтобы изменить размер изображения до 80x80

, пожалуйста, помогите мне, я ищу в Google, и я ничего не могу найти

Ответы [ 2 ]

4 голосов
/ 31 января 2011

Разве вы не можете просто использовать стандартную Java, чтобы получить размер файла, а затем проверить свой лимит?

private long getFileSize(String path) {
    File file = new File(path);
    if (file.exists() && file.isFile()) {
        return file.length();
    } else {
        return 0L;
    }
}
3 голосов
/ 31 января 2011

Почему вы так ненавидите своих пользователей?Вы задаете неправильный вопрос ... вам вообще не нужно ограничивать размер файла .Это проблема распакованного размера изображения, и вы можете контролировать это.

Используйте версию BitmapFactory.decodeFile(), которая принимает параметр BitmapFactory.Options, а затем установите для поля inSampleSize параметра options значениесоответствующее значение (2 или 4 или что-то).Вы даже можете сначала использовать inJustDecodeBounds, чтобы получить разумное значение.

...