SurfaceRequest.TransformationInfo
public
static
abstract
class
SurfaceRequest.TransformationInfo
extends Object
java.lang.Object | |
↳ | androidx.camera.core.SurfaceRequest.TransformationInfo |
Transformation associated the preview output.
The SurfaceRequest.TransformationInfo
can be used transform the Surface
provided via
SurfaceRequest.provideSurface(Surface, Executor, Consumer
. The info is based on the camera sensor rotation,
preview target rotation and the ViewPort
associated with the Preview
. The
application of the info depends on the source of the Surface
. For detailed example,
please check out the source code of PreviewView in androidx.camera.view artifact.
The info is also needed to transform coordinates across use cases. In a face detection
example, one common scenario is running a face detection algorithm against a
ImageAnalysis
use case, and highlight the detected face in the preview. Below is
a code sample to get the transformation Matrix
based on the ImageProxy
from
ImageAnalysis
and the SurfaceRequest.TransformationInfo
from Preview
:
// Get rotation transformation.
val transformation = Matrix()
transformation.setRotate(info.getRotationDegrees())
// Get rotated crop rect and cropping transformation.
val rotatedRect = new RectF()
rotation.mapRect(rotatedRect, RectF(imageProxy.getCropRect()))
rotatedRect.sort()
val cropTransformation = Matrix()
cropTransformation.setRectToRect(
RectF(imageProxy.getCropRect()), rotatedRect, ScaleToFit.FILL)
// Concatenate the rotation and cropping transformations.
transformation.postConcat(cropTransformation)
See also:
Summary
Public methods | |
---|---|
abstract
Rect
|
getCropRect()
Returns the crop rect rectangle. |
abstract
int
|
getRotationDegrees()
Returns the rotation needed to transform the output from sensor to the target rotation. |
Inherited methods | |
---|---|
Public methods
getCropRect
public abstract Rect getCropRect ()
Returns the crop rect rectangle.
The returned value dictates how the Surface
provided in
SurfaceRequest.provideSurface(Surface, Executor, Consumer
should be displayed. The crop
rectangle specifies the region of valid pixels in the buffer, using coordinates from (0,
0) to the (width, height) of SurfaceRequest.getResolution()
. The caller should
arrange the UI so that only the valid region is visible to app users.
If Preview
is configured with a ViewPort
, this value is calculated
based on the configuration of ViewPort
; if not, it returns the full rect of the
buffer. For code sample on how to apply the crop rect, please see ViewPort.FIT
.
Returns | |
---|---|
Rect |
See also:
getRotationDegrees
public abstract int getRotationDegrees ()
Returns the rotation needed to transform the output from sensor to the target rotation.
This is a clockwise rotation in degrees that needs to be applied to the sensor
buffer. The rotation will be determined by CameraCharacteristics
,
Preview.setTargetRotation(int)
and
Preview.Builder.setTargetRotation(int)
. This value is useful for transforming
coordinates across use cases.
This value is most useful for transforming coordinates across use cases, e.g. in
preview, highlighting a pattern detected in image analysis. For correcting
the preview itself, usually the source of the Surface
handles the rotation
without needing this value. For SurfaceView
, it automatically corrects the
preview to match the display rotation. For TextureView
, the only additional
rotation needed is the display rotation. For detailed example, please check out the
source code of PreviewView in androidx.camera .view artifact.
Returns | |
---|---|
int |
The rotation in degrees which will be a value in {0, 90, 180, 270}. |