【问题标题】:Android take and display photo from camera full resolutionAndroid 从相机全分辨率拍摄和显示照片
【发布时间】:2016-11-17 10:06:18
【问题描述】:

我需要从我的应用中拍摄一张照片并将其显示在 imageView 上,所以现在我正在使用意图请求:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, REQUEST_CAMERA);

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == REQUEST_CAMERA) {
                bm = (Bitmap) data.getExtras().get("data");
                imageView.setImageBitmap(bm);
            } 
        }
    }

问题是这段代码获取了图像的缩略图,而不是完全解析的图像本身,我不知道如何获取它。我已经搜索并找到了这个 https://developer.android.com/training/camera/photobasics.html ,但是我从这个开始我不明白它。

有人可以帮帮我吗?

【问题讨论】:

  • 所有在Save the Full-size Photo下的文档中都有解释。那么你不明白的是什么?您发布了获取缩略图的代码。但您最好发布获取全尺寸图像的代码。
  • 你给自己的链接回答了这个问题..
  • getExtras().get("data") 为您提供缩略图,但它可能为空。 guarang 的答案显示了如何访问照片文件本身。请注意,如果不小心使用 setImageURI() 可能会耗尽您的内存

标签: android android-camera thumbnails


【解决方案1】:

在调用 CameraIntent 之前,根据该文件路径创建一个文件和 uri,如下所示。

filename = Environment.getExternalStorageDirectory().getPath() + "/test/testfile.jpg";
imageUri = Uri.fromFile(new File(filename));

// start default camera
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
                imageUri);
startActivityForResult (cameraIntent, CAMERA_PIC_REQUEST);

现在,您有了可以在 onAcityvityResult 方法中使用的文件路径,如下所示,

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode != CAMERA_PIC_REQUEST || filename == null)
        return;
    ImageView img = (ImageView) findViewById(R.id.image);
    img.setImageURI(imageUri);

【讨论】:

  • create a file。幸运的是你没有那样做。但是您应该添加代码来检查目录是否存在,如果不存在则创建它。
  • 事实上,这不起作用,你可以拍照,但你选择了照片点击检查,相机应用程序打不开
【解决方案2】:

试试这个代码,它对我有用。 使用以下代码打开相机:

Intent intent = new Intent();
            try {
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)&& !Environment.getExternalStorageState().equals(
                        Environment.MEDIA_MOUNTED_READ_ONLY)) {
                    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                    File file = new File(Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+ ".your folder name"
                            + File.separator + "picture").getPath());
                    if (!file.exists()) {
                        file.mkdirs();
                    }
                    capturedImageUri = Uri.fromFile(File.createTempFile("your folder name" + new SimpleDateFormat("ddMMyyHHmmss", Locale.US).format(new Date()), ".jpg", file));
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
                    startActivityForResult(intent, Util.REQUEST_CAMERA);
                } else {
                    Toast.show(getActivity(),"Please insert memory card to take pictures and make sure it is write able");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

在onActivityResult中获取抓图路径:

try {
                    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && !Environment.getExternalStorageState().equals(
                            Environment.MEDIA_MOUNTED_READ_ONLY)) {
                        File file = new File(Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator
                                + ".captured_Images"+ File.separator+ "picture").getPath());
                        if (!file.exists()) {
                            file.mkdirs();
                        }

selectedPath1 = capturedImageUri.toString().replace("file://", "");
                            Logg.e("selectedPath1", "OnactivityResult==>>" + selectedPath1);
                            imageLoader.displayImage(capturedImageUri.toString(), imgCarDetails1);
} else {
                        Toast.show(getActivity(), "Please insert memory card to take pictures and make sure it is write able");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

在 Manifest 文件中添加此权限:-

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

【讨论】:

    【解决方案3】:

    没有一个答案对我有用,我无法使用本教程,因为在创建 FileProvider 时,xml 给了我一个错误。 最后我发现这个答案就像一个魅力。 Android Camera Intent: how to get full sized photo?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多