我已经尝试在我的相机记录应用程序中处理“s4 缩放”设备的放大/缩小。因为它只支持常规缩放,即 parameters.isZoomSupported()==true
,parameters.isSmoothZoomSupported()==false
,我使用了 parameters.setZoom (mZoomVal);
mCamera.setParameters(parameters);
像往常一样。
问题是 Zoom 不稳定、嘈杂且不流畅。
有人知道如何像在三星相机应用程序中那样处理“s4 变焦”中的变焦速度吗?
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.v("onKeyDown keyCode="+keyCode+" event="+event.toString());
boolean handled = false;
switch(keyCode){
case KeyEvent.KEYCODE_FOCUS:
setAutoFocus();
handled = true;
break;
case KeyEvent.KEYCODE_CAMERA:
if(event.getRepeatCount() == 0){
if (isRec()) {
stopRec(1, 0);
} else {
startRec();
}
}
handled = true;
break;
case 256: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_MOVE:
handled = true;
break;
case 261: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_SPEED2
handled = true;
break;
case KeyEvent.KEYCODE_ZOOM_IN:
setZoomIn();
//AutoFocus();
handled = true;
break;
case KeyEvent.KEYCODE_ZOOM_OUT:
setZoomOut();
//AutoFocus();
handled = true;
break;
}
if(handled)
Log.v("onKeyDown HANDLED!");
else
return super.onKeyDown(keyCode, event);
return handled;
}
public int setZoomIn(){
if(mCamera == null){
return 0;
}
Parameters parameters = mCamera.getParameters();
List<Integer> zoom_list = parameters.getZoomRatios();
if(mZoomVal >= mZoomMax)
return zoom_list.get(mZoomMax);
/*
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}*/
mZoomVal++;
isFocused = false;
parameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
mZoomVal = parameters.getZoom();
return zoom_list.get(mZoomVal);
}
public int setZoomOut(){
if(mCamera == null){
return 0;
}
Parameters parameters = mCamera.getParameters();
List<Integer> zoom_list = parameters.getZoomRatios();
if(mZoomVal <= 0)
return zoom_list.get(0);
/*
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}*/
mZoomVal--;
isFocused = false;
parameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
mZoomVal = parameters.getZoom();
return zoom_list.get(mZoomVal);
}
public void setAutoFocus(){
if(mCamera == null){
return;
}
if(isFocused)
return;
if(isAutoFocusing){
mCamera.cancelAutoFocus();
isAutoFocusing = false;
}
isAutoFocusing = true;
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
Log.v("onAutoFocus success="+success);
isAutoFocusing = false;
isFocused = success;
}
});
}
最佳答案
我已经找到了在 Samsung S4 Zoom 设备上平滑控制快门镜头的解决方案。
将设备设置为智能模式:parameters.set("mode", "smart-auto");
对于放大开始:parameters.set("zoom-action", "optical-tele-start");
对于缩小开始:parameters.set("zoom-action", "optical-wide-start");
对于缩放 Action 停止:parameters.set("zoom-action", "zoom-stop");
快门速度:parameters.set("zoom-speed", 1);//1,2,...
不要忘记在 Camera 实例中保存参数 mCamera.setParameters(parameters);
这在我的设备上运行良好,快门现在安静且流畅。 :) 问候。
关于android - 三星s4 zoom不支持平滑缩放isSmoothZoomSupported()==false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18712785/