eri*_*rik 0 android android-camera
我有一个SurfaceView拥有相机预览.我已将相机对焦模式设置为:Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO
并添加了一个AutoFocus回调.当我运行应用程序时,我可以看到相机实时调整其焦点,但autoFocusCallback只会被触发一次,当它发生时,它总是返回相同的值.(2.95)无论我来自焦点对象有多近或多远.
想知道我做错了什么..是否有可能获得实际焦距是什么的实时信息?
我的SurfaceView,onSurfaceChanged代码:
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();
}
};
Run Code Online (Sandbox Code Playgroud)
也许你会混淆两个不同的概念:焦距和焦距.
您似乎对焦距,即光学系统具有完美焦距的距离感兴趣; 这取决于您在焦点对象中的距离或距离.
相反,焦距 是光学系统(即相机镜头)的固有特性,并且它固定在大多数标准移动设备中(需要光学变焦能力以具有可变焦距).您获得的值2.95是相机的焦距(以毫米为单位).Nexus 7 2013平板电脑具有这样的焦距.
因此,函数getFocalLength()始终为您提供相同的值是完全正常的.
| 归档时间: |
|
| 查看次数: |
3399 次 |
| 最近记录: |