ExifInterface.TAG_SHUTTER_SPEED_VALUE是否为真实快门速度?如何转换为标准格式?
问题结论
你通过ExifInterface.TAG_SHUTTER_SPEED_VALUE获取到的返回值是正确的,它属于摄影曝光领域APEX(摄影曝光加法系统)标准定义的时间值(Tv),并非测量错误。
转换规则
APEX时间值和实际快门速度的换算公式为:
实际快门速度(单位:秒)= 1 / (2 ^ APEX时间值)
用你给出的实测数值验证可以完全匹配校验结果:
- 光照充足时拿到的6.906:计算得2^6.906≈120,对应快门速度1/120秒
- 遮挡光线时拿到的3.882:计算得2^3.882≈12,对应快门速度1/12秒
代码实现示例
// 获取APEX格式的快门速度值 double apexTv = exif.getAttributeDouble(ExifInterface.TAG_SHUTTER_SPEED_VALUE, 0); // 换算为实际快门秒数 double shutterSeconds = 1 / Math.pow(2, apexTv); // 格式化为通用显示字符串 String shutterStr; if (shutterSeconds >= 1) { // 快门速度大于等于1秒时直接显示x秒 shutterStr = String.format("%.1f秒", shutterSeconds); } else { // 快门速度小于1秒时转换为1/x格式 int denominator = (int) Math.round(1 / shutterSeconds); shutterStr = String.format("1/%d秒", denominator); }
内容的提问来源于stack exchange,提问作者user2638180
相关产品推荐
相关产品推荐

