2017-03-03 2 views

Répondre

0

Pour obtenir des valeurs précises/correctes, utilisez le nouveau ExifInterface support library au lieu de l'ancien ExifInterface.

Vous devez ajouter à votre gradle:

compile "com.android.support:exifinterface:25.1.0" 

Et puis vous assurer d'utiliser la nouvelle android.support.media.ExifInterface bibliothèque au lieu de l'ancien android.media.ExifInterface.

import android.support.media.ExifInterface; 

String getExposureTime(final ExifInterface exif) 
{ 
    String exposureTime = exif.getAttribute(ExifInterface.TAG_EXPOSURE_TIME); 

    if (exposureTime != null) 
    { 
     exposureTime = formatExposureTime(Double.valudeOf(exposureTime)); 
    } 

    return exposureTime; 
} 

public static String formatExposureTime(final double value) 
{ 
    String output; 

    if (value < 1.0f) 
    { 
     output = String.format(Locale.getDefault(), "%d/%d", 1, (int)(0.5f + 1/value)); 
    } 
    else 
    { 
     final int integer = (int)value; 
     final double time = value - integer; 
     output = String.format(Locale.getDefault(), "%d''", integer); 

     if (time > 0.0001f) 
     { 
      output += String.format(Locale.getDefault(), " %d/%d", 1, (int)(0.5f + 1/time)); 
     } 
    } 

    return output; 
} 
+0

Merci de donner le code answer.Your me faire proche de la vérité, il est rationnel mais pas accurate.There est une image [lien] (https://pan.baidu.com/s/1dEBcSAd) , je reçois 1/323 utiliser votre code, mais il est 1/328 dans Windows. – jianhua

+0

Le problème est que vous utilisez toujours l'ancienne android.media.ExifInterface, ce qui vous donnera un temps d'exposition moins précis de 0,0031 à partir de votre photo de test. Au lieu de cela, vous devez ajouter à votre projet la nouvelle bibliothèque android.support.media.ExifInterface de Google et utiliser celle-ci à la place. ce qui vous donnera la bonne précision de 0.003053, et donc la valeur 1/328. S'il vous plaît voir l'explication ci-dessus l'algorithme. – PerracoLabs