Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从图库中拾取或从相机捕获的高质量图像_Android_Image_Android Camera_Crop_Android Gallery - Fatal编程技术网

Android 从图库中拾取或从相机捕获的高质量图像

Android 从图库中拾取或从相机捕获的高质量图像,android,image,android-camera,crop,android-gallery,Android,Image,Android Camera,Crop,Android Gallery,我有3项任务: 从图库中选择图像 从照相机捕获图像 从1或2裁剪图像 图像的质量必须是好的 我的问题有什么解决办法吗?可能有一些库?默认情况下,Android实际上拥有您列举的所有库 从图库中拾取图像的步骤 Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(pickPhoto

我有3项任务:

  • 从图库中选择图像
  • 从照相机捕获图像
  • 从1或2裁剪图像
  • 图像的质量必须是好的


    我的问题有什么解决办法吗?可能有一些库?

    默认情况下,Android实际上拥有您列举的所有库

  • 从图库中拾取图像的步骤

    Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(pickPhoto, FROM_GALLERY);
    
  • 从照相机中捕获图像

    Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(takePicture, FROM_CAMERA);
    
  • 获取上述意图的结果并进行裁剪

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case FROM_GALLERY:
        case FROM_CAMERA: {
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedImage = data.getData();
    
                Intent cropIntent = new Intent("com.android.camera.action.CROP");
                cropIntent.setDataAndType(selectedImage, "image/*");
                cropIntent.putExtra("crop", "true");
                cropIntent.putExtra("aspectX", 1);
                cropIntent.putExtra("aspectY", 1);
                cropIntent.putExtra("outputX", MAX_WIDTH);
                cropIntent.putExtra("outputY", MAX_HEIGHT);
                cropIntent.putExtra("return-data", true);
                startActivityForResult(cropIntent, PICTURE_CROP);
            }
            break;
        }
        case PICTURE_CROP: {
            if (resultCode == Activity.RESULT_OK) {
                final Bundle extras = data.getExtras();
    
                if (extras != null) {
                    Bitmap photo = extras.getParcelable("data");
    
                    // Hurray! You now have the photo as a Bitmap
                }
            }
            break;
        }
        }
    }
    
  • 更新:

    根据这一点,您不应该使用
    com.android.camera.action.CROP
    ,因为这并不存在于所有设备中。在那篇文章中,他还列举了我将在这里列出的备选方案:


  • 到目前为止你试过什么?你试过什么了吗?你们有什么问题吗?有太多的问题,我决定从清晰的建议开始,比如答案。现在的问题是使用这个代码我不能像正方形一样裁剪图像。我将向您展示:什么是ParseManager?对不起,这是从我的一个项目复制的。我已编辑我的答案以删除特定于项目的代码。您的代码对我有效,但默认情况下我无法裁剪方形图像。看看屏幕:你用什么值来表示最大宽度和最大高度?您也可以尝试删除这些参数。MAX_WIDTH=1000;最大高度=1000;是的,我可以删除它们,但我真的需要最大尺寸为1000。此外,当我删除它们时,我有一个无限加载对话框。