我知道有很多其詢問是否可以設置快門速度/ ISO等問題,這似乎並不可能當前的快門速度/ ISO ...獲取Android上
,但是否至少有可能獲得像快門速度,光圈和ISO? (先不先拍照並掃描exif值...)
我的意思是像某種實時預覽系統/硬件當前設置的值。
我知道有很多其詢問是否可以設置快門速度/ ISO等問題,這似乎並不可能當前的快門速度/ ISO ...獲取Android上
,但是否至少有可能獲得像快門速度,光圈和ISO? (先不先拍照並掃描exif值...)
我的意思是像某種實時預覽系統/硬件當前設置的值。
關於ISO值,看看這個問題Android Camera API ISO Setting?,關於快門參閱這篇https://stackoverflow.com/a/3550573/1860199
您可以設置使用Camera2阿比我想快門速度和曝光時間,我不很瞭解。但是,可以從拍攝照片時從相機獲取的byte []數據中讀取exif數據。
如果有人希望得到當前,而不是使用Camera1 Api或Camera2,ISO,曝光時間和快門速度值設置的那個。對於Camera1 Api,將數據寫入FileOutputStream並使用ExifInterface讀取Exif數據。您可以使用此方法將每個元數據寫入字節。獲取數據後,可以處理該文件,並使用Bitmap.compress();
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
long startTime = System.currentTimeMillis();
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
FileOutputStream fos = null;
Bitmap bitmap = null;
if (pictureFile == null) {
return;
}
try {
fos = new FileOutputStream(pictureFile);
// TODO Writes Exif Data to image
System.out.println("************ EXIF ************");
fos.write(data);
ExifInterface exifInterface = new ExifInterface(pictureFile.getAbsolutePath());
String model = exifInterface.getAttribute(ExifInterface.TAG_MODEL);
String make = exifInterface.getAttribute(ExifInterface.TAG_MAKE);
String flash = exifInterface.getAttribute(ExifInterface.TAG_FLASH);
String exposureMode = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_MODE);
String focalLengthString = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
String isoString = exifInterface.getAttribute(ExifInterface.TAG_ISO_SPEED_RATINGS);
String apertureString = exifInterface.getAttribute(ExifInterface.TAG_APERTURE_VALUE);
String exposureTimeString = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
String shutterSpeedString = exifInterface.getAttribute(ExifInterface.TAG_SHUTTER_SPEED_VALUE);
Double focalLength = exifInterface.getAttributeDouble(ExifInterface.TAG_FOCAL_LENGTH, 0);
Double iso = exifInterface.getAttributeDouble(ExifInterface.TAG_ISO_SPEED_RATINGS, 0);
Double aperture = exifInterface.getAttributeDouble(ExifInterface.TAG_APERTURE_VALUE, 0);
Double exposureTime = exifInterface.getAttributeDouble(ExifInterface.TAG_EXPOSURE_TIME, 0);
Double shutterSpeed = exifInterface.getAttributeDouble(ExifInterface.TAG_SHUTTER_SPEED_VALUE, 0);
System.out.println("CameraActivity model " + model);
System.out.println("CameraActivity make " + make);
System.out.println("CameraActivity flash " + flash);
System.out.println("CameraActivity exposureMode " + exposureMode);
System.out.println("CameraActivity focalLengthString " + focalLengthString + ", focalLength " + focalLength);
System.out.println("CameraActivity isoString " + isoString + ", iso " + iso);
System.out.println("CameraActivity apertureString " + apertureString + ", aperture " + aperture);
System.out.println("CameraActivity exposureTimeString " + exposureTimeString + ", exposureTime " + exposureTime);
System.out.println("CameraActivity shutterSpeedString " + shutterSpeedString + ", shutterSpeed " + shutterSpeed);
System.out.println("************ EXIF ************");
} catch (FileNotFoundException e) {
System.out.println("CameraActivity onPictureTaken() File not found: " + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(pictureFile)));
fos = null;
pictureFile = null;
}
壓縮圖像爲PNG或JPG這些成果爲我的我的設備
************ EXIF ************
CameraActivity model General Mobile 4G Dual
CameraActivity make General Mobile
CameraActivity flash 24
CameraActivity exposureMode 0
CameraActivity focalLengthString 1150/1000, focalLength 1.15
CameraActivity isoString 262, iso 262.0
CameraActivity apertureString 260/100, aperture 2.6
CameraActivity exposureTimeString 0.03333333333333333, exposureTime 0.03333333333333333
CameraActivity shutterSpeedString 4906/1000, shutterSpeed 4.906
隨着camera2,你可以看看CaptureResult通過onCaptureCompleted回調生成的對象。
如果設備支持READ_SENSOR_SETTINGS功能,則CaptureResult SENSOR_EXPOSURE_TIME和SENSOR_SENSITIVITY字段將具有自動曝光程序所選曝光和增益的當前值。
否則,您需要捕獲一張JPEG圖像並按其他答案所述查看其EXIF。