2010-09-13 32 views
4

Je rencontre un problème avec mon programme lorsque j'essaie de recadrer une image sélectionnée par l'utilisateur depuis sa galerie. Le problème jusqu'à présent n'apparaît que lorsque vous courez sur un Droid X, comme courir sur la moto d'origine Droid fonctionne bien.Recadrer l'image sur Droid X définit l'image résultante comme fond d'écran

Fondamentalement, le problème se produit lorsque l'intention de recadrage est en cours d'exécution. Une fois que l'utilisateur recadre la photo et clique sur le bouton de sauvegarde, il remplace le fond d'écran sur l'écran principal avec l'image recadrée qui a été enregistrée! Il ne le fait pas sur le droïde de moto, ou émulateurs. Ci-dessous le code de recadrage et enregistrer l'image sur la carte SD: quelqu'un

@Override 
public void onActivityResult(int requestCode,int resultCode,Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
if (requestCode ==1){ 
if (resultCode == Activity.RESULT_OK) { 
    Intent i = new Intent("com.android.camera.action.CROP"); 
    i.setData(data.getData()); 
    i.putExtra("noFaceDetection", true); 
    i.putExtra("outputX", 80); 
    i.putExtra("outputY", 80); 
    i.putExtra("aspectX", 1); 
    i.putExtra("aspectY", 1); 
    i.putExtra("scale", true); 


if(selectedImageString == null){ 
     ContentValues values = new ContentValues(); 
     values.put(android.provider.MediaStore.Images.Media.TITLE, "Temp_Icon1"); 
     values.put(android.provider.MediaStore.Images.Media.BUCKET_ID, "Temp_Icons"); 
     values.put(android.provider.MediaStore.Images.Media.BUCKET_DISPLAY_NAME,"Temp_Icons"); 
     values.put(android.provider.MediaStore.Images.Media.IS_PRIVATE, 1); 
     selectedImageString = getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values).toString(); 
    } 
    i.putExtra("output", Uri.parse(selectedImageString)); 
    startActivityForResult(i, 2); 
} 
} 
if(requestCode == 2){ 
if (resultCode == Activity.RESULT_OK){ 
    uriPath = Uri.parse(selectedImageString); 
    imageView.setImageURI(uriPath); 
} 
} 

} 

peut me aider s'il vous plaît avec cela?

+0

Je vois le même problème dans mon application sur Droid 2. Des idées? J'ai remarqué l'application de contacts sur Droid 2 n'a pas le même effet secondaire de mise à jour du fond d'écran après le recadrage donc il doit y avoir un moyen d'éviter cela dans nos applications ... – manisha

+0

Connexe: [Problème avec com.android.camera.action. CROP sur Motorola Defy] (http://stackoverflow.com/q/5709601) – blahdiblah

Répondre

3

Je peux vérifier que le Droid X fait la même chose pour moi même avec l'option "sortie" mentionnée ci-dessus. Je n'ai trouvé aucun moyen de contourner le problème pour le moment et je chercherai à bloquer la fonctionnalité de recadrage pour les téléphones Droid X ainsi. C'est comme si cela ne fonctionnait pas ici.

Par leur façon, vous pouvez essayer ce qui suit ...

i.putExtra("return-data", true); 

Cela renvoie l'image dans l'intention de retour. Vous pouvez y accéder avec les éléments suivants ...

BitMap BM = data.getParcelableExtra("data"); 

Ceci n'est toutefois pas pris en charge par la gamme de téléphones Galaxy S. Il retourne un colis vide, peu importe quoi. Donc, je n'ai pas encore trouvé de bonne solution.

1

Cela pourrait être dû au fait que vous ne spécifiez pas où placer les données lors de l'appel de l'intention de recadrage qu'il écrase l'image.

Le but de la culture est un code interne, je pense que je ne suis pas sûr que nous pouvons savoir avec certitude (l'intention des cultures ne se trouve pas sur tous les téléphones soit btw)

Quand j'appelle l'intention des cultures que je passe

i.putExtra("output", croppedOutputUri); 
+0

Merci, j'ai décidé de limiter la capacité de recadrage aux seuls téléphones que je peux physiquement tester et confirmer en travaillant comme j'en ai besoin. – Brian

+0

@losSebos suggère que MediaStore.EXTRA_OUTPUT serait mieux que "sortie". – Jonathan