在android中,我从图像选择器打开一个位图,并将其加载到imageview中。如果用户选择大图像,则应用程序将崩溃。我尝试过try / catch,但它没有用。
有没有办法在将文件大小加载到位图之前检查文件大小?
这是代码:
这是我选择图像时的返回功能
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
ImageUploadHandler.handleResult(this, data);
}
}
这是来自另一个文件
public void handleResult(Context context, Intent data) {
Bitmap bitmap = null;
try {
bitmap = MyImage.GetBitmapFromPath(context, data.getData());
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 100, out);
int size = out.size();
isReady = size <= IMAGE_THRESHOLD;
} catch (Exception e) {
isReady = false;
Log.d("Image Error", e.getMessage());
}
if (isReady) {
DialogImageView.setImageBitmap(bitmap);
DialogStatus.setText(context.getString(R.string.image_ok));
} else {
DialogImageView.setImageDrawable(null);
DialogStatus.setText(context.getString(R.string.too_big_image));
}
}
另一个档案
public static Bitmap GetBitmapFromPath(Context context, Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
return bitmap;
}
这一行
bitmap = MyImage.GetBitmapFromPath(context, data.getData());
来自handleResult函数的在用户加载大图像时会导致outofmemory错误。
我该如何解决这个问题?
感谢。
答案 0 :(得分:0)
尝试与此类似的代码,您只需要从要检查的位图中获取File对象:
File file = new File(uri); // or new File(filePath);
file.length() // should give you a file size in bytes