2017-03-03 3 views

答えて

0

正確な値を取得するには、古いExifInterfaceの代わりに新しいExifInterface support libraryを使用します。

あなたのGradleに追加する必要があります。その後、

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

そして、あなたは新しいandroid.support.media.ExifInterfaceライブラリーの代わりに、古い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

ありがとうございます。あなたのコードは私を真実に近いものにしますが、合理的ですが正確ではありません。画像[リンク](https://pan.baidu.com/s/1dEBcSAd) 、私は1/323あなたのコードを使用するが、それは1/328 Windowsです。 – jianhua

+0

問題は、古いアンドロイド.media.ExifInterfaceを使用していることです。これは、テスト写真から0.0031の精度の低い露出時間を与えます。代わりに、Googleから新しいandroid.support.media.ExifInterfaceライブラリをプロジェクトに追加し、代わりにこのライブラリを使用する必要があります。 0.003053の正確な精度、したがって1/328の値が得られます。アルゴリズムの上の説明を参照してください。 – PerracoLabs

関連する問題