本文介绍了android camera2 手柄变焦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是 Android Camera2 API 的新手.我只是将我的所有项目移动到新的 Camera2 API.我使用了 Camera2Basic 示例 作为起点.
I'm new in Android Camera2 API.I just move my all project to the new Camera2 API. I have used the Camera2Basic example as a starting point.
我现在正在尝试通过添加以下内容来处理缩放:
I'm now trying handle zoom by adding this:
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);
}
但是我抓拍后,图片结果是没有变焦的.我怎样才能让它发生?谢谢大家.
But after I captured, the picture result is without the zoom.How can I make it happen?Thanks all.
更新需要在captureStillPicture()
方法中添加captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);
.
推荐答案
需要添加captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);
到 captureStillPicture()
方法.
这篇关于android camera2 手柄变焦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!