我使用camera2API,我需要获得focal lenght
属性。
我找到了一种从相机特性中获取它的方法
float[] f = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);
for (float d : f) {
Logger.logGeneral("LENS_INFO_AVAILABLE_FOCAL_LENGTHS : " + d);
}
但是这种方法会将值3.8
或接近它的值反映回来。它取决于设备。但是这个值必须接近30-35
...
然后我找到了另一个解决方案。当我拍照时,我打开了照片属性,并且看到了我得到的和我需要的东西
我试图直接从图像中获取此属性
private JSONObject getJsonProperties() {
JSONObject properties = new JSONObject();
final ExifInterface exif = getExifInterface();
final String [] tagProperties = {TAG_DATETIME, TAG_DATETIME_DIGITIZED, TAG_EXPOSURE_TIME,
TAG_FLASH, TAG_FOCAL_LENGTH, TAG_GPS_ALTITUDE, TAG_GPS_ALTITUDE_REF, TAG_GPS_DATESTAMP,
TAG_GPS_LATITUDE, TAG_GPS_LATITUDE_REF, TAG_GPS_LONGITUDE, TAG_GPS_LONGITUDE_REF,
TAG_GPS_PROCESSING_METHOD, TAG_GPS_TIMESTAMP, TAG_IMAGE_LENGTH, TAG_IMAGE_WIDTH, TAG_ISO, TAG_MAKE,
TAG_MODEL, TAG_ORIENTATION, TAG_SUBSEC_TIME, TAG_SUBSEC_TIME_DIG, TAG_SUBSEC_TIME_ORIG, TAG_WHITE_BALANCE};
for (String tag : tagProperties){
try {
properties.put(tag, exif.getAttribute(tag));
} catch (JSONException e) {
e.printStackTrace();
}
}
return properties;
}
private ExifInterface getExifInterface() {
ExifInterface exif = null;
try {
exif = new ExifInterface(ImageSaver.getImageFilePath());
} catch (IOException e) {
e.printStackTrace();
}
return exif;
}
我整合了一整套属性,当然还包括一个我非常需要TAG_FOCAL_LENGTH
的属性。但是我又错了这样的valeu 473/100
...我不知道它是什么意思...... Valeu必须大致30-35
......
我做错了什么?
答案 0 :(得分:0)
事实上我找到了答案。
根据@Aleks G
35毫米当量将是您获得的焦距乘以一定数量,称为作物因子。对于不同的制造商甚至型号,这个因素非常不同。例如,对于许多尼康数码单反相机,它是1.5;对于许多佳能数码单反相机来说它是1.6;对于Apple iPhone 5来说它是6.99,对于三星Galaxy S3来说它是7.6,依此类推。
据我所知,Android不提供API来确定设备相机的裁剪因素。
你可以尝试使用一个技巧。使用设备的相机拍照后,有些设备会填充FocalLengthIn35mmFilm exif标签 - 因此您可以尝试使用此技术。但并非所有手机都这样做,例如,我的华为没有。
其他一些设备将填充焦距的两个字段 - 第一个是使用的实际焦距,第二个是35毫米等效字段。并非所有人都这样做。同样的华为手机没有,但我的iPhone 5没有。
长话短说,无法保证从设备上获得的焦距计算出35mm的等效值。
最后我只是添加到我的属性列表中,例如标记
TAG_FOCAL_LENGTH_IN_35MM_FILM
现在如果它可用,我可以得到它