android camera zoom,android camera2手柄变焦

Im新的android camera2 APi。 我只是将我的所有项目移动到新的Camera2 Api。我用Camera2Basic example作为起点。android camera2手柄变焦

林现在加入这一努力手柄变焦:

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,缩放);捕获StillPicture()方法。

+0

你解决了吗? –

+0

是的,在下面添加了我的解决方案 –

+0

captureStillPicture()方法是什么? –

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值