2

我现在做了什么: 我正在使用 android 在我的应用程序上挑选图像,并在我的布局的 ImageView 上显示它们,有时我遇到了异常java.lang.OutOfMemoryError: bitmap size exceeds VM budget。当照片大于 500kb 时会发生这种情况。

我需要做什么(我不知道该怎么做): 然后,我想做的是只允许用户选择最大 500kb 的照片。如果用户选择了一张大于 500kb 的照片,那么,我的应用程序应该显示一个 toast,告诉用户只能选择最大 500kb 的照片.... ¿怎么做?

这是我的代码:

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

请给我一些帮助,我在谷歌上搜索,我什么也找不到

4

2 回答 2

4

您不能只使用一些标准 Java 来获取文件大小,然后检查您的限制吗?

private long getFileSize(String path) {
    File file = new File(path);
    if (file.exists() && file.isFile()) {
        return file.length();
    } else {
        return 0L;
    }
}
于 2011-01-31T16:58:35.183 回答
3

为什么你这么讨厌你的用户?你问错了问题......你根本不需要限制文件大小。问题在于解压缩后的图像大小,您可以控制它。

使用BitmapFactory.decodeFile()BitmapFactory.Options参数的版本,然后将inSampleSizeoptions 参数的字段设置为适当的值(2 或 4 或其他值)。您甚至可能想先使用inJustDecodeBounds来计算出一个合理的值。

于 2011-01-31T17:26:11.977 回答