从图库中裁剪的 android-image 无法正常工作

Posted

技术标签:

【中文标题】从图库中裁剪的 android-image 无法正常工作【英文标题】:android-image cropping from gallery not working properly 【发布时间】:2015-07-01 06:44:50 【问题描述】:

我有一个表单,用户可以从图库中选择图像或拍摄图像。当用户拍摄图像时它工作正常,但当用户从图库中选择图像然后我要求裁剪图像时它不能正常工作。

在从图库作品中找到的模拟器裁剪图像上,但在我测试过的 2 部手机上,当我选择裁剪应用程序时,裁剪应用程序崩溃或者如果它没有崩溃,它就不起作用并在 imageView 上显示图像。

这是我的代码:

    final int PIC_CROP = 2;
    final int CAMERA_CAPTURE = 1;
    final int PICK_FROM_FILE = 3;
    private Uri picUri;

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_CAPTURE && resultCode == RESULT_OK) 

            picUri = data.getData();// get image URI
            performCrop();
         else if (requestCode == PIC_CROP) // crop and compress image
            if (resultCode != RESULT_OK)
                return;
            Bundle extras = data.getExtras();
            Bitmap thePic = extras.getParcelable("data");
            FileOutputStream out = null;
            ByteArrayOutputStream bao = new ByteArrayOutputStream();
            double width = thePic.getWidth();
            double height = thePic.getHeight();
            double ratio = 650 / width;
            int newheight = (int) (ratio * height);
            thePic = Bitmap.createScaledBitmap(thePic, 650, newheight, true);
            try 
                out = new FileOutputStream(file);
                thePic.compress(Bitmap.CompressFormat.JPEG, 295, out);
                thePic.compress(Bitmap.CompressFormat.JPEG, 295, bao);

                byte[] ba = bao.toByteArray();
                switch (whichimg) 
                case 1:
                    simg1 = Base64.encodeBytes(ba);
                    break;
             catch (Exception e) 

            

        
    

if (item == 0) // take photo
                    Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(captureIntent, CAMERA_CAPTURE);
                    alert.dismiss();
                 else if (item == 1) // photo from gallery
                    Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    startActivityForResult(
                            Intent.createChooser(intent, (getString(R.string.choosephototo))),
                            CAMERA_CAPTURE);
                    alert.dismiss();
                

这是裁剪代码:

private void performCrop() 
    try 
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        cropIntent.setDataAndType(picUri, "image/*");
        cropIntent.putExtra("crop", "true");
        //cropIntent.putExtra("aspectX", 1);
        //cropIntent.putExtra("aspectY", 1);
        //cropIntent.putExtra("outputX", 356);
        //cropIntent.putExtra("outputY", 256);
        cropIntent.putExtra("return-data", true);
        startActivityForResult(cropIntent, PIC_CROP);
     catch (ActivityNotFoundException anfe) 
        MyToast.makeText(NewAdd2.this, DariGlyphUtils.reshapeText(getString(R.string.devicecouldcop)));
    

你能帮帮我吗?为什么它不能正常工作?

谢谢

【问题讨论】:

请添加崩溃的堆栈跟踪! @Vaiden 我的应用程序没有崩溃,裁剪应用程序崩溃 你仍然在 logcat 中得到一个堆栈跟踪 【参考方案1】:

试试下面的链接来回答你的问题,它会起作用的

可能在您的 performCrop() 方法中出现问题

Link For Crop

【讨论】:

以上是关于从图库中裁剪的 android-image 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

从相机和图库上传在所有版本中都无法正常工作

android从图库中裁剪图像nullpointerexception

从图库中获取图像,但不会裁剪

Android:在捕获或从图库中挑选后裁剪图像

无法在android中裁剪图像

在 Android 4.4 中从图库中选择时裁剪