Ger*_*ryL 30 android android-camera
内置摄像机应用程序(就像HTC EVO上的那个)似乎camera.autoFocus()只在预览图像发生变化时调用.如果你保持相机稳定没有camera.autoFocus()发生.
我想在camera.startPreview()激活时复制此行为,如下面的初始预览设置代码中所示:
camera = camera.open();
Camera.Parameters parameters = camera.getParameters();
List<String> focusModes = parameters.getSupportedFocusModes();
if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
{
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
Run Code Online (Sandbox Code Playgroud)
我找到的所有例子autoFocus()似乎都是每隔500毫秒到2000毫秒调用一次,或者在拍摄照片或开始录制之前的一刻.
EVO摄像机应用程序似乎使用传感器或算法来触发autoFocus().然而,这个autoFocus()触发器完成它非常好.有没有人知道如何autoFocus()在需要时按需触发,例如当相机移近或远离拍摄对象或稍微平移时?谢谢你,格里
Jua*_*edo 19
我的一个应用程序中遇到了同样的问题.
我的解决方案是使用传感器监听器,并在用户将设备震动到某个阈值时进行自动对焦.这是代码.
public void setCameraFocus(AutoFocusCallback autoFocus){
if (mCamera.getParameters().getFocusMode().equals(mCamera.getParameters().FOCUS_MODE_AUTO) ||
mCamera.getParameters().getFocusMode().equals(mCamera.getParameters().FOCUS_MODE_MACRO)){
mCamera.autoFocus(autoFocus);
}
Run Code Online (Sandbox Code Playgroud)
}
自动对焦的回调:
// this is the autofocus call back
private AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){
public void onAutoFocus(boolean autoFocusSuccess, Camera arg1) {
//Wait.oneSec();
mAutoFocus = true;
}};
Run Code Online (Sandbox Code Playgroud)
以及调用焦点的方式.
public void onSensorChanged(SensorEvent event) {
if (mInvalidate == true){
mView.invalidate();
mInvalidate = false;
}
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
if (!mInitialized){
mLastX = x;
mLastY = y;
mLastZ = z;
mInitialized = true;
}
float deltaX = Math.abs(mLastX - x);
float deltaY = Math.abs(mLastY - y);
float deltaZ = Math.abs(mLastZ - z);
if (deltaX > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing)
mAutoFocus = false;
mPreview.setCameraFocus(myAutoFocusCallback);
}
if (deltaY > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing)
mAutoFocus = false;
mPreview.setCameraFocus(myAutoFocusCallback);
}
if (deltaZ > .5 && mAutoFocus){ //AUTOFOCUS (while it is not autofocusing) */
mAutoFocus = false;
mPreview.setCameraFocus(myAutoFocusCallback);
}
mLastX = x;
mLastY = y;
mLastZ = z;
Run Code Online (Sandbox Code Playgroud)
}
你可以在这里看到完整的项目:http://adblogcat.com/a-camera-preview-with-a-bounding-box-like-google-goggles/
我会利用 SensorEventListener。您需要做的就是监听传感器事件,并在手机方向改变足够的阈值后触发自动对焦。
http://developer.android.com/reference/android/hardware/SensorEventListener.html
| 归档时间: |
|
| 查看次数: |
44092 次 |
| 最近记录: |