如何让用户在捕获图像或从图库中选择图像之间进行选择,之后我想知道照片的类型(PNG / JPG)。 我正在使用此代码,但效果不佳。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == getActivity().RESULT_OK) {
if (requestCode == REQUEST_CAMERA) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
mImg.setImageBitmap(photo);
} else if (requestCode == SELECT_FILE) {
Uri selectedImageUri = data.getData();
String[] projection = {MediaStore.MediaColumns.DATA};
CursorLoader cursorLoader = new CursorLoader(getActivity(), selectedImageUri, projection, null, null,
null);
Cursor cursor = cursorLoader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
String selectedImagePath = cursor.getString(column_index);
Bitmap bm;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(selectedImagePath, options);
final int REQUIRED_SIZE = 200;
int scale = 1;
while (options.outWidth / scale / 2 >= REQUIRED_SIZE
&& options.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
options.inSampleSize = scale;
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(selectedImagePath, options);
mImg.setImageBitmap(bm);
mImg.setAlpha(1);
}
}
}
答案 0 :(得分:1)
之后我想知道照片的类型(PNG / JPG)
在getType()
上致电ContentResolver
,传递Uri
。
我使用此代码但效果不佳。
删除您拥有的大部分内容,因为您的selectedImagePath
代码在大多数Android设备上都会失败,并且您正在解码主应用程序线程上的位图。使用像an image-loading library这样的Picasso来处理图像加载,异步,包括缩放。毕加索可以直接使用Uri
而没有任何有缺陷的selectedImagePath
内容。然后,您只需要getType()
调用来获取图像的MIME类型。您的整个requestCode == SELECT_FILE
块将被2-3行代码替换。
答案 1 :(得分:0)
您必须安装Apache Commons Io 使用此lib
中的FilenameUtils.getExtention()String ext = FilenameUtils.getExtension("/path/to/file/foo.txt");
我认为这会对你有所帮助