我正在尝试在注册过程中从用户那里获取图片。所以我有一个表单和一个启动相机,galerry,Dropbox等的按钮,并要求用户选择或拍照。
在onClick方法按钮上,我正在使用本主题的第二个答案Allow user to select camera or gallery for image的示例,它会打开一个对话框,其中包含我的图像应用程序作为选项。拍摄或选择照片后,我在onActivityResult上的代码如下:
Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
foto.setImageBitmap(mImageBitmap)
所以我有两个问题。首先,这只得到一个缩略图,而不是我需要的全尺寸图片。其次,只有当用户选择用相机拍摄新的照片时,这才有效...
获取全尺寸图片,这段代码似乎很好Android Camera Intent: how to get full sized photo?但它仅适用于相机拍摄的图片,而且这个选择器意图我也不确定这段代码适合的位置。我应该验证巫婆来源的选择吗?如果是这样,我怎么能这样做?
编辑:选择器意图为我提供了4种图像源选项:相机,图库,Dropbox和ASTRO文件管理器。当然,如果我安装了其他应用程序,可以使用更多选项。所以我在每种情况下检查了意图内容:
CAMERA: act=inline-data (has extras)
DROPBOX and GALLERY: dat="file path"
ASTRO: dat="file path" (has extras)
因此验证意图是否有额外内容并不告诉我来源。两者都是 data.hasExtra(“act”)和 data.hasExtra( “DAT”) 正在返回假。
答案 0 :(得分:2)
以下是从相机拍摄的图像中获取完整尺寸图像的代码
声明对象
private File dir, destImage,f;
private String cameraFile = null;
private static final int CAPTURE_FROM_CAMERA = 1;
在您的活动中
dir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath(), "MyApp");
if (!dir.isDirectory())
dir.mkdir();
destImage = new File(dir, new Date().getTime() + ".jpg");
cameraFile = destImage.getAbsolutePath();
try{
if(!destImage.createNewFile())
Log.e("check", "unable to create empty file");
}catch(IOException ex){
ex.printStackTrace();
}
f = new File(destImage.getAbsolutePath());
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destImage));
startActivityForResult(i,CAPTURE_FROM_CAMERA);
你的onActivityResult 中的
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CAPTURE_FROM_CAMERA:
if (resultCode==RESULT_OK) {
if(f==null){
if(cameraFile!=null)
f = new File(cameraFile);
else
Log.e("check", "camera file object null line no 279");
}else
Log.e("check", f.getAbsolutePath());
Bitmap useBitmap = BitmapFactory.decodeFile(f.getAbsolutePath());
// now use this bitmap wherever you want
}
break;
}
}