我尝试在相机记录应用程序中的“s4 Zoom”设备上处理 ZoomIn/ZoomOut。因为它只支持常规缩放,即parameters.isZoomSupported()==true
, parameters.isSmoothZoomSupported()==false
, 我用过parameters.setZoom(mZoomVal);
mCamera.setParameters(parameters);
照常。
问题是 Zoom 不稳定、嘈杂且不流畅。
有谁知道如何像在三星相机应用程序中那样处理“s4 Zoom”中的变焦速度?
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;
}
});
}
我已经找到了在三星 S4 Zoom 设备上平滑控制快门镜头的解决方案。
将设备设置为智能模式: parameters.set("mode", "smart-auto");
For 放大开始: parameters.set("zoom-action", "optical-tele-start");
For 缩小开始: parameters.set("zoom-action", "optical-wide-start");
For 变焦动作停止: parameters.set("zoom-action", "zoom-stop");
快门速度: parameters.set("zoom-speed", 1); //1,2,...
不要忘记在 Camera 实例中保存参数mCamera.setParameters(parameters);
这在我的设备上运行良好,快门现在安静且平稳。 :)
问候。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)