我如何从 android 中的照片属性中通过理性获得曝光时间?
How can i get exposure time by rational from photo properties in android?
我在写gallery.But当我使用exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME)
时得到double
,它应该是有理数(分数)。如果我打开系统图库,它是rational.Please帮助me.Thanks。
要获得 precise/correct 值,请使用新的 ExifInterface support library 而不是旧的 ExifInterface。
您必须添加到您的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;
}
我在写gallery.But当我使用exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME)
时得到double
,它应该是有理数(分数)。如果我打开系统图库,它是rational.Please帮助me.Thanks。
要获得 precise/correct 值,请使用新的 ExifInterface support library 而不是旧的 ExifInterface。
您必须添加到您的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;
}