Rect
activeArraySize
=
cameraCharacteristics
.
get
;">CameraCharacteristics
.
SENSOR_INFO_ACTIVE_ARRAY_SIZE
)
;
Rect
cropRegion
=
new
Rect
;">)
;
double
cropRatio
=
;">double
)
activeArraySize
.
height
;">)
/
activeArraySize
.
width
;">)
;
cropRegion
.
right
=
cropRegion
.
bottom
=
;">int
)
;">.
width
;">)
*
cropRatio
)
;
cameraDevice
.
createCaptureRequest
;">CameraDevice
.
TEMPLATE_MANUAL
)
.
apply
{
set
;">CaptureRequest
.
SCALER_CROP_REGION
,
cropRegion
)
// 其他参数设置
}
其中,cameraCharacteristics是相机的特性,activeArraySize是相机的感光元件的有效像素区域。cropRegion是裁剪区域,这里设置为activeArraySize的宽和高相等。通过计算cropRatio可以得到相机感光元件的宽高比,用于计算裁剪区域的高度。最后,将裁剪区域通过set方法设置到CaptureRequest中即可。
对于长焦镜头的裁剪,可以通过手动调整相机的取景范围来解决,具体方法如下:
Rect
zoomRect
=
cameraCharacteristics
.
get
;">CameraCharacteristics
.
SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
)
;
float
maxZoom
=
zoomRect
==
null
?
1f
:
zoomRect
.
width
;">)
/
;">float
)
activeArraySize
.
width
;">)
;
float
currentZoom
=
maxZoom
*
zoom
;
Rect
cropRegion
=
new
Rect
;">)
;
int
centerX
=
cropRegion
.
width
;">)
/
2
;
int
centerY
=
cropRegion

.
height
;">)
/
2
;
int
deltaX
=
;">int
)
;">;">0.5f
*
cropRegion
.
width
;">)
)
/
currentZoom
)
;
int
deltaY
=
;">int
)
;">;">0.5f
*
cropRegion
.
height
;">)
)
/
currentZoom
)
;
cropRegion
=
new
Rect
;">-
deltaX
,
centerY
-
deltaY
,
centerX
+
deltaX
,
centerY
+
deltaY
)
;
cameraDevice
.
createCaptureRequest
;">CameraDevice
.
TEMPLATE_PREVIEW
)
.
apply
{
set
;">CaptureRequest
.
SCALER_CROP_REGION
,
cropRegion
)
// 其他参数设置
}
其中,zoom表示当前的缩放比例,取值范围为1~maxZoom。通过计算currentZoom可以得到实际的缩放比例。cropRegion是裁剪区域,这里计算出裁剪区域的左上角和右下角坐标。最后,将裁剪区域通过set方法设置到CaptureRequest中即可。
以上方法参考自~~。
如有侵权请及时联系我们处理,转载请注明出处来自
随机推荐
科技快讯 |备案号:( 沪ICP备2026008940号-1 )