0

我正在尝试在注册过程中从用户那里获取图片。所以我有一个表格和一个按钮,可以启动相机、画廊、保管箱等,并要求用户选择或拍照。

在按钮 onClick 方法中,我正在使用本主题第二个答案中的示例允许用户为图像选择相机或画廊,它会打开一个对话框,其中包含我的图像应用程序作为选项。拍摄或选择照片后,我在 onActivityResult 的代码如下:

Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
foto.setImageBitmap(mImageBitmap)

所以我有2个问题。首先,这只会得到一个缩略图,而不是我需要的全尺寸图片。其次,这仅在用户选择用相机拍摄新照片时才有效......

为了获得全尺寸图片,这段代码看起来不错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") 都返回 false。

4

1 回答 1

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;
     }
}
于 2012-11-19T13:10:39.287 回答