2013-08-27 16 views
6

Ho provato il codice seguente. Tuttavia, risulta sempre l'immagine della dimensione 160 * 160.Ritaglia un'immagine passando il percorso del file immagine in Android

try { 
    //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(Uri.fromFile(pictureFile), "image/*"); 
    //set crop properties 
    cropIntent.putExtra("crop", "true"); 
    //indicate aspect of desired crop 
    cropIntent.putExtra("aspectX", 100); 
    cropIntent.putExtra("aspectY", 100); 
    cropIntent.putExtra("scale", true); 

    //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, CROP_IMAGE); 

} catch(ActivityNotFoundException anfe) { 
    //display an error message 
    String errorMessage = "Whoops - your device doesn't support the crop action!"; 
    Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
    toast.show(); 

} 

Mi piacerebbe ritagliare un'immagine passando il suo percorso. Non voglio catturare/selezionare dall'app fotocamera o dalla galleria predefinita. Per favore aiutami su questo.

risposta

11

Ho risolto questo da creare un nuovo file prima di chiamare intenti e passando il percorso del file per memorizzare l'immagine ritagliata attraverso l'intento. Ecco la soluzione per questo.

private Uri mCropImagedUri; 
private final int CROP_IMAGE = 100;//unique request code number. Which is used to identify the request result in onActivityResult() 
/**Crop the image 
* @return returns <tt>true</tt> if crop supports by the device,otherwise false*/ 
private boolean performCropImage(){ 
    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); 
      //indicate output X and Y 
      cropIntent.putExtra("outputX", 500); 
      cropIntent.putExtra("outputY", 500); 
      //retrieve data on return 
      cropIntent.putExtra("return-data", false); 

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

      mCropImagedUri = Uri.fromFile(f); 
      cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropImagedUri); 
      //start the activity - we handle returning in onActivityResult 
      startActivityForResult(cropIntent, CROP_IMAGE); 
      return true; 
     } 
    } 
    catch(ActivityNotFoundException anfe){ 
     //display an error message 
     String errorMessage = "Whoops - your device doesn't support the crop action!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
     return false; 
    } 
    return false; 
} 

private File createNewFile(String prefix){ 
    if(prefix==null || "".equalsIgnoreCase(prefix)){ 
     prefix="IMG_"; 
    } 
    File newDirectory = new File(Environment.getExternalStorageDirectory()+"/mypics/"); 
    if(!newDirectory.exists()){ 
     if(newDirectory.mkdir()){ 
      VLLog.d(mContext.getClass().getName(), newDirectory.getAbsolutePath()+" directory created"); 
     } 
    } 
    File file = new File(newDirectory,(prefix+System.currentTimeMillis()+".jpg")); 
    if(file.exists()){ 
     //this wont be executed 
     file.delete(); 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    return file; 
} 

Quindi qui non dobbiamo preoccuparsi dei dati che viene in onActivityResult() metodo.

Ecco le informazioni complete sul ritaglio dell'immagine. Ho usato questo per risolvere. http://www.androidworks.com/crop_large_photos_with_android

+0

Se questa è la tua soluzione preferita, contrassegnala come tale e chiudi la domanda –

+0

Posso contrassegnarla come risposta dopo 2 giorni solo come da regole SO. :( – Noundla

+0

Dopo giorni di lotta finalmente ha funzionato bene, tnx. Che stupido bug!>: O – Sdghasemi

-5

In questo modo, è possibile scalare l'immagine:

Bitmap.createScaledBitmap(bitmap,50,50,true); 
+0

devo ritagliare l'immagine si basa sulla selezione dell'utente e ho postato la risposta. – Noundla

+0

@HarshParikh: in realtà esiste anche un badge SO per questo scopo (http://stackoverflow.com/help/badges/1/teacher) ed è un comportamento incoraggiato. –

+0

Perché mi hai votato, quindi ho scritto questa riga –

Problemi correlati