Snapshots are captured from the preview stream instead of using a separate capture channel. They are extremely fast, small in size, and give you a low-quality output that can be easily uploaded or processed.
The snapshot size is based on the size of the preview stream, which is described in the Preview Size document. Although the preview stream size is customizable, note that this is considered an advanced feature, as the best preview stream size selector already does a good job for the vast majority of use cases.
When taking snapshots, the preview stream size is then changed to match some constraints.
Snapshots will automatically be cropped to match the preview aspect ratio. This means that if your preview is square, you can finally take a square picture or video, regardless of the available sensor sizes.
Take a look at the Preview Size document to learn about preview sizing.
You can refine the size further by applying
maxWidth and a
These values apply to both picture and video snapshots. If the snapshot dimensions exceed these values
Integer.MAX_VALUE), the snapshot will be scaled down to match the constraints.
This is very useful as it decouples the snapshot size logic from the preview. By using small constraints, you can have a pleasant, good looking preview stream, while still capturing fast, low-res snapshots with no issues.
When taking video snapshots, the video codec that the device provides might require extra constraints, like
CameraView will try to read these requirements and apply them, which can result in video snapshots that are smaller than you would expect, or with a very slightly different aspect ratio.
<com.otaliastudios.cameraview.CameraView app:cameraSnapshotMaxWidth="500" app:cameraSnapshotMaxHeight="500"/>
||Sets the max width for snapshots. If out of bounds, the output will be scaled down.|
||Sets the max height for snapshots. If out of bounds, the output will be scaled down.|