Android从相机全分辨率拍摄并显示照片

时间:2016-07-14 13:04:33

标签: android android-camera thumbnails

我需要从我的应用中拍摄照片并将其显示在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,但是当我从这开始时,我不明白它。

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

在您调用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);

答案 1 :(得分:0)

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

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();
                }

在清单文件中添加此权限: -

<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);
}

答案 2 :(得分:0)

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

相关问题