2017-08-11 9 views
1

Lors de la prise d'une photo dans une application Android je l'ai, en affichant des images floues/réduites, je me rends compte que ce sera à partir de la Bitmap ..... data.getExtras(). obtenir le code ("data") mais tout ce que j'ai changé n'a pas fonctionné, l'image affichée est toujours floue.Action Image Capture provoquant des images floues lors de la visualisation

Comment puis-je l'obtenir pour afficher une image en pleine résolution?

caméra Code intention

private void cameraIntent() 
{ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 
} 

Le code d'activité

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

    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQUEST_CODE_GALLERY) 
      onSelectFromGalleryResult(data); 
     else if (requestCode == REQUEST_IMAGE_CAPTURE) 
      onCaptureImageResult(data); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

et enfin le oncaptureImageResult - où je crois que je me trompe pour l'image floue

private void onCaptureImageResult(Intent data) { 
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 

    File destination = new File(Environment.getExternalStorageDirectory(), 
      System.currentTimeMillis() + ".jpg"); 

    FileOutputStream fo; 
    try { 
     destination.createNewFile(); 
     fo = new FileOutputStream(destination); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    imageView.setImageBitmap(thumbnail); 
} 

Répondre

0

de changement cette ligne .

thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 

à

thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
+0

Cela ne semble pas changer quoi que ce soit, malheureusement, ne change aucune des résolutions lors de l'affichage sur un téléphone –

0

essayer, cela renvoie l'image exacte sans qualité réduite ..

Uri u; 

private void cameraIntent() { 
     long time = System.currentTimeMillis(); 
     String stvalue = Long.toString(time); 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
     File output = new File(dir, stvalue); 
     u = Uri.fromFile(output); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, u); 
     startActivityForResult(intent, REQUEST_CAMERA); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelable("file_uri", u); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    u = savedInstanceState.getParcelable("file_uri"); 
} 

puis dans onActivityResult

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

    if (resultCode == RESULT_OK) {   
     camerastore(u); 
     break; 
    } else { 
     utils.Toast("Error in importing file"); 
    } 
} 


void camerastore(Uri u) { 
    Bitmap bitmap = null; 
    File pictureFile = new File("yourpath/image.jpg"); 

    try { 
     bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), u); 
     FileOutputStream fos = new FileOutputStream(pictureFile); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos) 
     fos.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
+0

Puis-je demander où camerapath est venu de? –

+0

J'ai édité, je viens de le copier de mon projet, j'ai fait face à un problème similaire .. ce code fonctionne bien pour moi .. Il peut y avoir des codes non désirés, ne pas déranger, je viens de poster pour vous comprendre le concept –

0

Vous compressez la image trop en utilisant JPEG compresser le format avec une perte supplémentaire de 10% de la qualité d'image en spécifiant 90 dans votre qualité. Et fondamentalement, vous faites une compression avec perte. Pour faire une compression sans perte, vous devez choisir le format de compression PNG avec une qualité de 100%. Vous pouvez le faire comme ci-dessous:

Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

Et aussi un autre conseil. Créez le fichier image dans votre cameraIntent() méthode lui-même avec l'aide de File Provider et dans onActivity il suffit d'afficher l'image à partir du fichier. Il fournit une grande qualité.

2

Essayez WeakReference, cela renvoie l'image claire, sans diminution de la qualité

WeakReference<Bitmap> result1 = new WeakReference<Bitmap>(Bitmap.createScaledBitmap(src, 
      src.getWidth(), src.getHeight(), false).copy(
      Bitmap.Config.RGB_565, true)); 
Bitmap bm=result1.get(); //Set this bitmap to any imageview that you want to display your image. 

mettre au-dessus du code dans la méthode onCaptureImageResult() par ex.

private void onCaptureImageResult(Intent data) { 
Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
WeakReference<Bitmap> result1 = new WeakReference<Bitmap>(Bitmap.createScaledBitmap(thumbnail, 
     thumbnail.getWidth(), thumbnail.getHeight(), false).copy(
     Bitmap.Config.RGB_565, true)); 
    Bitmap bm=result1.get(); 
    imageView.setImageBitmap(bm);} 
+0

En ce qui concerne mon code, où est-ce que cela se trouve? –

+0

onCaptureImageResult() Mettez là –

+0

bien j'ai mis à jour mon code, laissez-moi savoir si ce n'est pas le travail –