setExposureOffset method
Sets the exposure offset for the selected camera.
The supplied offset
value should be in EV units. 1 EV unit represents a
doubling in brightness. It should be between the minimum and maximum offsets
obtained through getMinExposureOffset
and getMaxExposureOffset
respectively.
Throws a CameraException
when an illegal offset is supplied.
When the supplied offset
value does not align with the step size obtained
through getExposureStepSize
, it will automatically be rounded to the nearest step.
Returns the (rounded) offset value that was set.
Implementation
Future<double> setExposureOffset(double offset) async {
_throwIfNotInitialized("setExposureOffset");
// Check if offset is in range
List<double> range =
await Future.wait([getMinExposureOffset(), getMaxExposureOffset()]);
if (offset < range[0] || offset > range[1]) {
throw CameraException(
"exposureOffsetOutOfBounds",
"The provided exposure offset was outside the supported range for this device.",
);
}
// Round to the closest step if needed
double stepSize = await getExposureOffsetStepSize();
if (stepSize > 0) {
double inv = 1.0 / stepSize;
double roundedOffset = (offset * inv).roundToDouble() / inv;
if (roundedOffset > range[1]) {
roundedOffset = (offset * inv).floorToDouble() / inv;
} else if (roundedOffset < range[0]) {
roundedOffset = (offset * inv).ceilToDouble() / inv;
}
offset = roundedOffset;
}
try {
return CameraPlatform.instance.setExposureOffset(_cameraId, offset);
} on PlatformException catch (e) {
throw CameraException(e.code, e.message);
}
}