2014-05-14 4 views
0

Je peux rogner une image de l'appareil photo ou de la galerie et la mettre sur un ImageView et elle s'affiche correctement. Mais lorsque j'essaie de télécharger l'image sur un serveur, l'image originale a été téléchargée à la place de la photo recadrée. Comment obtenir l'URI de l'image recadrée? Je pense qu'il me manque quelque chose dans CROP_FROM_CAMERA:comment extraire l'URI du fichier de recadrage?

Aide de Pls. Merci beaucoup.

Ma culture et onstartactivity est la suivante:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode != RESULT_OK) return; 

      switch (requestCode) { 
       case PICK_FROM_CAMERA: 
        doCrop(); 

        break; 

       case PICK_FROM_FILE: 
        mImageCaptureUri = data.getData(); 

        doCrop(); 


        break;   

       case CROP_FROM_CAMERA:   
        Bundle extras = data.getExtras(); 


        if (extras != null) {    
         Bitmap photo = extras.getParcelable("data"); 

         mImageView.setImageBitmap(photo); 
        // mImageCaptureUri = mImageView.; 

        } 



       // File f = new File(mImageCaptureUri.getPath());    
        // mImageCaptureUri = data.getData(); 
       //  if (f.exists()) f.delete(); 

        break; 

      } 





    } 

    private void doCrop() { 
      final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>(); 

      Intent intent = new Intent("com.android.camera.action.CROP"); 
      intent.setType("image/*"); 

      List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0); 

      int size = list.size(); 

      if (size == 0) {    
       Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show(); 

       return; 
      } else { 
       intent.setData(mImageCaptureUri); 

       intent.putExtra("outputX", 200); 
       intent.putExtra("outputY", 200); 
       intent.putExtra("aspectX", 1); 
       intent.putExtra("aspectY", 1); 
       intent.putExtra("scale", true); 
       intent.putExtra("return-data", true); 

       if (size == 1) { 
        Intent i  = new Intent(intent); 
        ResolveInfo res = list.get(0); 

        i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 

        startActivityForResult(i, CROP_FROM_CAMERA); 
       } else { 
        for (ResolveInfo res : list) { 
         final CropOption co = new CropOption(); 

         co.title = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo); 
         co.icon  = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo); 
         co.appIntent= new Intent(intent); 

         co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 

         cropOptions.add(co); 
        } 

        CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions); 

        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setTitle("Choose Crop App"); 
        builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int item) { 
          startActivityForResult(cropOptions.get(item).appIntent, CROP_FROM_CAMERA); 
         } 
        }); 

        builder.setOnCancelListener(new DialogInterface.OnCancelListener() { 
         @Override 
         public void onCancel(DialogInterface dialog) { 

          if (mImageCaptureUri != null) { 
           getContentResolver().delete(mImageCaptureUri, null, null); 
           mImageCaptureUri = null; 
          } 
         } 
        }); 

        AlertDialog alert = builder.create(); 

        alert.show(); 


       } 
      } 
     } 
+0

Les développeurs talentueux utilisent une bibliothèque pour recadrer, car Android n'a pas de champ 'Intent': http://commonsware.com/blog/2013/01/23/no-android-does-not-have-crop-intent .html – CommonsWare

Répondre

0

meilleure pratique consiste à enregistrer le bitmap recadrée et obtenir ce nom de fichier que vous avez enregistré.

+0

Merci. comment puis-je faire ça? – user3599442