我有一个SurfaceView
,它有一个摄像头预览。我已将相机焦点模式设置为:Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO
并添加了一个AutoFocus回调。当我运行这个应用程序时,我可以看到相机实时调整它的焦距,但是autoFocusCallback只被触发一次,当它被触发时,它总是返回相同的值。(2.95)无论我离焦点物体有多近或多远。
想知道我做错了什么..。是否有可能获得关于实际焦距的实时信息?
我的onSurfaceChanged代码SurfaceView:
SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
camera=Camera.open();
try {
camera.setPreviewDisplay(previewHolder);
camera.setDisplayOrientation(90);
}
catch (Throwable e){ }
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
Parameters params = camera.getParameters();
Rect centralFocusArea = new Rect();
centralFocusArea.set(holder.getSurfaceFrame().width()/2-10, holder.getSurfaceFrame().height()/2-10, holder.getSurfaceFrame().width()/2+10, holder.getSurfaceFrame().height()/2+10);
ArrayList<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(new Camera.Area(centralFocusArea, 1000));
//params.setPreviewSize(width, height);
params.setPictureFormat(PixelFormat.JPEG);
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
// params.setFocusAreas(focusAreas);
camera.setParameters(params);
camera.startPreview();
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// TODO Auto-generated method stub
Log.v("CAMERA", "FOCUS CHANGE:"+camera.getParameters().getFocalLength());
camera.getParameters().setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
});
}
public void surfaceDestroyed(SurfaceHolder arg0)
{
camera.stopPreview();
camera.release();
}
};
发布于 2014-06-25 17:17:07
大多数Android实现都没有为焦点距离提供适当的值,尽管参数在Android规范中有很好的定义。一段时间前,我检查了三台不同的相机,但它们都没有提供有用的信息。
发布于 2015-08-17 12:29:02
也许你混淆了两个不同的概念:聚焦距离和焦距。
您似乎对焦距感兴趣,即光学系统具有完美焦距的距离;这取决于您离对焦物体有多远或多近。
相反,焦距是光学系统(即相机镜头)的固有特性,并且在大多数标准移动设备中是固定的(需要有可变焦距的光学变焦能力)。你得到的值2.95是相机的焦距(毫米)。Nexus 7 2013平板电脑有如此长的焦距。
因此,函数getFocalLength()总是给出相同的值,这是完全正常的。
https://stackoverflow.com/questions/24414583
复制相似问题