0

我与Android裁剪图像的工作,这是我裁剪图像代码:android-进行裁剪图像不正常

private void performCrop() { 
    try { 
     Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
     //indicate image type and Uri 
     cropIntent.setDataAndType(picUri, "image/*"); 
     //set crop properties 
     cropIntent.putExtra("crop", "true"); 
     //indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", 1); 
     cropIntent.putExtra("aspectY", 1); 
     //indicate output X and Y 
     cropIntent.putExtra("outputX", 500); 
     cropIntent.putExtra("outputY", 500); 
     //retrieve data on return 
     cropIntent.putExtra("return-data", true); 
     //start the activity - we handle returning in onActivityResult 
     startActivityForResult(cropIntent, PIC_CROP); 
    } catch (ActivityNotFoundException anfe) { 
     //display an error message 
     String errorMessage = "err"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

我已经测试此代码在Android 4.2,4.3和无问题,但在android 5,6上,它返回空指针异常,我不知道为什么。

这段代码有什么问题?我怎样才能使它与Android的所有版本兼容?

+0

确保您为Android 6应用了权限模型 – Jai

+0

将您的logcat –

回答

0
You can use according to Build SDK 
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) { 
        performCrop(fileUri); 
       } else { 
        performCropImage(fileUri); 
       } 
// code for device below 5 
private boolean performCropImage(Uri mFinalImageUri) { 
     Uri mCropImagedUri; 
     try { 
      if (mFinalImageUri != null) { 
       //call the standard crop action intent (the user device may not support it) 
       Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
       //indicate image type and Uri 
       cropIntent.setDataAndType(mFinalImageUri, "image/*"); 
       //set crop properties 
       cropIntent.putExtra("crop", "true"); 
       //indicate aspect of desired crop 
       cropIntent.putExtra("aspectX", 1); 
       cropIntent.putExtra("aspectY", 1); 
       cropIntent.putExtra("scale", true); 
       // cropIntent.p 
       //indicate output X and Y 
       cropIntent.putExtra("outputX", 200); 
       cropIntent.putExtra("outputY", 200); 
       //retrieve data on return 
       cropIntent.putExtra("return-data", false); 

       File f = createNewFile("CROP_"); 
       try { 
        f.createNewFile(); 
       } catch (IOException ex) { 
        Log.e("io", ex.getMessage()); 
       } 

       mCropImagedUri = Uri.fromFile(f); 
       cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropImagedUri); 
       //start the activity - we handle returning in onActivityResult 
       startActivityForResult(cropIntent, PIC_CROP); 
       return true; 
      } 
     } catch (ActivityNotFoundException anfe) { 
      //display an error message 
      String errorMessage = getString(R.string.crop_not_supported); 
      Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
      toast.show(); 
      return false; 
     } 
     return false; 
    } 
// code for 5 or 6 
private void performCrop(Uri picUri) { 
     try { 

      Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
      // indicate image type and Uri 
      cropIntent.setDataAndType(picUri, "image/*"); 
      // set crop properties 
      cropIntent.putExtra("crop", "true"); 
      // indicate aspect of desired crop 
      cropIntent.putExtra("aspectX", 1); 
      cropIntent.putExtra("aspectY", 1); 
      // indicate output X and Y 
      cropIntent.putExtra("outputX", 200); 
      cropIntent.putExtra("outputY", 200); 
      // retrieve data on return 
      cropIntent.putExtra("return-data", true); 
      // start the activity - we handle returning in onActivityResult 
      startActivityForResult(cropIntent, PIC_CROP); 
     } 
     // respond to users whose devices do not support the crop action 
     catch (ActivityNotFoundException anfe) { 
      // display an error message 
      String errorMessage = getString(R.string.crop_not_supported); 
      Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 

On ActivityResult put this code 

Uri imageUri = data.getData(); 
        try { 
         Bitmap selectedBitmap; 
         if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) { 
          Bundle extras = data.getExtras(); 
          selectedBitmap = extras.getParcelable("data"); 
         } else { 
          selectedBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 

         } 


// I hope you this code help you