我正在使用意图启动相机:
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
getParent().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
和使用:
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
photoImage.setImageBitmap(thumbnail);
photoImage.setVisibility(View.VISIBLE);
但它只是一个缩略图,我如何获得完整的位图?我知道我可以使用自己的Activity并使用:
Camera.PictureCallback()
但无论如何使用Intent做到了吗?
谢谢!
编辑:
我也尝试过:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri uri = data.getData();
imageView.setImageURI(uri);
}
它适用于从库中选择的照片,但对于相机意图,data.getData()返回null .
6 回答
要获得全尺寸的相机图像,您应该将相机保存到临时文件中,例如:
然后在图像捕获意图完成后 - 使用以下代码从
imageUri
抓取您的图片:P.S. 代码需要针对Android M中应用的新安全限制进行修订 - FileProvider:
mImageUri
必须打包FileProvider
Open Camera and save image into some specific directory
处理图像
尽管这是一个古老的问题而且它有一个公认的答案,
我想分享我的解决方案 .
在这种情况下,您不必创建临时文件 .
另外我们 creating a chooser which offers to user both: take a picture with the camera or pick an existing one from a gallery.
在这里我们检索结果:
我也使用了Vicky的答案,但是我必须将uri保存到一个包中以避免在方向改变时丢失它 . 因此,如果您在倾斜设备后没有从您的意图中得到结果,那可能是因为您的uri无法在方向更改后继续存在 .
活动结果代码:
将uri保存到捆绑包中:
在创建期间从保存的包中检索它:
要从相机捕获最大图片大小,我希望这些简单的步骤将非常有用
这里,获取每个移动设备所支持的大小,从大小最大的那个被固定为要捕获的图片大小 .
不要在AndroidManifest中使用
onActivityResult
's data. It took me many hours to test different solutions. A camera saves a picture (even if you don' t设置权限进行相机和读卡,但是onActivityResult
会返回data == null
并且MediaStore
会返回错误的路径 . 在这些解决方案中,您只需获取上一个图库图片,而不是您的照