2013-07-30 10 views
6

Di seguito è riportato il mio correlato code snippet dove in esso reindirizza al dispositivo di cropping app dopo che il quadro è stato girato dalla telecamera. Io di solito seguito questo example. Ma durante la fase/momento tra la foto scattata dalla fotocamera e di mettere tale disposizione nel raccolto app, mostra continuamente il carico e rende la mia app terribilmente non risponde. Se ciò accade almeno una volta, ogni volta che apro l'app, mostra solo il caricamento.ritaglio problema dell'immagine quando si tratta da fotocamera

Questo problema non si verifica in one scenario -> Quando non si sposta il dispositivo (vale a dire, solo quando non si verifica l'orientamento dello schermo). Qualcuno può suggerirmi di evitare questo problema?

public void shotFromCamera(View view) 
{ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageCaptureUri); 

       try { 
        intent.putExtra("return-data", true); 

        startActivityForResult(intent, PICK_FROM_CAMERA); 
       } catch (ActivityNotFoundException e) { 
        e.printStackTrace(); 
       } 
} 

protected void onActivityResult(int requestCode, int resultCode,Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 

     if(resultCode==RESULT_OK && requestCode == PICK_FROM_CAMERA){ 

      doCrop(); 
       } else if(resultCode == RESULT_OK && requestCode == CROP_FROM_CAMERA) 
     { 
      Bundle extras = data.getExtras(); 

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

       imageView.setImageBitmap(photoBitmap); 
       if(mImageCaptureUri != null) 
       { 
       File f = new File(mImageCaptureUri.getPath()); 
       if (f.exists()) f.delete(); 
       } 

       mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory()+ "/MyApp", 
          "avatar" + String.valueOf(System.currentTimeMillis()) + ".jpg")); 
       File file = new File(mImageCaptureUri.getPath()); 

        selectedImagePath = mImageCaptureUri.getPath(); 
        Log.d("pic1 ","pic to be created: "+selectedImagePath); 
        OutputStream fOut = null; 

        try { 
         fOut = new FileOutputStream(file); 
         photoBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); 
         fOut.flush(); 
         fOut.close(); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch(IOException e) 
        { 
         e.printStackTrace(); 
        }  

      } 


     } 
} 

    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(imageCaptureUri); 

       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); 
       } 
    } 

Per chiarire il mio problema, io avevo eseguire il codice sorgente in questo esempio così com'è, lo stesso problema si verifica. Ho eseguito altri due esempi che reindirizzano all'app di ritaglio. Lo stesso problema accade cambiando l'orientamento durante la fase spiegata sopra.

P.S: Se qualcuno ha un esempio funzionante che funziona sicuramente anche con modifiche di orientamento, sarei lieto di accettarlo come risposta.

risposta

0

controllare il valore della imageCaptureUri! = Null prima linea intent.setData(imageCaptureUri); in doCrop()

Modifica

Prima salvare il risultato fotocamera in un file e passare il file per il ritaglio app

intent.setData(Uri.fromFile(new File(path))); 
+0

Sì, circoscrive ma non risolve il problema. Avete altri suggerimenti e qualsiasi scenario di lavoro anche in questo caso. – Kanth

+0

per scattare foto utilizzando la fotocamera vedere http://developer.android.com/training/camera/photobasics.html –

1

È può andare con questo-

  1. supporta l'bitmap da URI specificato, cioè una completa immagine di dimensioni utilizzando

    photo = android.provider.MediaStore.Images.Media.getBitmap(cr, Uri.fromFile(imageCaptureUri));

  2. Uso Bitmap.CompressFormat.PNG comprimendo l'immagine

  3. creare un bitmap in scala utilizzando

    photo= Bitmap.createScaledBitmap(background, YourWidth, YourHeight, true);

  4. Questa è la vostra scala (corta) Immagine.

+1

Grazie per la risposta :) avrei potuto fare questo. Ma voglio dare agli utenti la possibilità di ritagliare da soli. – Kanth

Problemi correlati