我正在从相机中捕获图像,然后将其保存为sqlite数据库。
之后我允许用户裁剪它。整个过程质量非常差。
我在Nexus7上进行测试,我知道它的前置摄像头很差,但是在裁剪应用程序打开后,图片非常小。在作物活动中需要1/5的时间,我不知道为什么。
这会发生onActivityResult
(拍摄照片)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
String path = Images.Media.insertImage(getActivity().getContentResolver(), bitmap, "Title", null);
Uri imageUri = Uri.parse(path);
if (!doCrop(imageUri)) saveNewAvatar(bitmap);
}
}
以下是doCrop(Uri uri)
方法:
private void doCrop(final Uri imageUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*");
List<ResolveInfo> list = getActivity().getPackageManager().queryIntentActivities( intent, 0 );
int size = list.size();
intent.setData(imageUri);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
if (size == 1) {
Intent i = new Intent(intent);
ResolveInfo res = list.get(0);
i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
startActivityForResult(i, CROP);
}
}
整个过程画面非常小。
修改 做了一些研究并遵循了this thread
中的代码结束了这个:
答案 0 :(得分:5)
有许多错误(例如:可能有效,但这不是你在Android 上做这些事情的方式)关于你的代码的事情,但问题的根源是你读了图像从附加内容的data
键开始。额外版本只是一个缩影,质量很低。
您需要做的是更改调用相机的方式。这有点违反直觉,但你没有得到从相机拍摄的照片的网址,但恰恰相反:将网址传递到相机,它会尝试将图片放在那里。
网址可能指向SD卡或您拥有ContentProvider
。