天天看点

android camera zoom,android camera2手柄缩放

我是

Android Camera2 API的新手.

我只是将我的所有项目移动到新的Camera2 API.我用

Camera2Basic example作为起点.

我现在尝试通过添加这个来处理缩放:

public boolean onTouchEvent(MotionEvent event) {

try {

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

CameraCharacteristics characteristics = manager.getCameraCharacteristics(mCameraId);

float maxZoom = (characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM))*10;

Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

int action = event.getAction();

float current_finger_spacing;

if (event.getPointerCount() > 1) {

// Multi touch logic

current_finger_spacing = getFingerSpacing(event);

if(finger_spacing != 0){

if(current_finger_spacing > finger_spacing && maxZoom > zoom_level){

zoom_level++;

}

else if (current_finger_spacing < finger_spacing && zoom_level > 1){

zoom_level--;

}

int minW = (int) (m.width() / maxZoom);

int minH = (int) (m.height() / maxZoom);

int difW = m.width() - minW;

int difH = m.height() - minH;

int cropW = difW /100 *(int)zoom_level;

int cropH = difH /100 *(int)zoom_level;

cropW -= cropW & 3;

cropH -= cropH & 3;

Rect zoom = new Rect(cropW, cropH, m.width() - cropW, m.height() - cropH);

mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);

}

finger_spacing = current_finger_spacing;

}

else{

if (action == MotionEvent.ACTION_UP) {

//single touch logic

}

}

try {

mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), mCaptureCallback,

null);

}

catch (CameraAccessException e) {

e.printStackTrace();

}

catch (NullPointerException ex)

{

ex.printStackTrace();

}

}

catch (CameraAccessException e)

{

throw new RuntimeException("can not access camera.", e);

}

return true;

}

还有这个:

private float getFingerSpacing(MotionEvent event) {

float x = event.getX(0) - event.getX(1);

float y = event.getY(0) - event.getY(1);

return FloatMath.sqrt(x * x + y * y);

}

但是在我拍摄之后,图片结果没有变焦.

我怎样才能实现呢?

谢谢大家.

更新

需要添加captureBuilder.set(CaptureRequest.SCALER_CROP_REGION,zoom); captureStillPicture()方法.