Domanda

Sto cercando di ritagliare un'immagine dalla galleria multimediale. Sono in grado di accedere all'immagine, avviare lo strumento di raccolta predefinito e persino salvare il risultato dell'immagine ritagliata.

Tuttavia, l'intento che sto usando non restituirà alcun risultato se il ritaglio ha avuto successo.

Il mio metodo principale:

// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);         
intent.setData(uri);   
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);  

- Metodo OnactivityResult () -

// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
    if (resultCode == RESULT_OK) {
        Log.d(TAG, "user cropped a photo");
        signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
    } else
        Log.d(TAG, "user cancelled photo crop");
}

Se annullo l'attività del raccolto, ricevo correttamente il messaggio "User Annuked Photo Crop". Ma se ritardo un'immagine, la nuova immagine ritagliata apparirà nella directory target ma la funzione OnactivityResult () non viene mai chiamata. Cosa dà?

Guardando il logcat, sto scoprendo che ogni volta che salvo l'immagine ritagliata, "Javabinder" si lamenta "Transazione di legante fallita". Capisco che questo è in qualche modo correlato alla memoria, ma il file ritagliato ha una dimensione di solo 24 kb.

È stato utile?

Soluzione

Ho trovato il problema a questo problema. Purtroppo è una limitazione Android.

Vedere Android Cropper non può andare oltre 256?

Avevo impostato l'output della mia immagine ritagliata su 400x400. Sfortunatamente il cropper predefinito di Android può fare solo 256x256. Questo è così assolutamente frustrante, specialmente quando non c'è documentazione sui limiti.

Altri suggerimenti

Stai chiamando setResult(int) (collegamento) nell'intento del raccolto?

AGGIORNARE:\

L'invio di risultati_cancelled è l'impostazione predefinita. Verrà sempre rispedito a meno che tu non impletica alcune cose.

Nel tuo intento coltura, quando hai finito l'editing (cioè l'utente tocca il pulsante fatto o qualcosa di simile), parte di quel processo chiamerebbe setResult(RESULT_OK).

esempio:

public void doneBTNPressed( View view ) {
    if ( view.getId() == R.id.doneBTN ) {
        this.isCropped = true;
    }
}

@Override    
protected void onPause() {
        if ( this.isCropped ) {
            setResult(RESUL_OK);
        }
        super.onPause();
    }

Tale risultato (result_ok, più un altro numero intero specificato) viene passato all'attività di chiamata (supponendo che sia stato utilizzato StartActivityForresult ()). Ci sono anche alcune prevalenti, a seconda delle tue esigenze. Nell'attività di chiamata (genitore), dovresti implementare onActivityResultint,int,Intent) Per ottenere il risultato dall'attività di uscita.

Nel collegamento sopra fornito, esiste una sezione intitolata "Attività di partenza e ottenendo risultati", che spiega i molteplici modi per ottenere informazioni da un'atto in uscita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top