setRotation method

Future<void> setRotation(
  1. int rotation
)

Sets the clockwise rotation angle in degrees relative to the orientation of the camera.

This affects the pictures returned from JPEG PictureCallback. The camera driver may set orientation in the EXIF header without rotating the picture. Or the driver may rotate the picture and the EXIF thumbnail. If the Jpeg picture is rotated, the orientation in the EXIF header will be missing or 1 (row #0 is top and column #0 is left side).

If applications want to rotate the picture to match the orientation of what users see, apps should use OrientationBuilder and CameraInfo. CameraInfo.orientation is the angle between camera orientation and natural device orientation. The sum of the two is the rotation angle for back-facing camera. The difference of the two is the rotation angle for front-facing camera. Note that the JPEG pictures of front-facing cameras are not mirrored as in preview display.

For example, suppose the natural orientation of the device is portrait. The device is rotated 270 degrees clockwise, so the device orientation is 270. Suppose a back-facing camera sensor is mounted in landscape and the top side of the camera sensor is aligned with the right edge of the display in natural orientation. So the camera orientation is 90. The rotation should be set to 0 (270 + 90).

The reference code is as follows for android 24+:

Future<void> onOrientationChanged(
  Orientation orientation,
  Camera camera,
  CameraInfo cameraInfo,
) async {
  final CameraParameters parameters = await camera.getParameters();

  late final int rotation;
  switch (orientation) {
    case Orientation.portrait:
      rotation = cameraInfo.orientation;
      break;
    case Orientation.landscape:
      if (cameraInfo.facing == CameraInfo.cameraFacingFront) {
        rotation = (cameraInfo.orientation + 90) % 360;
      } else {
        rotation = (cameraInfo.orientation + 270) % 360;
      }
      break;
  }

  return camera.setParameters(parameters);
}

rotation can only be 0, 90, 180 or 270.

Throws PlatformException if rotation value is invalid.

Implementation

Future<void> setRotation(int rotation) {
  return _channel.$setRotation(this, rotation);
}