首页 / 科技数码 / 正文

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中即可。

以上方法参考自~~。

如有侵权请及时联系我们处理,转载请注明出处来自